- From: Roger L. Costello <costello@mitre.org>
- Date: Tue, 08 Jul 2003 09:08:33 -0400
- To: www-rdf-interest@w3.org
- CC: "Thomas B. Passin" <tpassin@comcast.net>, "Costello,Roger L." <costello@mitre.org>
Excellent work Tom! I am still assimilating your thoughts, and will comment more fully later. In the meantime I have an idea which I would like to toss into the mix. This is what we are currently proposing: <LengthValue> <numericalValue>6300</numericalValue> <unitSpecification rdf:resource="#Kilometers"/> </LengthValue> That is, the length of the Yangtze River is indicated by a pair of values - a number and an indication of the units. How would a machine know that the units (Kilometers) applies to the number (6300)? Answer: we are depending upon the fact that <unitSpecification> is *physically co-located* with <numericValue>. Suppose that we had those elements separated: <LengthValue> <numericalValue>6300</numericalValue> <precision>...</precision> <source>...</source> <unitSpecification rdf:resource="#Kilometers"/> </LengthValue> Now it becomes less obvious that Kilometers applies to 6300. Instead, suppose that we were to represent it like this: <Kilometers>6300</Kilometers> That is, 6300 is a value in the Kilometers Class. <Miles>3914</Miles> 3914 is a value in the Miles Class. Each value in the Kilometers Class maps to a single value in the Miles Class, and vice versa. Kilometers Miles ------------------------------------- 1.6 <--------------------> 1 6300 <--------------------> 3914 A notional definition of these classes might be: <owl:Class rdf:ID="Kilometers"> <rdfs:subClassOf rdfs:resource="&xsd;decimal"/> -- express instance value mapping equivalence here </owl:Class> <owl:Class rdf:ID="Miles"> <rdfs:subClassOf rdfs:resource="&xsd;decimal"/> -- express instance value mapping equivalence here </owl:Class> Comments? /Roger "Thomas B. Passin" wrote: > [Roger L. Costello] > > > > I would like to take a stab at defining the conceptual model for > > unitSpecification: > > > > unitSpecification > > Units > > > > M15) The value of unitSpecification is Units. > > M16) Kilometers, Miles are types of Units. > > > > Units > > | > > ---------------- > > | | > > Kilometers Miles > > > > M17) Kilometers = Miles * 1.609344 > > M18) Miles = Kilometers * (100000 / 160934.4) > > > > I dunno, Roger. Just sticking with the values for now, why just that > precision? And the numerator of the fraction has a different precision than > the denominator. That just isn't right. Any thoughts about how to specify > the multiplication in OWL? > > Any unit specification should be capable of being reduced to a combination > of fundamental units (e.g., MKSQ, cgs, etc). Given a length measurement and > its units, it seems to me that the measurement value should be capable of > being compared with some international standard. I am not saying that these > capabilities always have be be included in the statement of a measurement > value or a unit, but we ought to make sure that it can be done when needed. > > Furthermore, some units are fundamental - meter, second, kilogram, coulomb > for example. Others are considered to be combinations of the fundamental > ones. This needs to be accounted for somehow (again, not in every case). > > Let's see. There is a relationship between the "miles" value and the > "kilometers" value of a length. In this case, we know that their ratio is > constant. More generally, there is going to be some formula that relates > them. Degrees F vs degrees C is a simple example but common enough in (US) > practice. The formula may or may not be linear. > > Suppose that we have a standard kilometer and a standard mile, sort of like > a standard meter rod and a standard foot rod. The the length of the two > rods is related by > > L-std-km-rod = f(L-std-mile-rod) // f(x) = 0.625*x > L-std-mile-rod = g(L-std-km-rod) // f(x) = 1.6*x > > (neglecting numerical errors!). Here, g in the inverse function of f: > g == f^-1 // Can't format this decently in plain text! > > Also, the relation between the numerical values of a length measurement is > > Value-in-km = g(Value-in-miles) = f^-1(Value-in-miles) > > Now f and g are established by national or international standards bodies. > So we ought to be able to create resources to represent them, something like > this - > > Transform-from-miles-to-km sameTransformAs nist:g > Transform-from-km-to-miles sameTransformAs nist:f > > So here is the first thing we can establish - > > X1) The relation between a "miles" measurement value and a "kilometers" > measurement value of the same measurement is the same as the relation "g" > between a standard mile and a standard kilometer. > > This is something that can be stated in OWL (although we may not be able to > spell out how f and g work with OWL). In fact, it looks like a > samePropertyAs predicate between the transforms. A math-aware processor > could figure things out. > > Note that f and g are directional - you have to know which side gets miles > and which side gets kilometers. > > This works by appeal to standard rods, and not to the dimensions of "units" > per se. But they are closely related. A more dimensionally complex unit > could be built up in a similar way, I would think. > > Next, what does a conversion between units of measure actually operate on? > This is interesting because the transform to use depends on the input unit > spec and the target unit spec, but the transform operates on both the > numerical value and the unit sec (since miles get changed to kilometers). > This could be represented symbolically something like this - > > Value-in-units-A = g[units-A, units-B] (Value-in-units-B) > > Here, g[...] indicates that we have selected a specific "g" transform based > on the two units specs. > > What is a "Value-in-miles" measurement value? Simple - it is the value of a > LengthMeasurement for which the unitSpec equals Miles. That can be stated > in OWL. Thus, a processor could infer a Value-in-miles type by examining > the unitSpec object. > > I think I can now see how to represent the relation between a length value > in miles the kilometer version of the same length. They are related by the > transform "g" , and also by the allowed tolerance of the comparison. > > Value-in-Miles // the value of a specific measurement > numericalValue > 1 > unitSpec > Miles > > Value-in-Km // another value > numericalValue > 1.6 > unitSpec > Kilometer > > Transform > function > G > tolerance > "5%" > inputValue > Value-in-Miles > outputValue > Value-in-Kilometers > inputUnits > Miles > outputUnits > Kilometers > > With this formulation, a processor that understood how to apply the "G" > transformation could check these statements for consistency. A query > processor could return the right value in kilometers by applying the > transform to the miles version. In fact, I suspect that an xslt stylesheet > could do these tasks, given a few templates for the transforms of interest > (recall that the right transformation is specified by the two unit specs, so > we are looking at a lookup table kind of thing). > > It ought to be possible to take the specific transform stated above and make > it into a general constraint on any transformation between any > length-in-miles and the corresponding length-in-kilometers. > > Notice that the Transform is a statement (a compound one, of course). It is > not a procedure nor a formula. The statement may be true or false, > consistent with the other two statements or not. Up until now I had talked > glibly about a "transform" but had not really though about how to represent > the units conversions we havebeen talking about in an RDF-ish declarative > language. Very interesting! > > With this approach, all the challenges are localized down to just two > areas - > > 1) How to specify the "f" and "g" base transformations, and > 2) How to deal with complex units specifications. > > For named units, 2) is not needed, so many practical cases boil down to > solving 1). Item X1 above is an attempt to get at 1), but it is not really > enough. > > The "f" and "g" functions could be put into a namespace, and a processor > that claims to be aware of that namespace should know what to do with them. > That is probably better that trying to figure out how to work out all the > math stuff in an OWL-only way. Non-aware processors could infer something > about equivalent values - at least, to know if a claimed transform could be > consistent with the other data - but not be able to work out the numbers. > That seems reasonable to me. > > That is all I have time for right now. Sorry to be so rambling but I am > working this out as I go. I do not think I am quite ready to say I have a > conceptual model I feel confortable with, but I think the bits I have > sketched out here are probably OK. Once we understand things better, we > will probably see how they can be simplified for common use. > > Cheers, > > Tom P
Received on Tuesday, 8 July 2003 09:08:40 UTC