Implement canonical version matching for partial versions in FHIR validation #3217
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR implements support for partial version matching in canonical URLs as per the FHIR specification, addressing the requirement to support version matching in IAsyncResourceResolver implementations.
Problem
The current implementation only supports exact version matching for canonical URLs. According to the FHIR canonical matching specification, partial version matching should be supported where "1.5" matches "1.5.0", "1.5.1", etc.
For example, this scenario would fail before this fix:
Solution
This PR implements FHIR-compliant canonical version matching across all resolver implementations:
Modified Components
ArtifactSummaryExtensions.cs (Conformance & STU3 versions): Updated
FindConformanceResources
method to use a newMatchesVersion
helper that implements FHIR-compliant canonical matching rulesInMemoryResourceResolver.cs: Enhanced
ResolveByCanonicalUri
method to support partial version matching for in-memory resolversAdded comprehensive test coverage to verify both backward compatibility and new functionality
FHIR Canonical Matching Rules Implemented
1.5.0
matches exactly1.5.0
(backward compatible)1.5
matches1.5.0
,1.5.1
,1.5.10
, etc.1.5
does not match1.4.0
,1.6.0
, or2.5.0
Example Usage
Testing
Backward Compatibility
This change is fully backward compatible. All existing exact version matching continues to work unchanged, while adding support for partial version matching as specified in the FHIR standard.
Fixes #3216.
💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.