This page is part of the FHIR Specification (v0.06: DSTU 1 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: R3 R2

Resource Profile - Content 1.6

Status: Approved infrastructure resource. Draft for comment

A Resource Profile - a statement of use of FHIR. It may include constraints on Resources, Data Types, Terminology Binding Statements and Extension Definitions.

The resource name as it appears in a RESTful URL is /profile/

Background 1.6.1

This specification describes a set of base resources that are used in many different contexts in healthcare. In order to make this manageable, applications and specifications need to be able to:

All these things are done by a Resource Profile, which is itself a resource that describes the usage of one or more other resources. Profiles have a metadata section that describes who published the profile, and why, as well as optional lists of resources constraints, extension definitions, and vocabulary bindings.

Slicing 1.6.2

One common operation in a resource profile is to take an element that may occur more than once, and describe a series of different constraints on the elements in the list. In this way, the list is split into a series of individual elements or sub-lists. In FHIR, this operation is known as "Slicing" a collection. Here is an example to illustrate the process:

In this example, the resource definition defines the "relationship" element which may occur multiple times. The profile for Acme, Inc. constrains the relationship element into 3 different named kinds: 1 or 2 parents, up to 6 children, and maybe a guardian. No other relationships are supported by the Acme system.

Note that in FHIR, only the resource is ever actually exchanged. The profile describes a way of using the resource, but the item profile names ("parent", etc. in this list) are never exchanged. The slicing description is more useful if it is "unambiguous": if systems are able to determine which relationships in the relationship list that is actually exchanged are parent, child, or guardian; in this particular case, the determination is allowed by fixing the value of the relationship type element. Fixing a code value is the most common way to slice a list.

Resource Content 1.6.3

UML Image

<Profile xmlns="http://hl7.org/fhir">
 <name><!-- 1..1 string Informal name for this profile --></name>
 <version><!-- 0..1 string Used by external version specific references --></version>
 <author>  <!-- 1..1 (Organization or individual) -->
  <name><!-- 1..1 string Name of the recognized author --></name>
  <reference><!-- 0..* uri Web reference to the author --></reference>
 </author>
 <description><!-- 1..1 string Natural language description of the profile --></description>
 <code><!-- 0..* Coding Assist with indexing and finding --></code>
 <status>  <!-- 1..1 Current status -->
  <code><!-- 1..1 code draft | testing | review | production | withdrawn | superseded --></code>
  <date><!-- 1..1 dateTime date for given status --></date>
  <comment><!-- 0..1 string Supplemental status info --></comment>
 </status>
 <import>  <!-- 0..* External source of extensions and bindings -->
  <uri><!-- 1..1 uri Profile location --></uri>
  <prefix><!-- 0..1 string Short form for referencing --></prefix>
 </import>
 <bundle><!-- 0..1 code If this describes a bundle, the first resource in the bundle --></bundle>
 <resource>  <!-- 0..* A constraint on a resource or a data type -->
  <type><!-- 1..1 code The Resource or Data Type being described --></type>
  <profile><!-- 0..1 uri Resource Profile reference (supplies the constraints) --></profile>
  <name><!-- 0..1 string Name for this particular resource profile (internal usage) --></name>
  <purpose><!-- 0..1 string Human summary: why describe this resource? --></purpose>
  <element>  <!-- 0..* Definition of elements in the resource (if no profile) -->
   <path><!-- 1..1 string The path of the element (see the formal definitions) --></path>
   <name><!-- 0..1 string Name of constraint for slicing - see above --></name>
   <definition>  <!-- 1..1 More specific definition of the element  -->
    <short><!-- 1..1 string Concise definition for xml presentation --></short>
    <formal><!-- 1..1 string Formal definition --></formal>
    <comments><!-- 0..1 string Comments about the use of this element --></comments>
    <requirements><!-- 0..1 string Why is this needed? --></requirements>
    <synonym><!-- 0..* string Other names --></synonym>
    <min><!-- 1..1 integer Minimum Cardinality --></min>
    <max><!-- 1..1 string Maximum Cardinality (a number or *) --></max>
    <type>  <!-- 0..* Type of the element -->
     <code><!-- 1..1 code Data type or Resource --></code>
     <profile><!-- 0..1 uri Profile to apply --></profile>
    </type>
    <nameReference><!-- 0..1 string To another element constraint (by element.name) --></nameReference>
    <value[x]><!-- 0..1 Fixed value: [as defined for type] --></value[x]>
    <maxLength><!-- 0..1 integer Length for strings --></maxLength>
    <condition><!-- 0..* id Reference to invariant about presence --></condition>
    <constraint>  <!-- 0..* Condition that must evaluate to true -->
     <id><!-- 1..1 id Target of 'condition' reference above --></id>
     <name><!-- 0..1 string Short human label --></name>
     <severity><!-- 1..1 code error | warning --></severity>
     <human><!-- 1..1 string Human description of constraint --></human>
     <xpath><!-- 1..1 string XPath expression of constraint --></xpath>
     <ocl><!-- 0..1 string OCL expression of constraint --></ocl>
    </constraint>
    <mustSupport><!-- 0..1 boolean If the element must be usable --></mustSupport>
    <mustUnderstand><!-- 0..1 boolean If the element must be understood --></mustUnderstand>
    <binding><!-- 0..1 string Binding - see bindings below (only if coded) --></binding>
    <mapping>  <!-- 0..* Map element to another set of definitions -->
     <target><!-- 1..1 string Which mapping this is (v2, CDA, openEHR, etc.) --></target>
     <map><!-- 0..1 string Details of the mapping --></map>
    </mapping>
   </definition>
   <bundled><!-- 0..1 boolean If type is Resource, is it in the bundle? --></bundled>
   <closed><!-- 0..1 boolean If list, whether derived profiles can slice more --></closed>
  </element>
  <searchParam>  <!-- 0..* Additional search params defined -->
   <name><!-- 1..1 string Name of search parameter --></name>
   <type><!-- 1..1 code Type of search parameter --></type>
   <repeats><!-- 1..1 code If multiples are allowed, and what it means --></repeats>
   <documentation><!-- 1..1 string Contents and meaning of search parameter --></documentation>
  </searchParam>
 </resource>
 <extensionDefn>  <!-- 0..* Definition of an extension -->
  <id><!-- 1..1 id Identifies the extension in this profile --></id>
  <contextType><!-- 1..1 code resource | datatype | mapping | extension --></contextType>
  <context><!-- 1..* string Where the extension can be used in instances --></context>
  <definition><!-- 1..1 Content as for Profile.resource.element.definition Definition of the extension and its content --></definition>
 </extensionDefn>
 <binding>  <!-- 0..* Define code sets for coded elements -->
  <name><!-- 1..1 string Binding name --></name>
  <definition><!-- 0..1 string Human explanation of the binding --></definition>
  <type><!-- 1..1 code valueset | codelist | reference | special --></type>
  <isExtensible><!-- 1..1 boolean Can additional codes be used? --></isExtensible>
  <conformance><!-- 1..1 code required | preferred | example --></conformance>
  <reference><!-- 0..1 uri Source of binding content --></reference>
  <concept>  <!-- 0..* Enumerated codes that are the binding -->
   <code><!-- 1..1 string Code to use for this concept --></code>
   <system><!-- 0..1 uri Source for the code, if taken from another system --></system>
   <display><!-- 0..1 string Print name - defaults to code --></display>
   <definition><!-- 1..1 string Meaning of the concept --></definition>
  </concept>
 </binding>
 <extension><!-- 0..* Extension  See Extensions  --></extension>
 <text><!-- 1..1 Narrative Text summary of resource (for human interpretation) --></text>
</Profile>

Alternate definitions: Schema/Schematron, RDF (to do), XML, XMI (to do), Resource Profile

Terminology Bindings

PathDetailsStrength
Profile.status.code The lifecycle status of a Resource Profile (see http://hl7.org/fhir/resource-profile-status for values)complete/required
Profile.bundle Any defined Resource Type namecomplete/required
Profile.resource.type Any defined Resource or Data Type namecomplete/required
Profile.resource.element.definition.type.code any defined data Type name or a Resource namecomplete/required
Profile.resource.element.definition.constraint.severity Must applications comply with this constraint? (see http://hl7.org/fhir/constraint-severity for values)complete/required
Profile.resource.searchParam.type Data types allowed to be used for search parameters (see http://hl7.org/fhir/search-param-type for values)complete/required
Profile.resource.searchParam.repeats How repeating parameters are handled for the parameter type (see http://hl7.org/fhir/search-repeat-behavior for values)complete/required
Profile.extensionDefn.contextType How an extension context is interpreted (see http://hl7.org/fhir/extension-context for values)complete/required
Profile.binding.type How this binding is mapped to a set of codes (see http://hl7.org/fhir/binding-type for values)complete/required
Profile.binding.conformance Must applications comply with this binding? (see http://hl7.org/fhir/binding-conformance for values)complete/required

Constraints

Metadata Notes: 1.6.4

Interpretation Notes: 1.6.5

TODO: Is any control over narrative required?

Profiled FHIR 1.6.6

If a profile is unambiguous, then the FHIR profile tooling (ref to be provided) is able to generate reference implementation based object models that express the profiled model natively, where the object interface does not include prohibited elements, treats declared extensions as primary properties and slices lists according to the profile. This eases the burden on an implementer, though this object model can only be used with a sub-set of the possible resources.

The tooling is also able to generate bi-directional transforms between the normal XML format and an XML representation of this profiled object model and schema for this profiled XML representation. This XML form has extensions promoted into the primary XML form by using the extension code as the XML name and sliced lists are renamed to use the Profile.resource.element.name as the XML element name. Profiles are only suitable for this use if they ensure that there are no clashing extension names when the extension definition spaces are ignored and that the sliced list names are appropriate.

Implementations are allowed to exchange this profiled XML format. Implementations that do so are not fully conformant to FHIR; instead they can claim to be conformant to "Profiled FHIR". Implementations should consider carefully before adopting this approach; while it will reduce the amount of work required to initially implement particular profiles, it will increase the amount of work required to exchange this data with other communities or to re-use tooling and applications that are also used in other contexts. This cost should particularly be considered in light of the fact that the previously discussed tooling allows applications to be written as though they are dealing with "Profiled FHIR" instances when they are in fact sending and receiving fully conformant FHIR instances.

Search Parameters 1.6.7

Search Parameters for RESTful searches. The standard parameters also apply. See Searching for more information.

$page : integerStarting offset of the first record to return in the search setsingle
$count : integerNumber of return records requested. The server is not bound to conformsingle
$id : tokenThe logical resource id associated with the resource (must be supported by all servers)single
name : stringA portion of the name of the profileunion
word : textA word somewhere in the definition of the profile or the elements in the resource. (Common words - 'and', etc. - are often not supported)union
author : stringName or id of the author of the profileunion
code : qtokenA code for the profile in the format uri::code (server may choose to do subsumption)union
extension : tokenAn extension code (use or definition)union
binding : tokenA vocabulary binding codeunion
status : tokenThe current status of the profileunion
type : tokenType of resource that is constrained in the profileunion
resource : tokenA resource constrained in a profileunion
reference : tokenAn id of another profile referenced in the profileunion
date : datedate equal to The profile publication datesingle
date-before : datedate before or equal to The profile publication datesingle
date-after : datedate after or equal to The profile publication datesingle

(See Searching).


This is an old version of FHIR retained for archive purposes. Do not use for anything else
Implementers are welcome to experiment with the content defined here, but should note that the contents are subject to change without prior notice.
© HL7.org 2011 - 2012. FHIR v0.06 generated on Tue, Dec 4, 2012 00:04+1100. License