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
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/
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.
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.
<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
Path | Details | Strength |
---|---|---|
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 name | complete/required |
Profile.resource.type | Any defined Resource or Data Type name | complete/required |
Profile.resource.element.definition.type.code | any defined data Type name or a Resource name | complete/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
TODO: Is any control over narrative required?
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 for RESTful searches. The standard parameters also apply. See Searching for more information.
$page : integer | Starting offset of the first record to return in the search set | single |
$count : integer | Number of return records requested. The server is not bound to conform | single |
$id : token | The logical resource id associated with the resource (must be supported by all servers) | single |
name : string | A portion of the name of the profile | union |
word : text | A word somewhere in the definition of the profile or the elements in the resource. (Common words - 'and', etc. - are often not supported) | union |
author : string | Name or id of the author of the profile | union |
code : qtoken | A code for the profile in the format uri::code (server may choose to do subsumption) | union |
extension : token | An extension code (use or definition) | union |
binding : token | A vocabulary binding code | union |
status : token | The current status of the profile | union |
type : token | Type of resource that is constrained in the profile | union |
resource : token | A resource constrained in a profile | union |
reference : token | An id of another profile referenced in the profile | union |
date : date | date equal to The profile publication date | single |
date-before : date | date before or equal to The profile publication date | single |
date-after : date | date after or equal to The profile publication date | single |
(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