Developing a FHIR Server Using C# and MongoDb, Xml and Json Ewout Kramer,

Developing a FHIR Server
Using C# and MongoDb, Xml and
Json
Ewout Kramer,
Furore (e.kramer@furore.com)
Architectural context
FHIR
v3
HIS
LIMS
v2
PHR
Comm.
Service
FHIR
REST
CDR
ETL
FHIR
Msg
FHIR
Comm.
Service
DB
VNA
PACS
Solution scenarios
FHIR Resource
JSON/XML
JSON/XML
JSON/XML
FHIR REST
FHIR Parser
FHIR Parser
FHIR Validator
Processing
POCO/POJO
POCO/POJO
JSON/XML
XML
NoSql
(Xml/Json)
NoSql
(Json/Xml)
(Json)
ORM
Storage
DBMS
Json and Xml Roundtrip?
<XXX xmlns=“urn:foo”>
<B a=“c” />
<C>One</C>
<C>Two</C>
<D>One</D>
<div>Not <b>so</b></div>
</XXX>
{
“B”: { “@a” : “c” },
“C”: [ “One”, “Two” ],
“D” : “One”,
“div” :
{ “#text” : “Not ”,
“b” : “so”
}
}
FHIR Xml and JSon guidelines
<Person xmlns="http://www.hl7.org/fhir">
<identifiers>
<identifier>
<type>
<code>MR</code>
<system>urn:hl7-org:sid/v2-0203</system>
</type>
<identifier>
<system>oid:1.2.36.146.595.217.0.1</system>
<id>12345</id>
</identifier>
<assigner>
<text>Acme Healthcare</text>
</assigner>
<period>
<low>2001-05-06</low>
</period>
</identifier>
</identifiers>
<text>
<status>generated</status>
<xhtml xmlns="http://www.w3.org/1999/xhtml">
<table>
<tbody>
<tr>
"Person" : {
"identifiers" :
[ { "identifier" :
{ "type" :
{ "code" : "MR",
"system" : "urn:hl7-org:sid/v2-0203“ }
}
} ],
"text" : {
"status" : "generated",
"xhtml" : "<table><tbody><tr><td>Name</td>
<td>Peter James <b>Chalmers</b>
</table></tbody></table>"
}
}
Two ways of storing in MongoDb
var database = server.GetDatabase("test");
var collection = database.GetCollection<Entity>("entities");
var entity = new Entity { Name = "Tom" };
collection.Insert(entity);
var id = entity.Id;
BsonDocument nested = new BsonDocument
{
{ "name", "John Doe" },
{ "address", new BsonDocument
{
{ "street", "123 Main St." },
{ "city", "Centerville" },
{ "zip", 12345 }
}
}
};
collection.Insert(nested);
What a detour….
Json -> XML -> Json -> Bson
Storing a resource as a record
ResourceRecord
ResourceRecord
- RecordId, Version
ResourceRecord
- RecordId, Version
State
- --RecordId,
State Version
CreationDate, Author
- --State
CreationDate, Author
- CreationDate, Author
ResourceInstance
- AsJson(), ToJson(), …
- GetElement(), ReplaceElement()
- ResourceId, Location, Type
FHIR Resource
Data (XML)
How do I do transactions/locking?
MongoDB does not use traditional locking or complex transactions with
rollback, as it is designed to be lightweight and fast and predictable in its
performance. It can be thought of as analogous to the MySQL MyISAM
autocommit model. By keeping transaction support extremely simple,
performance is enhanced, especially in a system that may run across many
servers.
C
Brewer’s CAP theorem
Consistency,
Availability and
Partition tolerance
Pick any two…
A
P
http://fhir.apphb.com/fhir/help
26th Annual Plenary & Working Group Meeting
Sep 9, 2012 to Sep 14, 2012 - Baltimore, MD
(Dutchies take note: September 12th general elections!)
SATURDAY SEPTEMBER 8th
FIRST FHIR CONNECTATHON