Difference between revisions of "FHIR interversion compatibility"
(Created page with "{{FHIR Discussion Page}} Category:Active FHIR Discussion We can choose to promise not to do any of these * ever * except in the transition from DSTU to Production (which req...") |
(Migrate Content to Confluence/Added Forward Link) |
||
| Line 1: | Line 1: | ||
| − | {{FHIR Discussion Page}} | + | Content on this page has been migrated to Confluence here: https://confluence.hl7.org/display/FHIR/Interversion+Compatibility |
| + | <br />{{FHIR Discussion Page}} | ||
[[Category:Active FHIR Discussion]] | [[Category:Active FHIR Discussion]] | ||
We can choose to promise not to do any of these | We can choose to promise not to do any of these | ||
| − | * ever | + | |
| − | * except in the transition from DSTU to Production (which requires a way to distinguish between) | + | *ever |
| − | * except between DSTU releases and between DSTU and production (which requires a way to distinguish between) | + | *except in the transition from DSTU to Production (which requires a way to distinguish between) |
| − | * except when we decide a fundamental breaking change is required (which requires a way to distinguish between) | + | *except between DSTU releases and between DSTU and production (which requires a way to distinguish between) |
| + | *except when we decide a fundamental breaking change is required (which requires a way to distinguish between) | ||
I've documented the changes that apply to profiles as well, though the primary concern is what can happen to resources. Deprecating and replacing profiles is less of a concern, so feel free to ignore those bits that are marked as specific to profiles. | I've documented the changes that apply to profiles as well, though the primary concern is what can happen to resources. Deprecating and replacing profiles is less of a concern, so feel free to ignore those bits that are marked as specific to profiles. | ||
Fundamental changes: | Fundamental changes: | ||
| − | * New version of Atom | + | |
| − | * Changes to what we expose in atom | + | *New version of Atom |
| − | * Introduction of additional XML attributes (or changing names of existing XML attributes) | + | *Changes to what we expose in atom |
| − | * Changing the fundamental structure of FHIR elements (e.g. narrative, contained, extentions) - name changes, structure changes | + | *Introduction of additional XML attributes (or changing names of existing XML attributes) |
| − | * Introducing mixed text | + | *Changing the fundamental structure of FHIR elements (e.g. narrative, contained, extentions) - name changes, structure changes |
| − | * Introducing additional namespaces | + | *Introducing mixed text |
| − | * Introducing changes to how XML equivalents get expressed in JSON | + | *Introducing additional namespaces |
| + | *Introducing changes to how XML equivalents get expressed in JSON | ||
Non-backward compatible (Changes that break constraints on an old version) | Non-backward compatible (Changes that break constraints on an old version) | ||
(These will most commonly occur when there's an expansion of the use-case or recognition we'd been overly restrictive) | (These will most commonly occur when there's an expansion of the use-case or recognition we'd been overly restrictive) | ||
| − | * Adding new elements (includes promotion of extensions to elements) | + | |
| − | * Changing minOccurs from 1 to 0 | + | *Adding new elements (includes promotion of extensions to elements) |
| − | * Changing maxOccurs from 1 to * | + | *Changing minOccurs from 1 to 0 |
| − | * Adding a new "code" in a required, non-extensible code list (whether in an enumerated list or expression-based value list) | + | *Changing maxOccurs from 1 to * |
| − | * Changing a value set/code list from required to preferred or example or removing it entirely | + | *Adding a new "code" in a required, non-extensible code list (whether in an enumerated list or expression-based value list) |
| − | * Changing a value set/code list from non-extensible to extensible | + | *Changing a value set/code list from required to preferred or example or removing it entirely |
| − | * Converting a singleton datatype and turning it into a choice of data types | + | *Changing a value set/code list from non-extensible to extensible |
| − | * Adding additional choices to an existing choice data type | + | *Converting a singleton datatype and turning it into a choice of data types |
| − | * Allowing a new resource as an allowed type for a resource reference | + | *Adding additional choices to an existing choice data type |
| − | * Loosening or removing an ad-hoc constraint | + | *Allowing a new resource as an allowed type for a resource reference |
| − | * Increasing or removing maximum length | + | *Loosening or removing an ad-hoc constraint |
| − | * Changing an element to be "must understand" | + | *Increasing or removing maximum length |
| − | * Changing an element to be "required" (profiles only) | + | *Changing an element to be "must understand" |
| − | * Removing or loosening a profile on a resource or data type reference (profiles only) | + | *Changing an element to be "required" (profiles only) |
| + | *Removing or loosening a profile on a resource or data type reference (profiles only) | ||
Non-forward compatible (Introducing constraints not satisfied by old version) | Non-forward compatible (Introducing constraints not satisfied by old version) | ||
(These will most commonly occur when there's a change to the understanding of the 80% or a determination the existing resource doesn't work) | (These will most commonly occur when there's a change to the understanding of the 80% or a determination the existing resource doesn't work) | ||
| − | * Removing elements (usually demoting to extensions) | + | |
| − | * Changing minOccurs from 1 to 0 | + | *Removing elements (usually demoting to extensions) |
| − | * Changing maxOccurs from * to 1 | + | *Changing minOccurs from 1 to 0 |
| − | * Removing a code from a required, non-extensible code list (whether in an enumerated list or expression-based value list) | + | *Changing maxOccurs from * to 1 |
| − | * Declaring a required value set/code list where there wasn't one previously | + | *Removing a code from a required, non-extensible code list (whether in an enumerated list or expression-based value list) |
| − | * Declaring a previously extensible value set/code list to be non-extensible | + | *Declaring a required value set/code list where there wasn't one previously |
| − | * Converting a choice data type back to a singleton data type | + | *Declaring a previously extensible value set/code list to be non-extensible |
| − | * Removing choices from a choice data type | + | *Converting a choice data type back to a singleton data type |
| − | * Removing a resource from the list of allowed types for a resource reference | + | *Removing choices from a choice data type |
| − | * Adding or tightening an ad-hoc constraint | + | *Removing a resource from the list of allowed types for a resource reference |
| − | * Declaring or decreasing maximum length | + | *Adding or tightening an ad-hoc constraint |
| − | * Changing an element to no longer be "must understand" | + | *Declaring or decreasing maximum length |
| + | *Changing an element to no longer be "must understand" | ||
Latest revision as of 17:48, 31 October 2019
Content on this page has been migrated to Confluence here: https://confluence.hl7.org/display/FHIR/Interversion+Compatibility
We can choose to promise not to do any of these
- ever
- except in the transition from DSTU to Production (which requires a way to distinguish between)
- except between DSTU releases and between DSTU and production (which requires a way to distinguish between)
- except when we decide a fundamental breaking change is required (which requires a way to distinguish between)
I've documented the changes that apply to profiles as well, though the primary concern is what can happen to resources. Deprecating and replacing profiles is less of a concern, so feel free to ignore those bits that are marked as specific to profiles.
Fundamental changes:
- New version of Atom
- Changes to what we expose in atom
- Introduction of additional XML attributes (or changing names of existing XML attributes)
- Changing the fundamental structure of FHIR elements (e.g. narrative, contained, extentions) - name changes, structure changes
- Introducing mixed text
- Introducing additional namespaces
- Introducing changes to how XML equivalents get expressed in JSON
Non-backward compatible (Changes that break constraints on an old version) (These will most commonly occur when there's an expansion of the use-case or recognition we'd been overly restrictive)
- Adding new elements (includes promotion of extensions to elements)
- Changing minOccurs from 1 to 0
- Changing maxOccurs from 1 to *
- Adding a new "code" in a required, non-extensible code list (whether in an enumerated list or expression-based value list)
- Changing a value set/code list from required to preferred or example or removing it entirely
- Changing a value set/code list from non-extensible to extensible
- Converting a singleton datatype and turning it into a choice of data types
- Adding additional choices to an existing choice data type
- Allowing a new resource as an allowed type for a resource reference
- Loosening or removing an ad-hoc constraint
- Increasing or removing maximum length
- Changing an element to be "must understand"
- Changing an element to be "required" (profiles only)
- Removing or loosening a profile on a resource or data type reference (profiles only)
Non-forward compatible (Introducing constraints not satisfied by old version) (These will most commonly occur when there's a change to the understanding of the 80% or a determination the existing resource doesn't work)
- Removing elements (usually demoting to extensions)
- Changing minOccurs from 1 to 0
- Changing maxOccurs from * to 1
- Removing a code from a required, non-extensible code list (whether in an enumerated list or expression-based value list)
- Declaring a required value set/code list where there wasn't one previously
- Declaring a previously extensible value set/code list to be non-extensible
- Converting a choice data type back to a singleton data type
- Removing choices from a choice data type
- Removing a resource from the list of allowed types for a resource reference
- Adding or tightening an ad-hoc constraint
- Declaring or decreasing maximum length
- Changing an element to no longer be "must understand"