Hi implementers,
We have come across a few issues recently which will affect interoperability between openEHR implementations if we don’t have some tighter guidelines for implementation. I will start with a couple that relate to case sensitivity of code strings and identifier values. I am interested in people’s views about handling case sensitivity in the following cases.
The first is with regard to territory and encoding code phrase strings. Rong recently found when using the Ocean EhrBank Service with the Java reference implementation that we differ in which case we use. RONG expects “AU” while I use “au” and similar for “UTF-8” and “utf-8”.
The ISO-3166-1 specifies these as upper case values while the openEHR terminology specification provides examples using lower case.
Similarly, when I use two different XML editors that I have on my machine to create a new XML document I get one with an upper case encoding and the other lower case.
The other case is with regard to identifier values and URIs, in particular EHR_URIs. We use GUIDs for our EHR ID, VERSIONED_OBJECT uid and CONTRIUBUTION uid values etc. We also currently use a GUID for our system ID. Again there seems to be some inconsistency between implementations of creating GUIDs (this time from the same vendor). My development framework creates lower case GUIDs while my database system creates upper case GUIDs. Hence I get version UIDs such as the following.
0835608c-4863-4a54-b38a-3c7150c0ba57::EA13C291-8433-4961-ADB8-CB8541E8B171::1
Similarly, when I create an EHR_URI I get something like the following.
ehr://0c34ac1c-0ffa-4958-81c4-ca914a3ab913@EA13C291-8433-4961-ADB8-CB8541E8B171/0835608c-4863-4a54-b38a-3c7150c0ba57@latest_trunk_version
Now, when I used a URI class from my development framework with the above URI and compared the ToString() result with the original uri, it was different because the URI class had converted it to lower case. Now this might seem OK for Internet URLs etc, but because the EHR_URI contains the VERSIONED_OBJECT uid possibly in another system, we need to ensure that we can find this object reliably across implementations.
I would also suggest the same issue arises for archetype IDs and node IDs. Is “openEHR-EHR-OBSERVATION.blood_pressure.v1” the same as “openehr-ehr-observation.blood_pressure.v1” and is “at0001” the same as “AT0001”. The later we had an issue with when doing some work with the AQL gramma where we wanted the keywords to be case insensitive but the node ID to be lower case only. The parser tool we were using treated all literals in the gramma as case insensitive.
Enough background.
Should code phrase strings be case sensitive? If so, which case do we use for territory and encoding, etc.
Should object identifier values be case sensitive?
Should archetype/node identifiers be case sensitive?
Should URIs be case sensitive?
Should EHR_URIs be case sensitive?
Thoughts?
Another issue we need to think about is Date/Time value formats using ISO-8601. My experience is that intrinsic development framework classes (and XML) do not support ISO-8601 completely/properly, especially for the requirements of openEHR such as partial date/times etc. We have had to implement our own set of classes to ensure ISO-8601 is properly implemented. So questions are:
Is basic or extended format the preferred?
Is it allowable to convert original data format to another format for internal use?
What is the normalised format for the purposes of creating a signature digest?
I certainly have opinions on these but I would like to hear others first.
Regards
Heath
Heath Frankel
Product Development Manager
Ocean Informatics
Ground Floor, 64 Hindmarsh Square
Adelaide, SA, 5000
Australia
ph: +61 (0)8 8223 3075
mb: +61 (0)412 030 741
email: heath.frankel@oceaninformatics.com