SQL on FHIR WG Meetings

Shareable and tabular profiles, plus a FHIRPath bug found by a newcomer — Apr 23, 2024

Apr 23, 2024

The tabular profile — a label for the common flat case

The tabular profile adds nothing new. It just declares that every column returns a single scalar value, which the existing collection: false on a column already expresses.

The point is to give the common flat case a label you can point at, the same way you set any profile on any FHIR resource.

The shareable profile — required type, still unsettled

The shareable profile makes column type required, and the group could not settle it.

  • Requiring it — buys stronger profile validation
  • Leaving it optional — assuming string saves you writing type strings in a lot of places where they would be obvious

Good arguments both ways, so it stayed as it was for now.

Should type be bound to a value set?

All FHIR primitives is too broad — that lets through markdown and id — so it needs narrowing to a sensible set, possibly just the FHIRPath built-in primitives. Nobody had checked whether such a value set already exists.

The fhirVersion question was really about FHIRPath

join() with no argument throws in one Java implementation and works in another, which traces to implementation versions rather than FHIRPath versions — only two versions of FHIRPath have ever been published.

Whether a FHIRPath version needs pinning too was left open, with a clear preference for not having to.

A new implementer's bugs from working through the tests

  • A test asserting the FHIR type name, which is not a type
  • join() over an empty collection returning an empty string where the spec says empty input gives empty output — probably the JavaScript FHIRPath engine, so it needs reporting upstream

The implementation would not have been possible without the JSON tests. Some things are just hard to describe in words, and you need a test to fail to see why.

— a new implementer working through the tests