Generic relationships between resources


Has the FHIR community considered introducing something like the generic ActReference to all resources? I’ve bumped up against a handful of cases where I want to assert a semantic relationship between two resources (e.g. Condition and HealthcareService), but can’t seem to do so. It seems as though many of the extensions are created to overcome this limitation (e.g. condition-basedOn, condition-dueTo). Wouldn’t it make more sense to have a generic resource relationship with a controlled vocabulary?


The notion of the 80% rule is that resources only contain those elements that most implementations support. This keeps the resources simple and easy to understand. It also helps the community to evolve to at least support the “basics”. Introducing generic relationships everywhere would leave implementers in a position where it’s not obvious what should be supported, how the relationships should be used or even what makes sense for their particular resource. Individual extensions can be scoped to particular use-cases and introduced where necessary. They’re also easier to manage from a conformance perspective.

Yes, that makes sense. I understand how a grab-bag of potential relationships can interfere with interoperability. On the other hand, if every group is creating their own extension solutions to meet the needs of relating resources, is there a way to create a “standard” relationship extension, including actRelationshipType codes, so as to at least encourage folks to extend in a similar way?

ActRelationshipType codes add unneeded complexity to extensions. You’ve already got a name-value pair with the URL as a name. Adding an additional level of indirection doesn’t really benefit anything. If there’s an extension that makes sense to define across a set of resources, it can be defined that way. If it’s only relevant for one resource, it can be defined that way. But there’s no particular advantage to avoiding separate extensions for separate relationships. And it makes both implementation and declaring conformance much easier - you only have to worry about specifying which extension you support and looking at the URL - no need to constrain the value set of type codes or look at them.