- From: Alan Ruttenberg <alanruttenberg@gmail.com>
- Date: Wed, 9 Jul 2008 17:10:20 +0100
- To: Rob Shearer <rob.shearer@comlab.ox.ac.uk>
- Cc: "Boris Motik" <boris.motik@comlab.ox.ac.uk>, "'OWL Working Group WG'" <public-owl-wg@w3.org>
On Jul 9, 2008, at 4:52 PM, Rob Shearer wrote:
> I agree with almost all the suggestions here---Boris and I
> discussed all these points. The main argument for using the term
> "datatype" and for using xsd names for the integer and string value
> spaces was that there is already too much political momentum behind
> the existing terminology and identifiers.
What I suggested was allowing the identifiers, but clearly explaining
what they mean in specific OWL contexts. Doing so, requires, I think,
resorting to different language than is already used to describe
those things that are different.
Don't know. Definitely worth discussing further.
-Alan
>
> On 9 Jul 2008, at 15:18, Alan Ruttenberg wrote:
>
>>
>>
>> On Jul 8, 2008, at 5:16 PM, Boris Motik wrote:
>>> Hello,
>>>
>>> 1. Datatype Map
>>> ----------------
>>
>> I wonder if we should still use the term "datatype", as there will
>> likely be confusion with the xsd sense of datatype.
>>
>>> A datatype map consists of the following things:
>>>
>>> - a set of datatypes
>>> - each datatype provides a set of allowed facets
>>> - a possibly infinite set of constants (likely to be renamed to
>>> literals, but I'll stick to "constant" for the moment)
>>> - each constant consists of a lexicalValue and a typeURI
>>> - it is written as "lexicalValue"^^typeURI
>>>
>>> Each datatype DT is assigned a value space DT^D, which is just a
>>> nonempty set.
>>
>> Is the implication that DT -> Value space DT^D, one to one?
>>
>> So we have type, DT, DT^D ?
>>
>>> Each constant c is assigned a value c^D, which is just an object
>>> from the union of the value spaces of all datatypes.
>>>
>>>
>>> Thus, a datatype can be thought as a class with a predefined
>>> extension.
>>
>> I'm not sure explaining it this way is helpful - might confuse
>> rather than illuminate.
>>
>>> Note that this definition does not assume any relationship
>>> between the set of supported typeURIs (which determine the
>>> allowed constants) and the set of datatypes (which determine the
>>> allowed
>>> sets of values).
>>
>> I think we should consider calling "typeURI" "lexicalFormURI" to
>> suggest the correct thinking, as people tend to equate "type" and
>> "class". (as with rdf:type)
>>
>> Can we not simplify the above to: There are "Value spaces" and
>> "lexicalFromURI"s. I'm not seeing how having "Datatypes" as an
>> additional concept helps.
>>
>>>
>>> 2. Allowed datatypes
>>> ---------------------
>>>
>>> Comformant OWL 2 implementations would be required to support the
>>> following base datatypes, each of whose value spaces would be
>>> disjoint:
>>
>>> - owl:number - the value space is the set of all real numbers
>>> - xsd:string - the value space is the set of all Unicode strings
>>> in normal form C
>>> - owl:internationalizedString - the value space set is the set of
>>> pairs of the form (string,langTag)
>>> - xsd:hexBinary - the value space is the set of all finite
>>> sequences of octets
>>
>> I'm wondering whether we should simply say: OWL has the following
>> (following your later mail).
>>
>> owl:Number
>> owl:CharacterString
>> owl:BitString
>> owl:Integer
>>
>> We confuse the issue by using the xsd uris to name a different
>> sort of thing (an OWL value space, not an XSD:type)
>>
>>> The following datatype would also be supported in OWL 2:
>>>
>>> - xsd:integer - the value space is the subset of the value space
>>> of owl:number containing all integers
>>
>> See above.
>>
>>> Finally, we might support the following "shortcut" datatypes,
>>> whose value spaces can be defined from the value spaces of the above
>>> mentioned datatypes using facets
>>>
>>> - various xsd:integer derivatives, such as xsd:int and xsd:long
>>> - various xsd:string derivatives, such as xsd:Name
>>
>> In order to keep the design clean, I'd suggest that we define
>> these in the owl namespace. We can connect the xsd types to the
>> owl version.
>>
>> However: The use of e.g. xsd:string in restrictions is the common
>> idiom. I think we should document that some xsd datatypes, when
>> used in a restriction, are understood to mean certain owl value
>> spaces.
>>
>>> 3. Allowed constants
>>> ---------------------
>>>
>>> Conformant OWL 2 implementations are required to support the
>>> following constant types:
>>>
>>> - "nnn"^^xsd:int and all derivatives that fall within xsd:int -
>>> all such constants are to be interpreted as elements of owl:number
>>> - "aaEbb"^^xsd:float - all such constants save for NaN and +-inf
>>> are to be interpreted as elements of owl:number
>>
>> Consider extending owl:number with these constants. We need some
>> interpretation of them if they are to remain intact when part of
>> an OWL file. These are effectively, "promotion" rules.
>>
>>> - "abc"^^xsd:string - interpreted as "abc"
>>
>> as you later suggest, ("abc", null) or ("abc", "") . The latter
>> avoids the issue of what to do about the pattern facted on lang.
>>
>>> - "abc"@langTag - interpreted as a pair ("abc",langTag)
>>>
>>>
>>> 4. Discussion
>>> --------------
>>>
>>> The set of constants is chosen such that implementations don't
>>> need to support numbers with arbitrary precision, which might be
>>> quite cumbersome. In fact, implementations are only required to
>>> support 32 bit integers and single precision floating point numbers.
>>
>> On today's hardware, I would set this to be 64 bit integers or
>> even 128 bit integers, and double precision float. Some machine's
>> don't really have single float hardware, instead rounding from
>> double float.
>>
>>> There are efficient ways to represent these on virtually all
>>> systems.
>>>
>>> The set of datatypes, however, allows one to refer to the sets of
>>> all integers and real numbers. This allows one to specify the
>>> ontology in a way that makes reasoning easy.
>>>
>>> Implementations are free to support other constants as well. Note
>>> that these extensions do not necessarily mean that we need new
>>> datatypes (i.e., new value spaces). For example, an
>>> implementation might choose to support arbitrary precision
>>> numbers via constants of the form "123.03"^^xsd:decimal. Note
>>> that the proposed list of datatypes already contains the
>>> appropriate value space for such constants (i.e., owl:number).
>>
>> I think xsd:decimal should be considered a lexical form of
>> owl:Number.
>>
>>> The open issues are what to do with NaN and +-inf and with date-
>>> time datatypes.
>>
>> In the first case, I suggest above that owl:Number be real+"NaN"+"-
>> INF"+"+INF"
>> I'd also suggest that "-0" and "+0" be considered lexical forms of
>> the number 0.
>>
>> For the date-time datatypes, I wonder whether it would work to
>> define:
>>
>> owl:Time (isomorphic to the reals)
>> owl:TimeZoneTime (also isomorphic to the reals)
>>
>> There is one value space for all the lexical date-times have time
>> zone specified, and another value space for all the lexical date-
>> times. There would be no comparison possible between owl:Time and
>> owl:TimeZoneTime.
>>
>> There would still be work necessary to determine whether the
>> repeating interval types, like monday, are feasible to implement.
>>
>> -Alan
>>
>>>
>>> Regards,
>>>
>>> Boris
>>>
>>>
>>>
>>
>>
>
Received on Wednesday, 9 July 2008 16:11:07 UTC