(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.
(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.
ADJOURNED
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]