14 Nov 2019


David_Booth, Harold_Solbrig, Dahzi, Daniel_Stone, EricP, Samson_Tu, Deepak
David Booth


(Samson dropped off)

david: Since other newcomers are not on the call right now, we will jump to more detailed tech discussion, then jump back if they arrive.

FHIR/RDF and changing to JSON-LD 1.1

(Harold shows slides)

harold: how FHIR is generated. Clone the repo and run the build.
... Most info is in fhir/source/, with a subdir for every FHIR resource. E.g., account.

(slide 66)

scribe: The spreadsheet has all value definitions. Introduction and notes go into the spec. Examples are there too. FHIR has an SVG rendition of UML, though not actually UML.
... and it has hyperlinks too.

eric: Labra has a shex-to-UML adapter.

harold: Dave Carlson as done a lot of work on generating formal UML for FHIR.
... The UML is defined in account.gen.svg
... And there's core parser code written by Grahame that picks up the spreadsheets (names and columns pre-established) and it forms a StructureDefinition instance (in memory). Once you have that, there are serializers to produce XML, HTML, etc., and RDF. The Turtle parser for it was written by Grahame. He did a great job, but it wouldn't pass conformance tests. The build is no longer validating the emitted Turtle.
... The latest py parser will take the URL of FHIR shex and a Turtle instance, and it will validate the Turtle. That's how I found a bug in the RDF generation, which Grahame fixed.
... There's also other code that generates the example artifacts for each resource, driven from the StructureDefinitions.
... There is also account.java generated, and at least HAPI consumes this java, incorporating it. It shows up in a temp root directory. There seems to be magic somewhere that moves the temp dir somewhere else when it's done, but IDK how.
... Account.sch is a schematron schema.
... Presumably you could feed the turtle structuredefinition of Account into grahame's parser.
... Account.shex is also generated.
... ValueSets can be defined directly in the spreadsheet, but valueset-account-type.xml is a externally defined. (I think)

deepak: The build uses jena to generate the ttl. RdfGenerator.java

harold: There are 2 RDF packages. RdfGenerator.java uses the lexer that Grahame wrote.

deepak: RDFValidator.java uses jena

harold: I wrote that, even though it says Grahame.
... I think RdfGenerator.java is the emitter and RDFValidator.java is the parser.
... On github, hapifhir | org.hl7.fhir.core / / org.hl7.fhir.r5 has new HAPI work.

(slide 67)

harold: There's a package that smart-on-fhir has produced, called fhir-parser. You point it at a FHIR server. FHIR build generates a zip file also. Everything in the Publish dir is generated by the build process. examples-json.zip has the examples. Account.profile.json is in there.
... fhir-parser goes through those to drive a jinja2 (python templating engine) to emit other representations, including Android code. We're using it to emit python.
... I learned how to emit a StructureDefinition by looking at other examples.
... json.zip will include all of the StructureDefinitions in JSON form.
... They use fhir-parser/Sample to provide a template to the jinja parser. The examples are used to validate FHIR.
... fhir-model-generator is now a set of jinja templates and rules.

deepak: How does it work for different versions?

harold: All of the structure defs for different versions are in the StructureDef, but I don't know how they do that.
... No matter what version you give it, it understands it.

<scribe> ACTION: Harold to delete Element entries from python-generated Account class

(slide 68)

harold: ndjson is JSON without the final closing brace, meant for streaming.
... At present account.java RDF serializer only emits Turtle. The serializer that Grahame wrote is kind of seat-of-the-pants, and not what HAPI wants to use. This is what Raul was working on.
... We are proposing that we emit one more (on slide 67), the Account @context representation file. That is even more central than Account.java.

deepak: Similar to what EricP showed?

harold: Yes, but bigger.
... Also proposing changes to what the RDF looks like. Guoqian suggested emitting R4 first.

david: That's a better strategy from a software dev perspective, because it allows regression testing.

harold: slide 68 would mean changing the RDF box.
... When Eric talked about using shex, I understood adding shexmap to Account.shex to emit Account.profile.context .
... Can Eric do that by january?
... Account.shex is available also as shexj -- the JSON rep of the shex rep of Account.
... Not positive that we have everything we need to generate the @context.
... Third option is to take the JSON rep of Account StructureDef. We'll have to mull of which approach works better.

eric: I want to use shexj because I thought it might be reusable.
... Deepak can start with what I have already done.


Summary of Action Items

[NEW] ACTION: Harold to delete Element entries from python-generated Account class

Summary of Resolutions

[End of minutes]

Minutes manually created (not a transcript), formatted by David Booth's scribe.perl version 1.154 (CVS log)
$Date: 2019/11/14 17:02:03 $

Scribe.perl diagnostic output

[Delete this section before finalizing the minutes.]
This is scribe.perl Revision: 1.154  of Date: 2018/09/25 16:35:56  
Check for newer version at http://dev.w3.org/cvsweb/~checkout~/2002/scribe/

Guessing input format: Irssi_ISO8601_Log_Text_Format (score 1.00)

Succeeded: s|hapifhir|hapifhir | org.hl7.fhir.core / |
Succeeded: s|Sample|fhir-parser/Sample|
Present: David_Booth Harold_Solbrig Dahzi Daniel_Stone EricP Samson_Tu Deepak
No ScribeNick specified.  Guessing ScribeNick: dbooth
Inferring Scribes: dbooth

WARNING: No date found!  Assuming today.  (Hint: Specify
the W3C IRC log URL, and the date will be determined from that.)
Or specify the date like this:
<dbooth> Date: 12 Sep 2002

People with action items: harold

WARNING: IRC log location not specified!  (You can ignore this 
warning if you do not want the generated minutes to contain 
a link to the original IRC log.)

[End of scribe.perl diagnostic output]