- From: Eric Prud'hommeaux <eric@w3.org>
- Date: Thu, 9 Sep 2010 14:39:50 -0400
- To: "Kashyap, Vipul A8MM" <Vipul.Kashyap@CIGNA.COM>
- Cc: "public-semweb-lifesci@w3.org" <public-semweb-lifesci@w3.org>
* Kashyap, Vipul A8MM <Vipul.Kashyap@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
Received on Thursday, 9 September 2010 18:40:26 UTC