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 specification defines a series of different types of resource that can be used to exchange and/or store data in order to solve a wide range of healthcare related problems, both clinical and administrative. In addition, this specification defines several different ways of exchanging the resources.
A resource is an entity that:
Resources have multiple representations. A resource is valid if it meets the above rules, and is represented in either XML or JSON according to the rules defined in this specification. Other representations are allowed, but are not described by this specification.
All resources have the following optional or mandatory elements and properties:
Most resources are derived from Domain Resources - they also contain text, contained resources, extensions, and data elements specific to the particular domain of the resource. There is a special type of resource called Bundle for collections of resources.
Note: there is documentation for the Structure, UML, XML, and JSON representations.
Structure
UML Diagram
XML Template
<[name] xmlns="http://hl7.org/fhir"> <!-- from Element: extension --> <id value="[id]"/><!-- 0..1 Logical id of this artefact --> <meta><!-- 0..1 Meta Metadata about the resource --></meta> <implicitRules value="[uri]"/><!-- 0..1 A set of rules under which this content was created --> <language value="[code]"/><!-- 0..1 Language of the resource content --> </[name]>
JSON Template
{ "resourceType" : "[name]", "id" : "<id>", // Logical id of this artefact "meta" : { Meta }, // Metadata about the resource "implicitRules" : "<uri>", // A set of rules under which this content was created "language" : "<code>" // Language of the resource content }
XML Template
<[name] xmlns="http://hl7.org/fhir"> <!-- from Element: extension --> <id value="[id]"/><!-- 0..1 Logical id of this artefact --> <meta><!-- 0..1 Meta Metadata about the resource --></meta> <implicitRules value="[uri]"/><!-- 0..1 A set of rules under which this content was created --> <language value="[code]"/><!-- 0..1 Language of the resource content --> </[name]>
JSON Template
{ "resourceType" : "[name]", "id" : "<id>", // Logical id of this artefact "meta" : { Meta }, // Metadata about the resource "implicitRules" : "<uri>", // A set of rules under which this content was created "language" : "<code>" // Language of the resource content }
Path | Definition | Type | Reference |
---|---|---|---|
Resource.language | A human language | Fixed | IETF language tag |
Each resource has an "id" element which contains the logical identity of the resource assigned by the server responsible for storing it. Resources always have a known identity except for the special case when a new resources is being sent to a server to assign an identity (create interaction). The logical identity is unique within the space of all resources of the same type on the same server. Once assigned, the identity is never changed, though copies of the same resource made elsewhere may not retain the same identity.
The full identity of a resource is an absolute URL constructed from the server base address at which it is found, the resource type, and the Logical Id, such as http://test.fhir.org/rest/Patient/123 (where 123 is the Logical Id). Note that implementations SHOULD NOT assume that the identity of a resource is always resolvable to a literal server - it may be temporarily unavailable, or not available by policy (e.g. firewalls) or in some cases, it may not actually exist (e.g. use of resource outside a RESTful environment). Resources reference each other by their identity. These references are allowed to be absolute or relative (see Resource References for further discussion). Copying or moving resources from one server to another means that resources acquire a new identity. For further details, see Managing Resource Identity.
Logical ids are case sensitive. Ids are always opaque, and external systems need not and should not attempt to determine their internal structure. An id SHALL always be represented in the same way in resource references and URLs. Ids can be up to 36 characters long, and contain any combination of upper and lowercase ASCII letters, numerals, "-" and ".".
Each resource contains an element "meta", of type "Meta", which is a set of metadata that provides technical and workflow context to the resource. The metadata items are all optional, though some of all of them may be required in particular implementations or contexts of use.
Metadata Item | Type | Usage |
---|---|---|
versionId (0..1) | id | Changes each time the content of the resource changes. Can be referenced in a resource reference.
Can be used to ensure that updates are based on the latest version of the resource.
The version can be globally unique, or scoped by the Logical Id of the resource. Version identifiers are generally either a serially incrementing id scoped by the logical id, or a uuid, though neither of these approaches is required. Note that servers SHOULD support versions, but some are unable to |
lastUpdated (0..1) | instant | If populated, this value changes each time the content of the resource changes. it can be used by a system or a human to judge the currency of the resource content. Note that version aware updates do not use this element |
profile (0..*) | uri | An assertion that the content conforms to a profile. See Extending and Restricting Resources for further discussion. Can be changed as profiles and value sets change or the system rechecks conformance |
security (0..*) | Coding | Security labels applied to this resource. These tags connect resources in specific ways to the overall security policy and infrastructure. Security tags can be updated when the resource changes, or whenever the security sub-system chooses to |
tag (0..*) | Coding | Tags applied to this resource. Tags are used to relate resources to process and workflow. Applications are not required to consider the tags when interpreting the meaning of a resource. |
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Meta | 1..1 | Element | Metadata about a resource | |
versionId | 0..1 | id | Version specific identifier | |
lastUpdated | 0..1 | instant | When the resource version last changed | |
deleted | 0..1 | boolean | True if the resource is deleted | |
profile | 0..* | uri | Profiles this resource claims to conform to | |
security | 0..* | Coding | Security Labels applied to this resource | |
tag | 0..* | Coding | Tags applied |
UML Diagram
to do
XML Template
<meta xmlns="http://hl7.org/fhir"> <!-- from Element: extension --> <versionId value="[id]"/><!-- 0..1 Version specific identifier --> <lastUpdated value="[instant]"/><!-- 0..1 When the resource version last changed --> <deleted value="[boolean]"/><!-- 0..1 True if the resource is deleted --> <profile value="[uri]"/><!-- 0..* Profiles this resource claims to conform to --> <security><!-- 0..* Coding Security Labels applied to this resource --></security> <tag><!-- 0..* Coding Tags applied --></tag> </meta>
JSON Template
{ // from Element: extension "versionId" : "<id>", // Version specific identifier "lastUpdated" : "<instant>", // When the resource version last changed "deleted" : <boolean>, // True if the resource is deleted "profile" : ["<uri>"], // Profiles this resource claims to conform to "security" : [{ Coding }], // Security Labels applied to this resource "tag" : [{ Coding }] // Tags applied }
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Meta | 1..1 | Element | Metadata about a resource | |
versionId | 0..1 | id | Version specific identifier | |
lastUpdated | 0..1 | instant | When the resource version last changed | |
deleted | 0..1 | boolean | True if the resource is deleted | |
profile | 0..* | uri | Profiles this resource claims to conform to | |
security | 0..* | Coding | Security Labels applied to this resource | |
tag | 0..* | Coding | Tags applied |
XML Template
<meta xmlns="http://hl7.org/fhir"> <!-- from Element: extension --> <versionId value="[id]"/><!-- 0..1 Version specific identifier --> <lastUpdated value="[instant]"/><!-- 0..1 When the resource version last changed --> <deleted value="[boolean]"/><!-- 0..1 True if the resource is deleted --> <profile value="[uri]"/><!-- 0..* Profiles this resource claims to conform to --> <security><!-- 0..* Coding Security Labels applied to this resource --></security> <tag><!-- 0..* Coding Tags applied --></tag> </meta>
JSON Template
{ // from Element: extension "versionId" : "<id>", // Version specific identifier "lastUpdated" : "<instant>", // When the resource version last changed "deleted" : <boolean>, // True if the resource is deleted "profile" : ["<uri>"], // Profiles this resource claims to conform to "security" : [{ Coding }], // Security Labels applied to this resource "tag" : [{ Coding }] // Tags applied }
Meta is used in the following places: Resource
A reference to a custom agreement about how the resources are used that was followed when the resource was constructed, and which must be understood when processing the content.
Asserting this rule set restricts the content to be only understood by a limited set of trading partners. This inherently limits the usefulness of the data in the long term, and should be avoided where possible. However the existing health eco-system is highly fractured, and not yet ready to define, collect, and exchange data in a generally exchangeable sense.
Note that resources are almost always constructed following some custom agreement. Best practice is that such agreements make all knowledge about the content of the resource explicit; if custom agreements do this, and declare their extensions as required, then it is not necessary to understand the agreement when processing the resource content.
Each resource may have a language element that specifies the base language of the content using a code defined in BCP 47. The language element is provided to support indexing and accessibility (e.g. text-to-speech use the language tag).
There is no default language, though one may be inferred from the context of use. Not all of the content of the resource has to be in the specified language.
If a language is specified, it should also be specified on the Narrative Text. The html language tag in the narrative is used when processing the narrative. The language tag on the resource is provided for use to specify the language of alternate presentations generated from the data in the resource
These 3 metadata attributes are part of the resource, but are never used to keep information that needs to be understood when interpreting the content of a resource; their function is limited to finding and controlling access to the resource, and connecting resources to technical or clinical workflow.
Tags are used to associate additional operational information with the Resources, including such as workflow management. A typical use of tagging would be to maintain an informal list of resources that need review.
In a general tag, the concept may be a reference to a healthcare vocabulary, including ones defined in this specification, or vocabularies such as those defined by HL7 for other purposes (e.g. v2 and v3/CDA), LOINC, or SNOMED CT. Alternatively, the concept may be one defined by the implementation in the local context.
A profile assertion represents a claim that the resource conforms to the identified profile, which makes sets of rules about what content is allowed to be in a resource. In a profile tag, the term is a URL that references a profile resource.
It's always possible to determine whether a resource conforms to a profile simply by testing it against the profile (the validation tools provide the functionality to perform this test in a variety of contexts). However there are several circumstances where simply examining whether a resource conforms to a particular profile as needed is impractical:
Profile Tags serve these use cases - a client/creator of a resource can tag the resource with an assertion that the resource conforms to a profile. The server/receiver of the resource can choose to take this assertion at face value, or to assist in locating the profile against which to validate the resource.
Note: resources can conform to multiple profiles at once. A resource can conform to a profile without ever being labelled that it does, or a resource may falsely claim to conform to a profile. For this reason, applications processing resources SHOULD always depend on the contents of the resource when processing them, and/or check resources against profiles directly rather than relying the existence of profile tags. Many trading partner agreements will make rules about what claims can be made and when they must be tested, which will make the profile assertion more reliable.
Profile Tags are provided as a method of finding resources that conform to a particular profile, not statements of meaning about the resource.
A security label is attached to a resource to provide specific security metadata about the information in the resource. For further information, see Security Labels.
Common search parameters defined by this resource. See Searching for more information about searching in REST, messaging, and services.
Name | Type | Description | Paths |
_id | token | Logical id of this artefact | Resource.id |
_language | token | Language of the resource content | Resource.language |
_lastUpdated | date | When the resource version last changed | Resource.meta.lastUpdated |
_profile | token | Profiles this resource claims to conform to | Resource.meta.profile |
_security | token | Security Labels applied to this resource | Resource.meta.security |
_tag | token | Tags applied | Resource.meta.tag |