There are a number of improvements we should make in the units structure and data. More might be added to this list.
1. Blood glucose is measured in two ways: "The international standard way of measuring blood glucose levels is in terms of a molar concentration, measured in mmol/L (millimoles per litre; or millimolar, abbreviated mM). In the United States, Germany and other countries mass concentration is measured in mg/dL (milligrams per decilitre)." - wikipedia and other sources.
For conversion we need to have a common base unit. We need to decide on the base unit we want to use, either item-per-cubic-meter vs kilogram-per-cubic-meter, and then recast the other in terms of that. To make this clean, we'll want new constants glucose_mass = 0.1801559 kilogram-per-mole (status='approximate') and mole_per_item = 6.02214076E+23, and use that to get the conversion values. Because the glucose mass is approximate, it might be best to use item-per-cubic-meter.
2. Currently implementations have to pivot through the Quantity to use the preference data, whereas otherwise the quantity is not necessary (and known by different names, eg STRESS vs PRESSURE). It would be cleaner to deprecate unitPreferences@category, add unitPreferences@baseUnit and change the value to the baseUnit for the category.
<unitPreferences category="length" usage="default">
<unitPreferences baseUnit="meter" usage="default">
3. To prevent misunderstanding, we should add clarifications as to which unit is meant, in cases where there are alternates that could be confused. This applies to some of the non-metric units.
<convertUnit source='foot' baseUnit='meter' factor='ft_to_m' systems="ussystem uksystem" *description="International foot (https://books.google.com/books?id=4aWN-VRV1AoC&pg=PA13), not US survey foot"*/>
<convertUnit source='fluid-ounce' baseUnit='cubic-meter' factor='gal_to_m3/128' systems="ussystem" *description="US customary fluid ounce, not imperial or ‘US nutrition ounce’ (=30 mL)"*/>
4. We should change the translations to use the short form of the units, eg
length-mile ==> mile
That way implementations can consistently use the short form instead of converting back and forth to the long form (which doesn’t work for productive units).