This wiki has undergone a migration to Confluence found Here
<meta name="googlebot" content="noindex">

Difference between revisions of "FHIR Extensibility Page"

From HL7Wiki
Jump to navigation Jump to search
Line 8: Line 8:
 
In instances, extension elements can be found under the Resource.extensions element and refer to an element in within the same resource. The referenced element can be explicitly identified by the id/idref construction (though that is going to change), but is otherwise determined by the 'path' attribute of an extension definition (see below for details). Logically, this extension becomes a child element of that referenced element.  
 
In instances, extension elements can be found under the Resource.extensions element and refer to an element in within the same resource. The referenced element can be explicitly identified by the id/idref construction (though that is going to change), but is otherwise determined by the 'path' attribute of an extension definition (see below for details). Logically, this extension becomes a child element of that referenced element.  
  
* A particular element in a single resource - When defining the extension, the "code" indicates the resource type to which this extension applies, the path is the path to an element within that resource that is extended. id/idref is only necessary when this element has a cardinality > 1, to indicate a specific occurrence of the element to extend.
+
* '''A particular element in a single resource''' - When defining the extension, the "code" indicates the resource type to which this extension applies, the "path" is the path to an element within that resource that is extended. id/idref is only necessary when this element has a cardinality > 1, to indicate a specific occurrence of the element to extend.
* Anywhere a particular data type is used -  When defining the extension, the "code" indicates the composite type to which this extension applies (how?), the path is the path to an element within that composite type that is extended. Unless a specific element is referenced using id/idref, all elements within the resource that are of the type that this extension applies to will be extended.
+
* '''Anywhere a particular data type is used''' -  When defining the extension, the "code" indicates the composite type to which this extension applies (how?), the "path" is the path to an element within that composite type that is extended. Unless a specific element is referenced using id/idref, all elements within the resource that are of the type that this extension applies to will be extended.
*A set of elements across one or more resources
+
* '''A set of elements across one or more resources''' - I cannot think of a way to do this unambiguously using code and path.
*A particular context in one of the mapped reference models
+
* '''A particular context in one of the mapped reference models''' - This requires a computable mapping specification and deduction of the context from that mapping. "code and "path" would be used to indicate the context within the mapped model (a RIM class + attribute path?) and any element that has a mapping that specifies values for that indicated context would then be extended. The value of the extension is derived from the value of the attribute indicated in the context? Since these extensions are implicitly "created" by the mapping, extensions of this type are not found within Resource.extensions.
*Another extension
+
* '''Another extension''' - When defining the extension, the "code" indicates the extension to extend. "path" is not used. Logically, this extension becomes a child element of the extended extension. Since the extended extension is itself a child of some element in a resource, this extension is a "grand child" of the resource element the extended extension refers to. (are you still there?)
 
 
(TODO: rest will follow, called into a meeting, sorry)
 

Revision as of 15:25, 20 June 2012


Context of the extension

The specification mentions a set of contexts of an extension. The spec is just a bit to terse to fully understand what they entail. So, below I have given my interpretation of them, as a candidate for extending the documentation:

In instances, extension elements can be found under the Resource.extensions element and refer to an element in within the same resource. The referenced element can be explicitly identified by the id/idref construction (though that is going to change), but is otherwise determined by the 'path' attribute of an extension definition (see below for details). Logically, this extension becomes a child element of that referenced element.

  • A particular element in a single resource - When defining the extension, the "code" indicates the resource type to which this extension applies, the "path" is the path to an element within that resource that is extended. id/idref is only necessary when this element has a cardinality > 1, to indicate a specific occurrence of the element to extend.
  • Anywhere a particular data type is used - When defining the extension, the "code" indicates the composite type to which this extension applies (how?), the "path" is the path to an element within that composite type that is extended. Unless a specific element is referenced using id/idref, all elements within the resource that are of the type that this extension applies to will be extended.
  • A set of elements across one or more resources - I cannot think of a way to do this unambiguously using code and path.
  • A particular context in one of the mapped reference models - This requires a computable mapping specification and deduction of the context from that mapping. "code and "path" would be used to indicate the context within the mapped model (a RIM class + attribute path?) and any element that has a mapping that specifies values for that indicated context would then be extended. The value of the extension is derived from the value of the attribute indicated in the context? Since these extensions are implicitly "created" by the mapping, extensions of this type are not found within Resource.extensions.
  • Another extension - When defining the extension, the "code" indicates the extension to extend. "path" is not used. Logically, this extension becomes a child element of the extended extension. Since the extended extension is itself a child of some element in a resource, this extension is a "grand child" of the resource element the extended extension refers to. (are you still there?)