Stream: implementers
Topic: Extensions - Representation
nicola (RIO/SS) (Oct 12 2016 at 09:30):
I want to raise again the question about extensions representation (at least in JSON).
It is really convenient to represent extensions in JSON as object not array:
- Semantically extensions more key-value (dictionary, hash-map), then list - we want to access race like gender
- Easy to write profile's restrictions
- From UI perspective (binding attributes/elements to widgets) - no conversions from list to object and back
- From databases perspectives (access specific extensions by key, not by filter): resource.extension.race vs resource.extensions.filter(url: 'race')
Examples:
[ {"url":"http://hl7.org/fhir/ValueSet/v3-LivingArrangement","valueCodeableConcept":{....}}, {"url":"http://hl7.org/fhir/StructureDefinition/us-core-race","valueCodeableConcept":{...}, {"url":"http://hl7.org/fhir/StructureDefinition/us-core-ethnicity","valueCodeableConcept":{...}},{"url":"http://hl7.org/fhir/v3/EducationLevel","valueCodeableConcept":{...}}, {"url":"http://hl7.org/fhir/StructureDefinition/patient-adoptionInfo","valueString":"no"}, {"url":"http://narus.com/when-adopted","valueDate":"2010-09-03"}, {"url":"http://hl7.org/fhir/ValueSet/anzsco-occupations","valueString":"Telecommunications Engineer"}, {"url":"http://narus.com/fhir/date-married","valueDate":"1988-12-23"}, {"url":"http://narus.com/fhir/supportive-employer","valueString":"true"} ]
vs
{ "http://hl7.org/fhir/ValueSet/v3-LivingArrangement": { valueCodeableConcept":{ ... }}, "http://hl7.org/fhir/StructureDefinition/us-core-race": { valueCdeableConcept: { ... }}, "http://hl7.org/fhir/StructureDefinition/patient-adoptionInfo": {"valueString":"no"}, "http://narus.com/when-adopted": {"valueDate":"2010-09-03"}, "http://hl7.org/fhir/ValueSet/anzsco-occupations": {"valueString":"Telecommunications Engineer"}, "http://narus.com/fhir/date-married": {"valueDate":"1988-12-23"}, "http://narus.com/fhir/supportive-employer": {"valueBoolean": true} }
Or with separation of schema and data:
{ $schema: { livingArrangement: {url: "http://hl7.org/fhir/ValueSet/v3-LivingArrangement", type: 'CodeableConcept'} race: {url: "http://hl7.org/fhir/StructureDefinition/us-core-race", type: 'CodeableConcept'}, adoption: {url:"http://hl7.org/fhir/StructureDefinition/patient-adoptionInfo", type: 'string'}, whenAdopted: {url:"http://narus.com/when-adopted", type: 'date'}, occupation: {url:"http://hl7.org/fhir/ValueSet/anzsco-occupations", type: 'string'} marriedDate: {url:"http://narus.com/fhir/date-married", type: 'date'}, employer: {url:"http://narus.com/fhir/supportive-employer", type: 'boolean'} }, livingArrangement: {coding: ...}, race: {coding: ....}, adoption: "no", whenAdopted: "1980" occupation: "Telecommunications Engineer", marriedDate: "2001" employer: true }
Clark C. Evans (Oct 12 2016 at 12:47):
Nicola, I very much like the latter, separated. representation.
Grahame Grieve (Oct 12 2016 at 19:38):
we balloted a variation on the 2nd for DSTU2. It was soundly defeated at ballot.
Brian Postlethwaite (Oct 12 2016 at 21:42):
Not a dictionary either, as keys can be duplicated, and also need to extend extensions.
nicola (RIO/SS) (Oct 13 2016 at 08:49):
@Brian Postlethwaite In 80% of cases it is key/values, in case of collections it could be done like:
extension: { someExt: [ 'value', 'value'] }
Nested extensions are good example how bad current representation is :) I would like to see something like:
extension: { complexExtension: { key1: '...', key2: { subkey: '....' } } }
And the question is only how to represent schema for this situation.
Josh Mandel (Oct 14 2016 at 01:28):
Remember when we used to have:
{ "resourceType": "Patient", "id": "123", "http://mydomain/some-extension": [{ :-) }] }
I think I'm the only person who liked it ;-)
Grahame Grieve (Oct 14 2016 at 19:11):
you weren't the only one, but it was surprisingly less popular than I expected
Brian Postlethwaite (Oct 15 2016 at 01:20):
None of the code generators would have ever liked that property name ;)
Last updated: Apr 12 2022 at 19:14 UTC