W3C home > Mailing lists > Public > public-linked-json@w3.org > January 2015

Re: Type coercion to native JSON numbers via JSON-LD API?

From: Dave Longley <dlongley@digitalbazaar.com>
Date: Thu, 15 Jan 2015 18:12:33 -0500
Message-ID: <54B84961.6080304@digitalbazaar.com>
To: public-linked-json@w3.org
CC: Jindřich Mynarz <mynarzjindrich@gmail.com>
On 01/15/2015 04:48 PM, Stian Soiland-Reyes wrote:
> No, I don't believe there is an specified mechanism for that currently.

There is if converting from RDF, see below.

> Probably there should be. Given your context, the
> http://json-ld.org/playground/ seems to keep any incoming JSON numbers
> 42  as the number 42 (even if it is as { "@type": "xsd:integer",
> "@value": 42} ), and any incoming strings "42" as "42".
> I would argue that in this case it should at least consistently end up
> with always the string or always the integer version.

It is consistent in that expansion/compaction won't transform valid JSON
primitives, they are left alone. The expansion and compaction algorithms
don't know anything about the meaning of "xsd:integer". Data types are
opaque to those algorithms. They are, however, dealt with in a minor way
in the to/from RDF conversion algorithms:

If you're converting from RDF and you specify the `use native types`
flag as `true`, then xsd:integers will be converted to native JSON numbers.

>From the spec:

"To ensure lossless round-tripping the Serialize RDF as JSON-LD
algorithm specifies a use native types flag which controls whether RDF
literals with a datatype IRI equal to xsd:integer, xsd:double, or
xsd:boolean are converted to their JSON-native counterparts. If the use
native types flag is set to false, all literals remain in their original
string representation."


> Could it be the job of a JSON-LD Frame to specify this? Currently it
> can't say much about the values, e.g. if it should be expanded with
> @value or not.
> On 15 January 2015 at 16:55, Jindřich Mynarz <mynarzjindrich@gmail.com> wrote:
>> Hi,
>> is it possible to use JSON-LD API to coerce number-like strings into native
>> JSON numbers (http://www.w3.org/TR/json-ld/#dfn-number)? The section of the
>> specification on type coercion (http://www.w3.org/TR/json-ld/#type-coercion)
>> seems to suggest that this is possible, but so far I haven't realized how.
>> For example, is it possible to coerce the values of the "age" attribute to
>> numbers in the following JSON-LD?
>> {
>>   "@context": {
>>     "@vocab": "http://xmlns.com/foaf/0.1/",
>>     "xsd": "http://www.w3.org/2001/XMLSchema#",
>>     "age": { "@type": "xsd:integer" }
>>   },
>>   "age": "42"
>> }
>> Setting a numeric datatype (such as xsd:integer) for the property via @type
>> in @context doesn't do the job.
>> Is there a way to go about this?
>> Best,
>> Jindřich
>> --
>> http://mynarz.net/#jindrich

Dave Longley
Digital Bazaar, Inc.
Received on Thursday, 15 January 2015 23:12:58 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 16:18:43 UTC