Re: ISSUE-57: TypedLiteralConverter Failures and Exceptions

Nathan wrote:
> RDFa Working Group Issue Tracker wrote:
>> ISSUE-57: TypedLiteralConverter Failures and Exceptions
>>
>> http://www.w3.org/2010/02/rdfa/track/issues/57
>>
>> Raised by: Nathan Rixham
>> On product:
>> The RDFa API document currently states:
>>
>> "The return value upon conversion failure is being actively discussed 
>> in the RDFa WG. There are proposals to raise exceptions upon 
>> conversion failure, proposals to return tuples containing conversion 
>> success/failure and the converted value, as well as other mechanisms 
>> that would allow the signalling of a conversion failure from the 
>> method to calling code."
>>
>> After implementing it is clear that Exceptions should not be thrown, 
>> and that TypedLiterals *must* always be created, valueOf() 
>> functionality is additional functionality provided by the API, however 
>> this is not a requirement of parsing RDFa Documents, a TypedLiteral 
>> can be created regardless of having TypedLiteral conversion.
>>
>> Another proposal is that failures in conversion are handled the same 
>> as TypedLiterals which have no converter registered.
>>
>> Which raises the issue that we have not defined what valueOf() should 
>> return when no appropriate TypedLiteralConverter is registered.
> 
> I've been thinking about TypedLiteral.valueOf() functionality in more 
> detail, and looking at the implementation, and came to the conclusion 
> that I think it should be removed.

Proposal to resolve ISSUE-57:

(1) Remove TypedLiteral.valueOf()

(2) Change the relevant methods on DataContext to:

interface DataContext {
...
   any                    convertTypedLiteral( in TypedLiteral 
typedliteral );
   TypedLiteralConverter  registerTypeConversion( in DOMString type, in 
TypedLiteralConverter converter );
...
}

convertTypedLiteral
  - typedliteral a TypedLiteral to convert

functionality:
if a TypedLiteralConverter is registered for the .type of the 
typedliteral then try to convert it, if successful return the converted 
type (for instance a Date)
in all other cases (including exceptions) return the TypedLiteral

registerTypeConversion
  - type can be an IRI or a CURIE
  - tlc can be a TypedLiteralConverter or null

functionality:
(remove a converter by passing in null, if a converter exists for the 
type return it):
if type is a curie then resolve it to an iri
let the value of old-converter be null
if a TypedLiteralConverter is already registered for the specified type, 
then set the value of old-converter to be that TypedLiteralConverter
remove all registrations for the specified type
if the value of converter is not null, register the converter for the 
specified type
return old-converter;


(3) If the create** methods are on the same interface (ISSUE-51), then 
change the definition of createTypedLiteral to:

TypedLiteral    createTypedLiteral (in any value, in optional DOMString 
type);

createTypedLiteral
  - value, can be one of the native types for which we've specified a 
converter must be registered (Date, Number types, Boolean) or a DOMString
  - type, required if value is a DOMString

in other words we can allow:

   x.createTypedLiteral(123.45);
   x.createTypedLiteral( new Date() );

Best,

Nathan

Received on Monday, 1 November 2010 10:50:40 UTC