Units of measure and property chaining
We're long overdue for standard URIs for units of measure in the Semantic Web.
The SUMO stuff has a nice browser (e.g. see meter), a nice mapping from wordnet, and nice licensing terms. Of course, it's not RDF-native. In particular, it uses n-ary relations in the form of functions of more than one argument; 1 hour is written (&%MeasureFn 1 &%HourDuration). I might be willing to work out a mapping for that, but other details in the KIF source bother me a bit: a month is modelled conservatively as something between 28 and 31 days, but a year is exactly 365 days, despite leap-years. Go figure.
There's a nice Units in MathML note from November 2003, but all the URIs are incomplete, e.g. http://.../units/yard .
The Sep 2006 OWL Time Working Draft has full URIs such as http://www.w3.org/2006/time#seconds, but its approach to n-ary relations is unsound, as I pointed out in a Jun 2006 comment.
Tim sketched the Interpretation Properties idiom back in 1998; I don't suppose it fits in OWL-DL, but it appeals to me quite a bit as an approach to units of measure. He just recently fleshed out some details in http://www.w3.org/2007/ont/unit. Units of measure are modelled as properties that relate quantities to magnitudes; for example:
track length [ un:mile 0.25].
This Interpretation Properties approach allows us to model composition of units in the natural way:
W is o2:chain of (A V).
where o2:chain is like property chaining in OWL 1.1 (we hope).
Likewise, inverse units are modelled as inverse properties:
s a Unit; rdfs:label "s".
hz rdfs:label "Hz"; owl:inverseOf s.
Finally, scalar conversions are modelled using product; for example, mile is defined in terms of meter like so:
(m 0.0254) product inch.
(inch 12) product foot.
(foot 3) product yard.
(yard 22) product chain.
(chain 10) product furlong.
(furlong 8)product mile.
I supplemented his ontology with some test/example cases, unit_ex.n3 and then added a few rules to flesh out the modelling. These rules converts between meters and miles:
# numeric multiplication associates with unit multiplication
{ (?U1 ?S1) un:product ?U2.
(?U2 ?S2) un:product ?U3.
(?S1 ?S2) math:product ?S3
} => { (?U1 ?S3) un:product ?U3 }
# scalar conversions between units
{ ?X ?UNIT ?V.
(?BASE ?CONVERSION) un:product ?UNIT.
(?V ?CONVERSION) math:product ?V2.
} => { ?X ?BASE ?V2 }.
Put them together and out comes:
ex:track ex:length [
:chain 20.0;
:foot 1320.0;
:furlong 2.0;
:inch 15840.0;
:m 402.336;
:mile 0.25;
:yard 440.0 ] .
The rules I wrote for pushing conversion factors into chains isn't fully general, but it works in cases like converting from this:
(un:foot un:hz) o2:chain fps.
bullet speed [ fps 4000 ].
to this:
ex:bullet ex:speed [
ex:fps 4000;
:mps 1219.2 ] .
As I say, I find this approach quite appealing. I hope to discuss it with people working on units of measure in development of a Delivery Context Ontology.