This page is part of the FHIR Specification (v0.4.0: DSTU 2 Draft). 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
This resource maintained by the FHIR Management Group Work Group
A Resource Profile - a statement of use of one or more FHIR Resources. It may include constraints on Resources and Data Types, Terminology Binding Statements and Extension Definitions.
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.
Implementers should be familiar with 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, Conformance and other infrastructure resources. The metadata describes the structure, and helps find the structure when registered in profile repositories.
url | The 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 |
identifier | Other 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 |
name | A free text natural language name identifying the structure |
publisher | Details of the individual or organization who accepts responsibility for publishing the structure. This helps establish the "authority/credibility" of the structure. |
telecom | Contact details to assist a user in finding and communicating with the publisher |
description | A free text natural language description of the structure and its use |
requirements | The Scope and Usage that this structure was created to meet |
code | A set of terms from external terminologies that may be used to assist with indexing and searching of profiles |
status | The status of the structure allows filtering of profiles that are appropriate for use vs. not. See the Status Codes |
experimental | This structure was authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage |
date | The date that this version of the structure was published |
fhirVersion | The version of the FHIR specification on which this structure is based. It is not necessary to specify the version, as most profiles are valid across multiple versions, and the validity of a structure against a particular version of FHIR can easily be checked by tooling. |
type | todo |
contextType | todo |
context | todo |
Notes:
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
StructureDefinition | I | DomainResource | Resource Profile If the type is 'extension' then the structure must have context information A structure must have a base unless it’s type is 'abstract' A structure must have either a differential, or a snapshot (or both) | |
url | 1..1 | uri | Literal URL used to reference this profile | |
identifier | Σ | 0..* | Identifier | Other identifiers for the profile |
version | Σ | 0..1 | string | Logical id for this version of the profile |
name | Σ | 1..1 | string | Informal name for this profile |
display | 0..1 | string | Use this name when displaying the value | |
publisher | Σ | 0..1 | string | Name of the publisher (Organization or individual) |
contact | Σ | 0..* | Element | Contact details of the publisher |
name | Σ | 0..1 | string | Name of a individual to contact |
telecom | Σ | 0..* | ContactPoint | Contact details for individual or publisher |
description | Σ | 0..1 | string | Natural language description of the profile |
requirements | 0..1 | string | Scope and Usage this structure definition is for | |
copyright | 0..1 | string | Use and/or Publishing restrictions | |
code | Σ | 0..* | Coding | Assist with indexing and finding |
status | M Σ | 1..1 | code | draft | active | retired StructureDefinitionStatus (Required) |
experimental | Σ | 0..1 | boolean | If for testing purposes, not real usage |
date | Σ | 0..1 | dateTime | Date for this version of the profile |
fhirVersion | Σ | 0..1 | id | FHIR Version this profile targets |
mapping | I | 0..* | Element | External specification that the content is mapped to Must have at a name or a uri (or both) |
identity | 1..1 | id | Internal id when this mapping is used | |
uri | I | 0..1 | uri | Identifies what this mapping refers to |
name | I | 0..1 | string | Names what this mapping refers to |
comments | 0..1 | string | Versions, Issues, Scope limitations etc | |
type | 1..1 | code | abstract | type | resource | constraint | extension StructureDefinitionType (Required) | |
contextType | I | 0..1 | code | resource | datatype | mapping | extension ExtensionContext (Required) |
context | I | 0..* | string | Where the extension can be used in instances |
base | I | 0..1 | uri | Structure that this set of constraints applies to |
snapshot | I | 0..1 | Element | Snapshot view of the structure Element paths must be unique - or not (LM) If a structure is a snapshot, then each element definition must have a formal definition, and cardinalities |
element | I | 1..* | ElementDefinition | Definition of elements in the resource (if no profile) |
differential | I | 0..1 | Element | Differential view of the structure |
element | 1..* | ElementDefinition | Definition of elements in the resource (if no profile) |
UML Diagram
XML Template
<StructureDefinition xmlns="http://hl7.org/fhir"> <!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension --> <url value="[uri]"/><!-- 1..1 Literal URL used to reference this profile --> <identifier><!-- 0..* Identifier Other identifiers for the profile --></identifier> <version value="[string]"/><!-- 0..1 Logical id for this version of the profile --> <name value="[string]"/><!-- 1..1 Informal name for this profile --> <display value="[string]"/><!-- 0..1 Use this name when displaying the value --> <publisher value="[string]"/><!-- 0..1 Name of the publisher (Organization or individual) --> <contact> <!-- 0..* Contact details of the publisher --> <name value="[string]"/><!-- 0..1 Name of a individual to contact --> <telecom><!-- 0..* ContactPoint Contact details for individual or publisher --></telecom> </contact> <description value="[string]"/><!-- 0..1 Natural language description of the profile --> <requirements value="[string]"/><!-- 0..1 Scope and Usage this structure definition is for --> <copyright value="[string]"/><!-- 0..1 Use and/or Publishing restrictions --> <code><!-- 0..* Coding Assist with indexing and finding --></code> <status value="[code]"/><!-- 1..1 draft | active | retired --> <experimental value="[boolean]"/><!-- 0..1 If for testing purposes, not real usage --> <date value="[dateTime]"/><!-- 0..1 Date for this version of the profile --> <fhirVersion value="[id]"/><!-- 0..1 FHIR Version this profile 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]"/><!-- 0..1 Identifies what this mapping refers to --> <name value="[string]"/><!-- 0..1 Names what this mapping refers to --> <comments value="[string]"/><!-- 0..1 Versions, Issues, Scope limitations etc --> </mapping> <type value="[code]"/><!-- 1..1 abstract | type | resource | constraint | extension --> <contextType value="[code]"/><!-- 0..1 resource | datatype | mapping | extension --> <context value="[string]"/><!-- 0..* Where the extension can be used in instances --> <base value="[uri]"/><!-- 0..1 Structure that this set of constraints applies to --> <snapshot> <!-- 0..1 Snapshot view of the structure --> <element><!-- 1..* ElementDefinition Definition of elements in the resource (if no profile) --></element> </snapshot> <differential> <!-- 0..1 Differential view of the structure --> <element><!-- 1..* ElementDefinition Definition of elements in the resource (if no profile) --></element> </differential> </StructureDefinition>
JSON Template
{ "resourceType" : "StructureDefinition", // from Resource: id, meta, implicitRules, and language // from DomainResource: text, contained, extension, and modifierExtension "url" : "<uri>", // R! Literal URL used to reference this profile "identifier" : [{ Identifier }], // Other identifiers for the profile "version" : "<string>", // Logical id for this version of the profile "name" : "<string>", // R! Informal name for this profile "display" : "<string>", // Use this name when displaying the value "publisher" : "<string>", // Name of the publisher (Organization or individual) "contact" : [{ // Contact details of the publisher "name" : "<string>", // Name of a individual to contact "telecom" : [{ ContactPoint }] // Contact details for individual or publisher }], "description" : "<string>", // Natural language description of the profile "requirements" : "<string>", // Scope and Usage this structure definition is for "copyright" : "<string>", // Use and/or Publishing restrictions "code" : [{ Coding }], // Assist with indexing and finding "status" : "<code>", // R! draft | active | retired "experimental" : <boolean>, // If for testing purposes, not real usage "date" : "<dateTime>", // Date for this version of the profile "fhirVersion" : "<id>", // FHIR Version this profile targets "mapping" : [{ // External specification that the content is mapped to "identity" : "<id>", // R! Internal id when this mapping is used "uri" : "<uri>", // C? Identifies what this mapping refers to "name" : "<string>", // C? Names what this mapping refers to "comments" : "<string>" // Versions, Issues, Scope limitations etc }], "type" : "<code>", // R! abstract | type | resource | constraint | extension "contextType" : "<code>", // C? resource | datatype | mapping | extension "context" : ["<string>"], // C? Where the extension can be used in instances "base" : "<uri>", // C? Structure that this set of constraints applies to "snapshot" : { // C? Snapshot view of the structure "element" : [{ ElementDefinition }] // C? R! Definition of elements in the resource (if no profile) }, "differential" : { // C? Differential view of the structure "element" : [{ ElementDefinition }] // R! Definition of elements in the resource (if no profile) } }
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
StructureDefinition | I | DomainResource | Resource Profile If the type is 'extension' then the structure must have context information A structure must have a base unless it’s type is 'abstract' A structure must have either a differential, or a snapshot (or both) | |
url | 1..1 | uri | Literal URL used to reference this profile | |
identifier | Σ | 0..* | Identifier | Other identifiers for the profile |
version | Σ | 0..1 | string | Logical id for this version of the profile |
name | Σ | 1..1 | string | Informal name for this profile |
display | 0..1 | string | Use this name when displaying the value | |
publisher | Σ | 0..1 | string | Name of the publisher (Organization or individual) |
contact | Σ | 0..* | Element | Contact details of the publisher |
name | Σ | 0..1 | string | Name of a individual to contact |
telecom | Σ | 0..* | ContactPoint | Contact details for individual or publisher |
description | Σ | 0..1 | string | Natural language description of the profile |
requirements | 0..1 | string | Scope and Usage this structure definition is for | |
copyright | 0..1 | string | Use and/or Publishing restrictions | |
code | Σ | 0..* | Coding | Assist with indexing and finding |
status | M Σ | 1..1 | code | draft | active | retired StructureDefinitionStatus (Required) |
experimental | Σ | 0..1 | boolean | If for testing purposes, not real usage |
date | Σ | 0..1 | dateTime | Date for this version of the profile |
fhirVersion | Σ | 0..1 | id | FHIR Version this profile targets |
mapping | I | 0..* | Element | External specification that the content is mapped to Must have at a name or a uri (or both) |
identity | 1..1 | id | Internal id when this mapping is used | |
uri | I | 0..1 | uri | Identifies what this mapping refers to |
name | I | 0..1 | string | Names what this mapping refers to |
comments | 0..1 | string | Versions, Issues, Scope limitations etc | |
type | 1..1 | code | abstract | type | resource | constraint | extension StructureDefinitionType (Required) | |
contextType | I | 0..1 | code | resource | datatype | mapping | extension ExtensionContext (Required) |
context | I | 0..* | string | Where the extension can be used in instances |
base | I | 0..1 | uri | Structure that this set of constraints applies to |
snapshot | I | 0..1 | Element | Snapshot view of the structure Element paths must be unique - or not (LM) If a structure is a snapshot, then each element definition must have a formal definition, and cardinalities |
element | I | 1..* | ElementDefinition | Definition of elements in the resource (if no profile) |
differential | I | 0..1 | Element | Differential view of the structure |
element | 1..* | ElementDefinition | Definition of elements in the resource (if no profile) |
XML Template
<StructureDefinition xmlns="http://hl7.org/fhir"> <!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension --> <url value="[uri]"/><!-- 1..1 Literal URL used to reference this profile --> <identifier><!-- 0..* Identifier Other identifiers for the profile --></identifier> <version value="[string]"/><!-- 0..1 Logical id for this version of the profile --> <name value="[string]"/><!-- 1..1 Informal name for this profile --> <display value="[string]"/><!-- 0..1 Use this name when displaying the value --> <publisher value="[string]"/><!-- 0..1 Name of the publisher (Organization or individual) --> <contact> <!-- 0..* Contact details of the publisher --> <name value="[string]"/><!-- 0..1 Name of a individual to contact --> <telecom><!-- 0..* ContactPoint Contact details for individual or publisher --></telecom> </contact> <description value="[string]"/><!-- 0..1 Natural language description of the profile --> <requirements value="[string]"/><!-- 0..1 Scope and Usage this structure definition is for --> <copyright value="[string]"/><!-- 0..1 Use and/or Publishing restrictions --> <code><!-- 0..* Coding Assist with indexing and finding --></code> <status value="[code]"/><!-- 1..1 draft | active | retired --> <experimental value="[boolean]"/><!-- 0..1 If for testing purposes, not real usage --> <date value="[dateTime]"/><!-- 0..1 Date for this version of the profile --> <fhirVersion value="[id]"/><!-- 0..1 FHIR Version this profile 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]"/><!-- 0..1 Identifies what this mapping refers to --> <name value="[string]"/><!-- 0..1 Names what this mapping refers to --> <comments value="[string]"/><!-- 0..1 Versions, Issues, Scope limitations etc --> </mapping> <type value="[code]"/><!-- 1..1 abstract | type | resource | constraint | extension --> <contextType value="[code]"/><!-- 0..1 resource | datatype | mapping | extension --> <context value="[string]"/><!-- 0..* Where the extension can be used in instances --> <base value="[uri]"/><!-- 0..1 Structure that this set of constraints applies to --> <snapshot> <!-- 0..1 Snapshot view of the structure --> <element><!-- 1..* ElementDefinition Definition of elements in the resource (if no profile) --></element> </snapshot> <differential> <!-- 0..1 Differential view of the structure --> <element><!-- 1..* ElementDefinition Definition of elements in the resource (if no profile) --></element> </differential> </StructureDefinition>
JSON Template
{ "resourceType" : "StructureDefinition", // from Resource: id, meta, implicitRules, and language // from DomainResource: text, contained, extension, and modifierExtension "url" : "<uri>", // R! Literal URL used to reference this profile "identifier" : [{ Identifier }], // Other identifiers for the profile "version" : "<string>", // Logical id for this version of the profile "name" : "<string>", // R! Informal name for this profile "display" : "<string>", // Use this name when displaying the value "publisher" : "<string>", // Name of the publisher (Organization or individual) "contact" : [{ // Contact details of the publisher "name" : "<string>", // Name of a individual to contact "telecom" : [{ ContactPoint }] // Contact details for individual or publisher }], "description" : "<string>", // Natural language description of the profile "requirements" : "<string>", // Scope and Usage this structure definition is for "copyright" : "<string>", // Use and/or Publishing restrictions "code" : [{ Coding }], // Assist with indexing and finding "status" : "<code>", // R! draft | active | retired "experimental" : <boolean>, // If for testing purposes, not real usage "date" : "<dateTime>", // Date for this version of the profile "fhirVersion" : "<id>", // FHIR Version this profile targets "mapping" : [{ // External specification that the content is mapped to "identity" : "<id>", // R! Internal id when this mapping is used "uri" : "<uri>", // C? Identifies what this mapping refers to "name" : "<string>", // C? Names what this mapping refers to "comments" : "<string>" // Versions, Issues, Scope limitations etc }], "type" : "<code>", // R! abstract | type | resource | constraint | extension "contextType" : "<code>", // C? resource | datatype | mapping | extension "context" : ["<string>"], // C? Where the extension can be used in instances "base" : "<uri>", // C? Structure that this set of constraints applies to "snapshot" : { // C? Snapshot view of the structure "element" : [{ ElementDefinition }] // C? R! Definition of elements in the resource (if no profile) }, "differential" : { // C? Differential view of the structure "element" : [{ ElementDefinition }] // R! Definition of elements in the resource (if no profile) } }
Alternate definitions: Schema/Schematron, Resource Profile (XML, JSON), Questionnaire
Path | Definition | Type | Reference |
---|---|---|---|
StructureDefinition.status | The lifecycle status of a StructureDefinition | Fixed | http://hl7.org/fhir/structure-definition-status |
StructureDefinition.type | Defines the type of structure that a definition is describing | Fixed | http://hl7.org/fhir/structure-definition-type |
StructureDefinition.contextType | How an extension context is interpreted | Fixed | http://hl7.org/fhir/extension-context |
element.path
provides the overall structure.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]".
Names of elements that are choices retain the "[x]" in the name, even if a constraint on such an element limits the number of allowed types down to one.
StructureDefinition.type
indicates what kind of structure is being defined. There are 5 kinds of structures:
The first 3 types can only be defined by the FHIR specification. Types 4 and 5 are used in profiles and implementation guides, and may be published by any implementer of the specification.
When the type of a structure definition is either a "constraint" or an "extension", then the following rules 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:
http://loinc.org | LOINC code for the element |
http://snomed.info | SNOMED CT code for the element |
http://hl7.org/v3 | RIM mapping |
http://hl7.org/v2 | v2 mapping |
http://nema.org/dicom | DICOM tag mapping |
http://w3.org/vcard | vCard equivalent field |
http://ihe.net/xds | XDS metadata equivalent |
Search parameters for this resource. The common parameters also apply. See Searching for more information about searching in REST, messaging, and services.
Name | Type | Description | Paths |
code | token | A code for the profile | StructureDefinition.code |
date | date | The profile publication date | StructureDefinition.date |
description | string | Text search in the description of the profile | StructureDefinition.description |
identifier | token | The identifier of the profile | StructureDefinition.identifier |
name | string | Name of the profile | StructureDefinition.name |
path | token | A path that is constrained in the profile | StructureDefinition.snapshot.element.path, StructureDefinition.differential.element.path |
publisher | string | Name of the publisher of the profile | StructureDefinition.publisher |
status | token | The current status of the profile | StructureDefinition.status |
type | token | abstract | type | resource | constraint | extension | StructureDefinition.type |
url | token | Literal URL used to reference this profile | StructureDefinition.url |
valueset | reference | A vocabulary binding code | StructureDefinition.snapshot.element.binding.reference[x] (ValueSet) |
version | token | The version identifier of the profile | StructureDefinition.version |