FHIR Release 3 (STU) R4 Ballot #1 (Mixed Normative/Trial use)

This page is part of the FHIR Specification (v3.0.2: STU 3). (v3.3.0: R4 Ballot 2). 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 Group Maturity Level : 5   Trial Use Normative Compartments : Not linked to any defined compartments

Normative Candidate Note: This page is candidate normative content for R4 in the Conformance Package . Once normative, it will lose it's Maturity Level, and breaking changes will no longer be made.

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
  • StructureDefinitions define concrete elements and structures for use with FHIR alone and that have defined wire representations (XML, JSON, etc.). This is distinct from DataElement which defines abstract elements that might appear anywhere - FHIR, questionnaire questions, CDA , HL7 v2 , X12, OpenEHR, a proprietary database, etc. Data elements may map to FHIR resources, data types and/or extensions but do not have any defined serialization format of their own.

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, 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 Computer=ready name (e.g. a token) that identifies the structure - suitable for code generation
title 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" "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 for genuine usage
date The date 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 The type the structure describes.
contextType For extensions, the types of contexts in which the extension can be used (resources, datatypes, or extensions).
context For extensions, the specific types of resources or data types on which the extension can be used.

Notes:

  • The name of the structure is not required to be globally unique, but the name should have some scoping information (e.g. Acme Inc. (USA), Allergy List)
  • Multiple codes 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

This resource is referenced by CapabilityStatement , GraphDefinition , ImplementationGuide , MessageDefinition and , OperationDefinition , StructureMap and TerminologyCapabilities

Structure

Name Flags Card. Type Description & Constraints doco
. . StructureDefinition I N DomainResource Structural Definition
+ In any snapshot or differential, no label, code or requirements on the an element without a "." "." in the path (e.g. the first element)
+ Custom types can only be used in logical models
+ All element definitions must have unique ids (snapshot)
+ Context Invariants can only be used for extensions
+ All element definitions must have unique ids (diff)
+ element.base cannot appear if there is no base on the structure definition
+ If there's a type, its content must match the path name in the first element of a snapshot
+ All element definitions must have an id
+ Element paths must be unique unless the structure is a constraint
+ Default values can only be specified on logical models
+ If the structure describes a base Resource or Type, the URL has to start with "http://hl7.org/fhir/StructureDefinition/" "http://hl7.org/fhir/StructureDefinition/" and the tail must match the id
+ A structure must have either a differential, or a snapshot (or both)
+ If the structure defines an extension then the structure must have context information
+ If the structure is not abstract, then there SHALL be a baseDefinition
Elements defined in Ancestors: id , meta , implicitRules , language , text , contained , extension , modifierExtension
. . . url Σ 1..1 uri Logical URI to reference Canonical identifier for this structure definition definition, represented as a URI (globally unique)
. . . identifier Σ 0..* Identifier Additional identifier for the structure definition
. . . version Σ 0..1 string Business version of the structure definition
. . . name Σ 1..1 string Name for this structure definition (computer friendly)
. . . title Σ 0..1 string Name for this structure definition (human friendly)
. . . status ?! Σ 1..1 code draft | active | retired | unknown
PublicationStatus ( Required )
. . . experimental ?! Σ 0..1 boolean For testing purposes, not real usage
. . . date Σ 0..1 dateTime Date this was last changed
. . . publisher Σ 0..1 string Name of the publisher (organization or individual)
. . . contact Σ 0..* ContactDetail Contact details for the publisher
. . . description 0..1 markdown Natural language description of the structure definition
. . . useContext Σ TU 0..* UsageContext Context The context that the content is intended to support
. . . jurisdiction Σ 0..* CodeableConcept Intended jurisdiction for structure definition (if applicable)
Jurisdiction ValueSet ( Extensible )
. . . purpose 0..1 markdown Why this structure definition is defined
. . . copyright 0..1 markdown Use and/or publishing restrictions
. . . keyword Σ 0..* Coding Assist with indexing and finding
Structure Definition Codes ( Example )
. . . fhirVersion Σ 0..1 id FHIR Version this StructureDefinition targets
All Published FHIR versions ( Required )
. . . mapping I 0..* BackboneElement External specification that the content is mapped to
+ Must have at least 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
. . . . comment 0..1 string Versions, Issues, Scope limitations etc.
. . . kind Σ 1..1 code primitive-type | complex-type | resource | logical
StructureDefinitionKind ( Required )
. . . abstract Σ 1..1 boolean Whether the structure is abstract
. . contextType . context Σ I 0..1 0..* BackboneElement If an extension, where it can be used in instances
.... type Σ 1..1 code resource fhirpath | datatype element | extension
ExtensionContext ExtensionContextType ( Required )
. . . . context expression Σ I 0..* 1..1 string Where the extension can be used in instances
. . . contextInvariant Σ I 0..* string FHIRPath invariants - when the extension can be used
. . . type Σ I 1..1 code uri Type defined or constrained by this structure
FHIRDefinedType ( Extensible )
. . . baseDefinition Σ I 0..1 uri canonical Definition that this type is constrained/specialized from
. . . derivation Σ I 0..1 code specialization | constraint - How relates to base definition
TypeDerivationRule ( Required )
. . . snapshot I 0..1 BackboneElement Snapshot view of the structure
+ The first element in a snapshot has no type
+ In any snapshot, all the elements must be in the specified type type, and must have a base definition
+ Each element definition in a snapshot must have a formal definition and cardinalities
. . . . element I 1..* ElementDefinition Definition of elements in the resource (if no StructureDefinition)
+ provide either a binding reference or a description (or both)
. . . differential I 0..1 BackboneElement Differential view of the structure
+ If the first element in a differential has no "." "." in the path, it has no type
+ No slicing on the root element
+ In any differential, all the elements must be in the specified type
. . . . element 1..* ElementDefinition Definition of elements in the resource (if no StructureDefinition)

doco Documentation for this format

UML Diagram ( Legend )

StructureDefinition ( DomainResource ) An absolute URI that is used to identify this structure definition when it is referenced in a specification, model, design or an instance. instance; also called its canonical identifier. This SHALL be a URL, SHOULD be globally unique, unique and SHOULD be an a literal address at which this structure definition is (or will be) published. The URL SHOULD include the major version of the structure definition. For more information see [Technical and Business Versions](resource.html#versions) published url : 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 instance identifier : 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 sequence version : string [0..1] 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 generation name : string [1..1] A short, descriptive, user-friendly title for the structure definition title : 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] « The lifecycle status of a Value Set or Concept Map. an artifact. (Strength=Required) PublicationStatus ! » A boolean Boolean value to indicate that this structure definition is authored for testing purposes (or education/evaluation/marketing), education/evaluation/marketing) and is not intended to be used for genuine usage (this element modifies the meaning of other elements) experimental : boolean [0..1] The date (and optionally time) when the structure definition was published. The date must change if and 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 changes date : dateTime [0..1] The name of the individual or organization or individual that published the structure definition publisher : string [0..1] Contact details to assist a user in finding and communicating with the publisher contact : ContactDetail [0..*] A free text natural language description of the structure definition from a consumer's perspective description : markdown [0..1] The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate structure definition instances useContext : UsageContext [0..*] A legal or geographic region in which the structure definition is intended to be used jurisdiction : CodeableConcept [0..*] « Countries and regions within which this artifact is targeted for use (Strength=Extensible) Jurisdiction ValueSet + » Explaination Explanation of why this structure definition is needed and why it has been designed as it has purpose : 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 copyright : markdown [0..1] A set of key words or terms from external terminologies that may be used to assist with indexing and searching of templates keyword : Coding [0..*] « Codes for the meaning of the defined structure (SNOMED CT and LOINC codes, as an example). (Strength=Example) Structure Definition ?? » 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 3.0.2 3.3.0 for this version fhirVersion : id [0..1] « All published FHIR Versions (Strength=Required) All Published FHIR versions ! » Defines the kind of structure that this definition is describing kind : code [1..1] « Defines the type of structure that a definition is describing. (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 systems abstract : boolean [1..1] If this is an extension, Identifies the context within FHIR resources where the extension can be used contextType : code [0..1] How an extension context is interpreted. (Strength=Required) ExtensionContext ! Identifies the types of resource or data type elements to which the extension can be applied context : string [0..*] A set of rules as Fluent FHIRPath Invariants about when the extension can be used (e.g. co-occurrence variants for the extension) extension). All the rules must be true contextInvariant : string [0..*] 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) 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 models type : code uri [1..1] « Either a resource or a data type, including logical model types (Strength=Extensible) FHIRDefinedType + » An absolute URI that is the base structure from which this type is derived, either by specialization or constraint baseDefinition : uri canonical [0..1] How the type relates to the baseDefinition derivation : code [0..1] « How a type relates to its baseDefinition. (Strength=Required) TypeDerivationRule ! » Mapping An Internal id that is used to identify this mapping set when specific mappings are made identity : id [1..1] An absolute URI that identifies the specification that this mapping is expressed to uri : uri [0..1] A name for the specification that is being mapped to name : string [0..1] Comments about this mapping, including version notes, issues, scope limitations, and other important notes for usage comment : string [0..1] Context Defines how to interpret the expression that defines what the context of the extension is type : code [1..1] « How an extension context is interpreted. (Strength=Required) ExtensionContextType ! » An expression that defines where an extension can be used in resources expression : string [1..1] Snapshot Captures constraints on each element within the resource element : ElementDefinition [1..*] Differential Captures constraints on each element within the resource element : ElementDefinition [1..*] An external specification that the content is mapped to mapping [0..*] Identifies the types of resource or data type elements to which the extension can be applied context [0..*] A snapshot view is expressed in a stand alone standalone form that can be used and interpreted without considering the base StructureDefinition snapshot [0..1] A differential view is expressed relative to the base StructureDefinition - a statement of differences that it applies differential [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 -->
 <name value="[string]"/><!-- 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 (organization or individual) -->

 <contact><!-- 0..* ContactDetail Contact details for the publisher --></contact>
 <
 <</useContext>

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

 <keyword><!-- 0..* Coding Assist with indexing and finding --></keyword>
 <

 <fhirVersion value="[id]"/><!-- 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]"/><!-- ?? 0..1 Identifies what this mapping refers to -->
  <name value="[string]"/><!-- ?? 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>  <!-- ?? 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]"/><!-- ?? 0..* FHIRPath invariants - when the extension can be used -->
 <type value="[uri]"/><!-- ?? 1..1 Type defined or constrained by this structure -->
 <baseDefinition><!-- ?? 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>  <!-- ?? 0..1 Snapshot view of the structure -->

  <element><!-- ?? 1..* ElementDefinition Definition of elements in the resource (if no StructureDefinition) --></element>
 </snapshot>
 <differential>  <!-- ?? 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" : "",

  "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
  "name" : "<string>", // 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 (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
  "keyword" : [{ Coding }], // Assist with indexing and finding
  "fhirVersion" : "<id>", // 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>", // C? Identifies what this mapping refers to
    "name" : "<string>", // C? 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" : [{ // C? 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>"], // C? FHIRPath invariants - when the extension can be used
  "type" : "<uri>", // C? R!  Type defined or constrained by this structure
  "baseDefinition" : "<canonical>", // C? Definition that this type is constrained/specialized from
  "derivation" : "<code>", // specialization | constraint - How relates to base definition
  "snapshot" : { // C? Snapshot view of the structure
    "element" : [{ ElementDefinition }] // C? R!  Definition of elements in the resource (if no StructureDefinition)

  },
  "
    "

  "differential" : { // C? 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:

  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
  fhir:StructureDefinition.name [ string ]; # 1..1 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:
  fhir:
  fhir:

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

  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:

  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.keyword [ Coding ], ... ; # 0..* Assist with indexing and finding
  fhir:

  fhir:StructureDefinition.fhirVersion [ id ]; # 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 Identifies what this mapping refers to
    fhir:StructureDefinition.mapping.name [ string ]; # 0..1 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:
  fhir:
  fhir:
  fhir:
  fhir:

  fhir:StructureDefinition.context [ # 0..* 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..* FHIRPath invariants - when the extension can be used
  fhir:StructureDefinition.type [ uri ]; # 1..1 Type defined or constrained by this structure
  fhir:StructureDefinition.baseDefinition [ canonical(StructureDefinition) ]; # 0..1 Definition that this type is constrained/specialized from

  fhir:StructureDefinition.derivation [ code ]; # 0..1 specialization | constraint - How relates to base definition
  fhir:

  fhir:StructureDefinition.snapshot [ # 0..1 Snapshot view of the structure

    fhir:StructureDefinition.snapshot.element [ ElementDefinition ], ... ; # 1..* Definition of elements in the resource (if no StructureDefinition)
  ];
  fhir:StructureDefinition.differential [ # 0..1 Differential view of the structure
    fhir:StructureDefinition.differential.element [ ElementDefinition ], ... ; # 1..* Definition of elements in the resource (if no StructureDefinition)
  ];
]

Changes since DSTU2 R3

StructureDefinition Min Cardinality changed from 1 to 0 Max Cardinality changed from 1 to * StructureDefinition.title StructureDefinition.purpose Renamed from requirements to purpose Type changed from string to markdown StructureDefinition.copyright Type changed from string to markdown StructureDefinition.keyword Renamed from code to keyword StructureDefinition.mapping.comment Renamed from comments to comment
StructureDefinition Renamed from display to title StructureDefinition.status Change value set from http://hl7.org/fhir/ValueSet/conformance-resource-status to http://hl7.org/fhir/ValueSet/publication-status StructureDefinition.experimental Now marked as Modifier
StructureDefinition.contact StructureDefinition.fhirVersion
  • Type changed from BackboneElement to ContactDetail Add Binding http://hl7.org/fhir/ValueSet/fhir-versions (required)
StructureDefinition.description StructureDefinition.context
  • Type changed from string to markdown StructureDefinition.useContext Type changed from CodeableConcept to UsageContext Remove Binding http://hl7.org/fhir/ValueSet/use-context (extensible) BackboneElement
StructureDefinition.jurisdiction StructureDefinition.context.type
  • Added Element
StructureDefinition.contextInvariant StructureDefinition.context.expression
  • Added Element
StructureDefinition.type
  • Renamed from constrainedType to type Min Cardinality Type changed from 0 to 1 Change binding strength from required code to extensible uri
StructureDefinition.baseDefinition
  • Renamed Type changed from base uri to baseDefinition StructureDefinition.derivation Added Element StructureDefinition.contact.name deleted canonical
StructureDefinition.contact.telecom StructureDefinition.contextType
  • deleted

See the Full Difference for further information

This analysis is available as XML or JSON .

See R2 <--> R3 Conversion Maps (status = 248 tests that all execute ok. 60 fail round-trip testing and 145 r3 resources are invalid (441 errors). ). Note: these have note yet been updated to be R3 to R4

Structure

Name Flags Card. Type Description & Constraints doco
. . StructureDefinition I N DomainResource Structural Definition
+ In any snapshot or differential, no label, code or requirements on the an element without a "." "." in the path (e.g. the first element)
+ Custom types can only be used in logical models
+ All element definitions must have unique ids (snapshot)
+ Context Invariants can only be used for extensions
+ All element definitions must have unique ids (diff)
+ element.base cannot appear if there is no base on the structure definition
+ If there's a type, its content must match the path name in the first element of a snapshot
+ All element definitions must have an id
+ Element paths must be unique unless the structure is a constraint
+ Default values can only be specified on logical models
+ If the structure describes a base Resource or Type, the URL has to start with "http://hl7.org/fhir/StructureDefinition/" "http://hl7.org/fhir/StructureDefinition/" and the tail must match the id
+ A structure must have either a differential, or a snapshot (or both)
+ If the structure defines an extension then the structure must have context information
+ If the structure is not abstract, then there SHALL be a baseDefinition
Elements defined in Ancestors: id , meta , implicitRules , language , text , contained , extension , modifierExtension
. . . url Σ 1..1 uri Logical URI to reference Canonical identifier for this structure definition definition, represented as a URI (globally unique)
. . . identifier Σ 0..* Identifier Additional identifier for the structure definition
. . . version Σ 0..1 string Business version of the structure definition
. . . name Σ 1..1 string Name for this structure definition (computer friendly)
. . . title Σ 0..1 string Name for this structure definition (human friendly)
. . . status ?! Σ 1..1 code draft | active | retired | unknown
PublicationStatus ( Required )
. . . experimental ?! Σ 0..1 boolean For testing purposes, not real usage
. . . date Σ 0..1 dateTime Date this was last changed
. . . publisher Σ 0..1 string Name of the publisher (organization or individual)
. . . contact Σ 0..* ContactDetail Contact details for the publisher
. . . description 0..1 markdown Natural language description of the structure definition
. . . useContext Σ TU 0..* UsageContext Context The context that the content is intended to support
. . . jurisdiction Σ 0..* CodeableConcept Intended jurisdiction for structure definition (if applicable)
Jurisdiction ValueSet ( Extensible )
. . . purpose 0..1 markdown Why this structure definition is defined
. . . copyright 0..1 markdown Use and/or publishing restrictions
. . . keyword Σ 0..* Coding Assist with indexing and finding
Structure Definition Codes ( Example )
. . . fhirVersion Σ 0..1 id FHIR Version this StructureDefinition targets
All Published FHIR versions ( Required )
. . . mapping I 0..* BackboneElement External specification that the content is mapped to
+ Must have at least 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
. . . . comment 0..1 string Versions, Issues, Scope limitations etc.
. . . kind Σ 1..1 code primitive-type | complex-type | resource | logical
StructureDefinitionKind ( Required )
. . . abstract Σ 1..1 boolean Whether the structure is abstract
. . contextType . context Σ I 0..1 0..* BackboneElement If an extension, where it can be used in instances
.... type Σ 1..1 code resource fhirpath | datatype element | extension
ExtensionContext ExtensionContextType ( Required )
. . . . context expression Σ I 0..* 1..1 string Where the extension can be used in instances
. . . contextInvariant Σ I 0..* string FHIRPath invariants - when the extension can be used
. . . type Σ I 1..1 code uri Type defined or constrained by this structure
FHIRDefinedType ( Extensible )
. . . baseDefinition Σ I 0..1 uri canonical Definition that this type is constrained/specialized from
. . . derivation Σ I 0..1 code specialization | constraint - How relates to base definition
TypeDerivationRule ( Required )
. . . snapshot I 0..1 BackboneElement Snapshot view of the structure
+ The first element in a snapshot has no type
+ In any snapshot, all the elements must be in the specified type type, and must have a base definition
+ Each element definition in a snapshot must have a formal definition and cardinalities
. . . . element I 1..* ElementDefinition Definition of elements in the resource (if no StructureDefinition)
+ provide either a binding reference or a description (or both)
. . . differential I 0..1 BackboneElement Differential view of the structure
+ If the first element in a differential has no "." "." in the path, it has no type
+ No slicing on the root element
+ In any differential, all the elements must be in the specified type
. . . . element 1..* ElementDefinition Definition of elements in the resource (if no StructureDefinition)

doco Documentation for this format

UML Diagram ( Legend )

StructureDefinition ( DomainResource ) An absolute URI that is used to identify this structure definition when it is referenced in a specification, model, design or an instance. instance; also called its canonical identifier. This SHALL be a URL, SHOULD be globally unique, unique and SHOULD be an a literal address at which this structure definition is (or will be) published. The URL SHOULD include the major version of the structure definition. For more information see [Technical and Business Versions](resource.html#versions) published url : 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 instance identifier : 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 sequence version : string [0..1] 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 generation name : string [1..1] A short, descriptive, user-friendly title for the structure definition title : 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] « The lifecycle status of a Value Set or Concept Map. an artifact. (Strength=Required) PublicationStatus ! » A boolean Boolean value to indicate that this structure definition is authored for testing purposes (or education/evaluation/marketing), education/evaluation/marketing) and is not intended to be used for genuine usage (this element modifies the meaning of other elements) experimental : boolean [0..1] The date (and optionally time) when the structure definition was published. The date must change if and 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 changes date : dateTime [0..1] The name of the individual or organization or individual that published the structure definition publisher : string [0..1] Contact details to assist a user in finding and communicating with the publisher contact : ContactDetail [0..*] A free text natural language description of the structure definition from a consumer's perspective description : markdown [0..1] The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate structure definition instances useContext : UsageContext [0..*] A legal or geographic region in which the structure definition is intended to be used jurisdiction : CodeableConcept [0..*] « Countries and regions within which this artifact is targeted for use (Strength=Extensible) Jurisdiction ValueSet + » Explaination Explanation of why this structure definition is needed and why it has been designed as it has purpose : 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 copyright : markdown [0..1] A set of key words or terms from external terminologies that may be used to assist with indexing and searching of templates keyword : Coding [0..*] « Codes for the meaning of the defined structure (SNOMED CT and LOINC codes, as an example). (Strength=Example) Structure Definition ?? » 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 3.0.2 3.3.0 for this version fhirVersion : id [0..1] « All published FHIR Versions (Strength=Required) All Published FHIR versions ! » Defines the kind of structure that this definition is describing kind : code [1..1] « Defines the type of structure that a definition is describing. (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 systems abstract : boolean [1..1] If this is an extension, Identifies the context within FHIR resources where the extension can be used contextType : code [0..1] How an extension context is interpreted. (Strength=Required) ExtensionContext ! Identifies the types of resource or data type elements to which the extension can be applied context : string [0..*] A set of rules as Fluent FHIRPath Invariants about when the extension can be used (e.g. co-occurrence variants for the extension) extension). All the rules must be true contextInvariant : string [0..*] 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) 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 models type : code uri [1..1] « Either a resource or a data type, including logical model types (Strength=Extensible) FHIRDefinedType + » An absolute URI that is the base structure from which this type is derived, either by specialization or constraint baseDefinition : uri canonical [0..1] How the type relates to the baseDefinition derivation : code [0..1] « How a type relates to its baseDefinition. (Strength=Required) TypeDerivationRule ! » Mapping An Internal id that is used to identify this mapping set when specific mappings are made identity : id [1..1] An absolute URI that identifies the specification that this mapping is expressed to uri : uri [0..1] A name for the specification that is being mapped to name : string [0..1] Comments about this mapping, including version notes, issues, scope limitations, and other important notes for usage comment : string [0..1] Context Defines how to interpret the expression that defines what the context of the extension is type : code [1..1] « How an extension context is interpreted. (Strength=Required) ExtensionContextType ! » An expression that defines where an extension can be used in resources expression : string [1..1] Snapshot Captures constraints on each element within the resource element : ElementDefinition [1..*] Differential Captures constraints on each element within the resource element : ElementDefinition [1..*] An external specification that the content is mapped to mapping [0..*] Identifies the types of resource or data type elements to which the extension can be applied context [0..*] A snapshot view is expressed in a stand alone standalone form that can be used and interpreted without considering the base StructureDefinition snapshot [0..1] A differential view is expressed relative to the base StructureDefinition - a statement of differences that it applies differential [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 -->
 <name value="[string]"/><!-- 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 (organization or individual) -->

 <contact><!-- 0..* ContactDetail Contact details for the publisher --></contact>
 <
 <</useContext>

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

 <keyword><!-- 0..* Coding Assist with indexing and finding --></keyword>
 <

 <fhirVersion value="[id]"/><!-- 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]"/><!-- ?? 0..1 Identifies what this mapping refers to -->
  <name value="[string]"/><!-- ?? 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>  <!-- ?? 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]"/><!-- ?? 0..* FHIRPath invariants - when the extension can be used -->
 <type value="[uri]"/><!-- ?? 1..1 Type defined or constrained by this structure -->
 <baseDefinition><!-- ?? 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>  <!-- ?? 0..1 Snapshot view of the structure -->

  <element><!-- ?? 1..* ElementDefinition Definition of elements in the resource (if no StructureDefinition) --></element>
 </snapshot>
 <differential>  <!-- ?? 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" : "",

  "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
  "name" : "<string>", // 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 (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
  "keyword" : [{ Coding }], // Assist with indexing and finding
  "fhirVersion" : "<id>", // 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>", // C? Identifies what this mapping refers to
    "name" : "<string>", // C? 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" : [{ // C? 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>"], // C? FHIRPath invariants - when the extension can be used
  "type" : "<uri>", // C? R!  Type defined or constrained by this structure
  "baseDefinition" : "<canonical>", // C? Definition that this type is constrained/specialized from
  "derivation" : "<code>", // specialization | constraint - How relates to base definition
  "snapshot" : { // C? Snapshot view of the structure
    "element" : [{ ElementDefinition }] // C? R!  Definition of elements in the resource (if no StructureDefinition)

  },
  "
    "

  "differential" : { // C? 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:

  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
  fhir:StructureDefinition.name [ string ]; # 1..1 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:
  fhir:
  fhir:

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

  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:

  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.keyword [ Coding ], ... ; # 0..* Assist with indexing and finding
  fhir:

  fhir:StructureDefinition.fhirVersion [ id ]; # 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 Identifies what this mapping refers to
    fhir:StructureDefinition.mapping.name [ string ]; # 0..1 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:
  fhir:
  fhir:
  fhir:
  fhir:

  fhir:StructureDefinition.context [ # 0..* 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..* FHIRPath invariants - when the extension can be used
  fhir:StructureDefinition.type [ uri ]; # 1..1 Type defined or constrained by this structure
  fhir:StructureDefinition.baseDefinition [ canonical(StructureDefinition) ]; # 0..1 Definition that this type is constrained/specialized from

  fhir:StructureDefinition.derivation [ code ]; # 0..1 specialization | constraint - How relates to base definition
  fhir:

  fhir:StructureDefinition.snapshot [ # 0..1 Snapshot view of the structure

    fhir:StructureDefinition.snapshot.element [ ElementDefinition ], ... ; # 1..* Definition of elements in the resource (if no StructureDefinition)
  ];
  fhir:StructureDefinition.differential [ # 0..1 Differential view of the structure
    fhir:StructureDefinition.differential.element [ ElementDefinition ], ... ; # 1..* Definition of elements in the resource (if no StructureDefinition)
  ];
]

Changes since DSTU2

StructureDefinition StructureDefinition.purpose Renamed from requirements to purpose Type changed from string to markdown StructureDefinition.copyright Type changed from string to markdown StructureDefinition.keyword Renamed from code to keyword StructureDefinition.mapping.comment Renamed from comments to comment
StructureDefinition Min Cardinality changed from 1 to 0 Max Cardinality changed from 1 to * StructureDefinition.title Renamed from display to title StructureDefinition.status Change value set from http://hl7.org/fhir/ValueSet/conformance-resource-status to http://hl7.org/fhir/ValueSet/publication-status StructureDefinition.experimental Now marked as Modifier
StructureDefinition.contact StructureDefinition.fhirVersion
  • Type changed from BackboneElement to ContactDetail Add Binding http://hl7.org/fhir/ValueSet/fhir-versions (required)
StructureDefinition.description StructureDefinition.context
  • Type changed from string to markdown StructureDefinition.useContext Type changed from CodeableConcept to UsageContext Remove Binding http://hl7.org/fhir/ValueSet/use-context (extensible) BackboneElement
StructureDefinition.jurisdiction StructureDefinition.context.type
  • Added Element
StructureDefinition.contextInvariant StructureDefinition.context.expression
  • Added Element
StructureDefinition.type
  • Renamed from constrainedType to type Min Cardinality Type changed from 0 to 1 Change binding strength from required code to extensible uri
StructureDefinition.baseDefinition
  • Renamed Type changed from base uri to baseDefinition StructureDefinition.derivation Added Element StructureDefinition.contact.name deleted canonical
StructureDefinition.contact.telecom StructureDefinition.contextType
  • deleted

See the Full Difference for further information

This analysis is available as XML or JSON .

See R2 <--> R3 Conversion Maps (status = 248 tests that all execute ok. 60 fail round-trip testing and 145 r3 resources are invalid (441 errors). ). Note: these have note yet been updated to be R3 to R4

 

Alternate definitions: Master Definition ( XML , + JSON ), , XML Schema / Schematron (for ) + JSON Schema , ShEx (for Turtle ) + see the extensions & the dependency analysis

StructureDefinition.contextType
Path Definition Type Reference
StructureDefinition.status The lifecycle status of a Value Set or Concept Map. an artifact. Required PublicationStatus
StructureDefinition.jurisdiction Countries and regions within which this artifact is targeted for use Extensible Jurisdiction ValueSet
StructureDefinition.keyword Codes for the meaning of the defined structure (SNOMED CT and LOINC codes, as an example). Example Structure Definition Codes
StructureDefinition.fhirVersion All published FHIR Versions Required All Published FHIR versions
StructureDefinition.kind Defines the type of structure that a definition is describing. Required StructureDefinitionKind
StructureDefinition.context.type How an extension context is interpreted. Required ExtensionContext ExtensionContextType
StructureDefinition.type Either a resource or a data type, including logical model types Extensible FHIRDefinedType
StructureDefinition.derivation How a type relates to its baseDefinition. Required TypeDerivationRule

  • sdf-1 : Element paths must be unique unless the structure is a constraint ( expression : derivation = 'constraint' or snapshot.element.select(path).isDistinct() )
  • sdf-10 : On StructureDefinition.snapshot.element: provide either a binding reference or a description (or both) ( expression on StructureDefinition.snapshot.element: binding.empty() or binding.valueSet.exists() or binding.description.exists() )
  • sdf-11 : If there's a type, its content must match the path name in the first element of a snapshot ( expression : kind != 'logical' implies snapshot.empty() or snapshot.element.first().path = type )
  • sdf-12 : element.base cannot appear if there is no base on the structure definition ( expression : snapshot.exists() implies (snapshot.element.base.exists() = baseDefinition.exists()) )
  • sdf-14 : All element definitions must have an id ( expression : snapshot.element.all(id.exists()) and differential.element.all(id.exists()) )
  • sdf-15 : On StructureDefinition.snapshot: The first element in a snapshot has no type ( expression on StructureDefinition.snapshot: element.first().type.empty() )
  • sdf-15a : On StructureDefinition.differential: If the first element in a differential has no "." "." in the path, it has no type ( expression on StructureDefinition.differential: element.first().path.contains('.').not() implies element.first().type.empty() )
  • sdf-16 : All element definitions must have unique ids (snapshot) ( expression : snapshot.element.all(id) and snapshot.element.id.trace('ids').isDistinct() )
  • sdf-17 : All element definitions must have unique ids (diff) ( expression : differential.element.all(id) and differential.element.id.trace('ids').isDistinct() )
  • sdf-18 : Context Invariants can only be used for extensions ( expression : contextInvariant.exists() implies type = 'Extension' )
  • sdf-19 : Custom types can only be used in logical models ( expression : kind = 'logical' or (differential.element.type.code.all(hasValue() implies matches('^[a-zA-Z0-9]+$')) and snapshot.element.type.code.all(hasValue() implies matches('^[a-zA-Z0-9]+$'))) )
  • sdf-2 : On StructureDefinition.mapping: Must have at least a name or a uri (or both) ( expression on StructureDefinition.mapping: name.exists() or uri.exists() )
  • sdf-20 : On StructureDefinition.differential: No slicing on the root element ( expression on StructureDefinition.differential: element.where(path.contains('.').not()).slicing.empty() )
  • sdf-21 : Default values can only be specified on logical models ( expression : (snapshot.element.defaultValue.exists() or differential.element.defaultValue.exists()) implies ((kind = 'logical') and (derivation = 'specialization')) )
  • sdf-3 : On StructureDefinition.snapshot: Each element definition in a snapshot must have a formal definition and cardinalities ( expression on StructureDefinition.snapshot: element.all(definition element.all(definition.exists() and min min.exists() and max) max.exists()) )
  • sdf-4 : If the structure is not abstract, then there SHALL be a baseDefinition ( expression : abstract = true or baseDefinition.exists() )
  • sdf-5 : If the structure defines an extension then the structure must have context information ( expression : type != 'Extension' or derivation = 'specialization' or (context.exists() and contextType.exists()) (context.exists()) )
  • sdf-6 : A structure must have either a differential, or a snapshot (or both) ( expression : snapshot.exists() or differential.exists() )
  • sdf-7 : If the structure describes a base Resource or Type, the URL has to start with "http://hl7.org/fhir/StructureDefinition/" "http://hl7.org/fhir/StructureDefinition/" and the tail must match the id ( expression : (derivation = 'constraint') or (kind = 'logical') or (url = 'http://hl7.org/fhir/StructureDefinition/'+id) )
  • sdf-8 : On StructureDefinition.snapshot: In any snapshot, all the elements must be in the specified type type, and must have a base definition ( expression on StructureDefinition.snapshot: (%resource.kind = 'logical' or element.first().path = %resource.type) %resource.type and element.tail().all(path.startsWith(%resource.snapshot.element.first().path&'.')) element.tail().all(path.startsWith(%resource.type&'.')) and element.all(base.exists()) )
  • sdf-8a : On StructureDefinition.differential: In any differential, all the elements must be in the specified type ( expression on StructureDefinition.differential: element.first().path.startsWith(%resource.type) and element.tail().all(path.startsWith(%resource.type&'.')) )
  • sdf-9 : In any snapshot or differential, no label, code or requirements on the an element without a "." "." in the path (e.g. the first element) ( expression : 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() )
  • 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 specialization profile
    • 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]". "[x]". 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 fluentpath FHIRPath is operator .
  • For XPath constraints, the prefix "f" "f" should be used for "http://hl7.org/fhir", "http://hl7.org/fhir", and "h" "h" for "http://www.w3.org/1999/xhtml". "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 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 , constrainedType , base , and url , using this basic pattern:

{
  "url": the identity of this structure definition,
  "kind": (datatype | resource),
  "type": the type being constrained (if it's a constraint)
  "baseDefinition": the structure definition from which this is derived

  "url": the identity of this structure definition,
  "kind": (primitive-type | complex-type | resource | logical),
  "type": the type being constrained (if it's a constraint)
  "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": "datatype",
      "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Element"
    
      "resourceType": "StructureDefinition",
      "url": "http://hl7.org/fhir/StructureDefinition/Quantity",
      "name": "Quantity",
      "kind": "complex-type",
      "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": "datatype",
      "type": "Quantity",
      "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Quantity"
    
      "resourceType": "StructureDefinition",
      "url": "http://hl7.org/fhir/StructureDefinition/Money",
      "name": "Money",
      "kind": "complex-type",
      "type": "Quantity",
      "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",
      "baseDefinition": "http://hl7.org/fhir/StructureDefinition/DomainResource"
    
      "resourceType": "StructureDefinition",
      "url": "http://hl7.org/fhir/StructureDefinition/Patient",
      "name": "Patient",
      "kind": "resource",
      "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",
      "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Composition"
    
      "resourceType": "StructureDefinition",
      "url": "http://hl7.org/fhir/StructureDefinition/clinicaldocument",
      "name": "Clinical Document Profile for Composition",
      "kind": "resource",
      "type": "Composition",
      "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": "datatype",
      "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Element"
    
      "resourceType": "StructureDefinition",
      "url": "http://hl7.org/fhir/StructureDefinition/Extension",
      "name": "Extension",
      "kind": "datatype",
      "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",
      "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Extension"
    
      "resourceType": "StructureDefinition",
      "url": "http://hl7.org/fhir/StructureDefinition/data-absent-reason",
      "name": "Data Absent Reason",
      "kind": "complex-type",
      "type": "Extension",
      "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": "datatype",
      "type": "Extension",
      "baseDefinition": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race"
    
      "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",
      "baseDefinition": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race"
    
    }
    

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

When the structure is a constraint (constrainedType is not null), see Extending and Restricting Resources for the rules that apply.

Structures are able to map elements to concepts in other definition systems. Generally 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
http://hl7.org/fhir/logical Logical Mapping Formal URL: http://hl7.org/fhir/logical
http://clinicaltrials.gov ClinicalTrials.gov Mapping Formal URL: http://clinicaltrials.gov
Workflow Pattern http://www.cdisc.org/define-xml Formal URL: http://hl7.org/fhir/workflow
CDISC Define XML 2.0 metadata standard http://hl7.org/fhir/workflow Formal URL: http://www.cdisc.org/define-xml
Workflow Mapping to NCPDP SCRIPT 10.6 Formal URL: http://ncpdp.org/SCRIPT10_6
FiveWs Pattern http://wiki.siframework.org/IHE+SDC+Profile Formal URL: http://hl7.org/fhir/fivews
IHE Structured Data Capture http://www.fda.gov/MedicalDevices/DeviceRegulationandGuidance/UniqueDeviceIdentification/default.htm UDI Mapping Formal URL: http://siframework.org/ihe-sdc-profile
http://ncpdp.org/SCRIPT10_6 Mapping to NCPDP SCRIPT 10.6 http://www.cda-adc.ca/en/services/cdanet/ Canadian Dental Association eclaims standard http://snomed.info/conceptdomain 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
http://wiki.ihe.net/index.php?title=Data_Element_Exchange R3-ReferalRequest Mapping IHE Data Element Exchange (DEX) Formal URL: http://hl7.org/fhir/rr
http://hl7.org/v2 HL7 v2 Mapping Formal URL: http://hl7.org/v2
http://hl7.org/v3 RIM Mapping Formal URL: http://hl7.org/v3
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.

http://snomed.info/sct SNOMED CT Attribute Binding Formal URL: http://snomed.info/sct

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
Quality Improvement Domain Analysis Model http://nema.org/dicom Formal URL: http://hl7.org/qidam
DICOM Tag Mapping http://github.com/MDMI/ReferentIndexContent Formal URL: http://nema.org/dicom
MDMI Referent Index Formal URL: http://github.com/MDMI/ReferentIndexContent
V3 Pharmacy Dispense RMIM http://ihe.net/xds Formal URL: http://www.hl7.org/v3/PORX_RM020070UV
XDS metadata equivalent http://cap.org/ecc Formal URL: http://ihe.net/xds
CAP Code http://hl7.org/v3/cda Formal URL: http://cap.org/ecc
CDA (R2) Formal URL: http://hl7.org/v3/cda
http://www.hl7.org/implement/standards/product_brief.cfm?product_id=378 Quality Improvement Domain Analysis Model and Clinical Knowledge (QUICK) http://www.pharmacists.ca/ Formal URL: http://siframework.org/cqf
Canadian Pharmacy Associaiton eclaims standard Formal URL: http://www.pharmacists.ca/
http://www.healthit.gov/quality-data-model 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
FHIR AuditEvent Formal URL: http://hl7.org/fhir/auditevent
IHE Data Element Exchange (DEX) FHIR AuditEvent Formal URL: http://ihe.net/data-element-exchange
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.

http://hl7.org/orim Ontological RIM Mapping Formal URL: http://hl7.org/orim
http://loinc.org LOINC code for the element http://w3.org/vcard Formal URL: http://loinc.org
vCard Mapping http://openehr.org Formal URL: http://w3.org/vcard
Open EHR Archetype Mapping http://www.omg.org/spec/ServD/1.0/ ServD Formal URL: http://openehr.org
http://wiki.siframework.org/CQF ServD Quality Improvement and Clinical Knowledge (QUICK) Formal URL: http://www.omg.org/spec/ServD/1.0/
http://hl7.org/fhir/provenance FHIR Provenance Formal URL: http://hl7.org/fhir/provenance
http://www.ietf.org/rfc/rfc2445.txt 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.

context-type token
Name Type Description Expression In Common
abstract token Whether the structure is abstract StructureDefinition.abstract
base uri reference Definition that this type is constrained/specialized from StructureDefinition.baseDefinition
( StructureDefinition )
base-path token Path that identifies the base element StructureDefinition.snapshot.element.base.path | StructureDefinition.differential.element.base.path resource | datatype | extension StructureDefinition.contextType
date date The structure definition publication date StructureDefinition.date
derivation token specialization | constraint - How relates to base definition StructureDefinition.derivation
description string The description of the structure definition StructureDefinition.description
experimental token For testing purposes, not real usage StructureDefinition.experimental
ext-context string token Where The system is the extension can be used in instances URL for the context-type: e.g. http://hl7.org/fhir/extension-context-type#element|CodeableConcept.text StructureDefinition.context
identifier token External identifier for the structure definition StructureDefinition.identifier
jurisdiction token Intended jurisdiction for the structure definition StructureDefinition.jurisdiction
keyword token A code for the profile StructureDefinition.keyword
kind token primitive-type | complex-type | resource | logical StructureDefinition.kind
name string Computationally friendly name of the structure definition 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 structure definition StructureDefinition.publisher
status token The current status of the structure definition StructureDefinition.status
title string The human-friendly name of the structure definition StructureDefinition.title
type token uri Type defined or constrained by this structure StructureDefinition.type
url uri The uri that identifies the structure definition StructureDefinition.url
valueset reference A vocabulary binding reference StructureDefinition.snapshot.element.binding.valueSet
( ValueSet )
version token The business version of the structure definition StructureDefinition.version