This page is part of the FHIR Specification (v0.05: DSTU 1 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: R3 R2
Status: An infrastructure resource. This is an approved resource, and its status is draft for comment
A Resource Profile - a statement of use of FHIR. May include constraints on Resources, 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"> <id><!-- 1..1 id Fixed identifier for this profile --></id> <name><!-- 1..1 string Informal name for this profile --></name> <version><!-- 0..1 string Version number for external references --></version> <author> <!-- (Organisation or individual) --> <name><!-- 1..1 string Name of the recognised 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> <!-- Current status --> <code><!-- 1..1 code draft | testing | review | production | withdrawn | superceded --></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 profile --> <type><!-- 1..1 code The Type of the resource being described --></type> <profile><!-- 0..1 uri Resource Profile that supplies the constraints --></profile> <name><!-- 0..1 string Name for this Constraint Statement --></name> <purpose><!-- 0..1 string Human summary: why describe this resource? --></purpose> <element> <!-- 0..* Definition of elements in the resource --> <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> <!-- 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 (Resource only) --></profile> </type> <nameReference><!-- 0..1 string To another element constraint (by element.name) --></nameReference> <value[x] d?><!-- 0..1 Fixed value: [as defined for type] --></value[x]> <maxLength><!-- 0..1 integer Length for strings --></maxLength> <dataAbsentReason><!-- 1..1 boolean If @dataAbsentReason is allowed --></dataAbsentReason> <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> </resource> <extensionDefn> <!-- 0..* Definition of an extension --> <code><!-- 1..1 code identifies the extension in the instance --></code> <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 code 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 if not provided --></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 profile for human interpretation --></text> </Profile>
Alternate definitions: Schema/Schematron, RDF (to do), XML, Resource Profile
Terminology Bindings
draft | This profile is still under development | |
testing | this profile was authored for testing purposes (or education/evaluation/evangelisation) | |
review | This profile is undergoing review to check that it is ready for production use | |
production | This profile is ready for use in production systems | |
withdrawn | This profile has been withdrawn | |
superseded | This profile was superseded by a more recent version |
resource | The context is all elements matching a particular resource element path | |
datatype | The context is all nodes matching a particular data type element path (root or repeating element) or all elements referencing a particular primitive data type (expressed as the datatype name) | |
mapping | The context is all nodes whose mapping to a specified reference model corresponds to a particular mapping structure. The context identifies the mapping target. The mapping should clearly identify where such an extension could be used, though this | |
extension | The context is a particular extension from a particular profile. Expressed as uri#name, where uri identifies the profile and #name identifies the extension code |
valueset | The binding name has an associated URL which is a reference to a Value Set Resource that provides a formal definition of the set of possible codes | |
codelist | The binding name is associated with a simple list of codes, and definitions from some identified code system (SID, URI, OID, UUID). In resource definitions, the system reference may be omitted, and a list of custom codes with definitions supplied (this is for status and workflow fields that applications need to know) | |
reference | The binding name has an associated URL which refers to some external standard or specification that defines the possible codes | |
special | The binding points to a list of concepts defined as part of FHIR itself (see below for possible values) |
required | Only codes in the specified set are allowed. If the binding is extensible, other codes may be used for concepts not covered by the bound set of codes. | |
preferred | For greater interoperability, implementers are strongly encouraged to use the bound set of codes, however alternate codes may be used in profiles if necessary without being considered non-conformant. | |
example | The codes in the set are an example to illustrate the meaning of the field. There is no particular preference for its use |
Constraints
Metadata Notes:
Interpretation Notes:
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.
n : integer | Starting offset of the first record to return in the search set |
count : integer | Number of return records requested. The server is not bound to conform |
id : token | The id of the resource |
name : string | a portion of the name of the resource |
word : text | a word somewhere in the definition of the resource or the elements in the resource. (Common words - 'and', etc. - are often not supported) |
author : string | name or id of the author |
code : qtoken | a code in the format uri::code (server may choose to do subsumption) |
extension : token | an extension code (use or definition) |
binding : token | a vocabulary binding code |
status : token | a status of the profile |
type : token | type of resource that is constrained in the profile |
resource : token | a resource constrained in a profile |
reference : token | an id of another profile referenced in the profile |
date : date | date equal to the profile publication date |
date-before : date | date before or equal to the profile publication date |
date-after : date | date after or equal to the profile publication date |
(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.05 generated on Sun, Sep 9, 2012 03:28+1000. License