* Kashyap, Vipul A8MM <vipul.kash...@cigna.com> [2010-09-09 14:22-0400] > > My 2 cents for whatever it's worth... > > > per CPR, as a pair of value and datatype: > > > > ... [ trans:systolic [ muo:measuredIn trans1:mmHg ; > > muo:numericalValue "120" ] ; > > trans:diastolic [ muo:measuredIn trans1:mmHg ; > > muo:numericalValue "80" ] ] . > > > This is probably the best option as this allows you to switch units and > encapsulate unit transformations into specific functions. > > > Another, potentially more attractive option, is to model units in the > > predicate: > > > > :X trans:bloodPressure > > [ trans:systolicMmHg "120" ; > > trans:diastolicMmHg "80" ] . > > Switching units would be a challenge and require writing predicate rules?
If we had trans:systolicMmHg and trans:systolicMPa and ..., yes, but that's what I'm trying to avoid. If we have a KB filled with trans:systolicMmHg, we will have an easier time making it available in e.g. MPa than if we had to adapt a variety of units. That is, we would have a simple rule body rather than the SPARQL UNION expressed below. > > This greatly simplifies our life as we are otherwise likely > > to have a variety of e.g. BP data in the database: 120/80 > > mmHg, 12/8 DmHg, 16000/10667 Pa, > > 16/11 MPa, 13 (PAM) > > > > which would lead to rediculous queries when we want to use the data: > > > > SELET ?sysM ?diaM { > > ?x trans:bloodPressure [ trans:systolic ?sys ; > > trans:diastolic ] > > FILTER (datatype(?sys) = u:mmHg) && datatype(?dia) > > = u:mmHg) } > > UNION SELECT (?sys*10 as ?sysM) (?dia*10 as ?diaM) { > > ?x trans:bloodPressure [ trans:systolic ?sys ; > > trans:diastolic ] > > FILTER (datatype(?sys) = u:dmHg) && datatype(?dia) > > = u:dmHg) } > > UNION SELECT (?sys*133 as ?sysM) (?dia*133 as ?diaM) { > > ?x trans:bloodPressure [ trans:systolic ?sys ; > > trans:diastolic ] > > FILTER (datatype(?sys) = u:MPa) && datatype(?dia) = > > u:MPA) } ... } > > One approach to address this would be to adopt a canonical set of units and > apply transformations in and out of various data sources. Once we pick canonical units, wouldn't we want to use units-specific predicates? If we don't we run the risk that folks will not know that our data structures are canonicalized and will inject data in other units. In a sense, such predicates would fail to carry the information that it is the one-true-units-for-BP. The predicates don't specifically need to carry the units in the name, trans:systolicMmHg vs. trans:canonSystolic vs. trans:systolic but I think that's a good way to eliminate some likely bugs. > ---Vipul > ------------------------------------------------------------------------------ > CONFIDENTIALITY NOTICE: If you have received this email in error, please > immediately notify the sender by e-mail at the address shown. This email > transmission may contain confidential information. This information is > intended only for the use of the individual(s) or entity to whom it is > intended even if addressed incorrectly. Please delete it from your files if > you are not the intended recipient. Thank you for your compliance. > Copyright 2010 CIGNA > ============================================================================== > -- -ericP