w3c / json-ld-api

JSON-LD 1.1 Processing Algorithms and API Specification
https://w3c.github.io/json-ld-api/
Other
77 stars 31 forks source link

blind spot in RDF to object conversion #555

Open pchampin opened 1 year ago

pchampin commented 1 year ago

I believe that the RDF to object conversion, step 2.4.3, has a blind spot. This is in the case useNativeTypes is used:

if the datatype IRI of value equals xsd:integer or xsd:double and its lexical form is a valid xsd:integer or xsd:double according [XMLSCHEMA11-2], set converted value to the result of converting the lexical form to a JSON number.

The problem is: some valid literals of these datatypes may fail to convert to JSON numbers, e.g. "+INF"^^xsd:double, or very large integers.

The spec is currently silent about that. We should either specify that an error must be raised, or that useNativeType should be ignored in that case, and a regular value object should be generated. I personally prefer the 2nd option.

gkellogg commented 1 year ago

We should probably be using logic from JCS for dividing these different forms.

pchampin commented 1 year ago

Sorry, what do you mean by "JCS"?

gkellogg commented 1 year ago

JSON Canonicalization, which we use when serializing JSON literals

pchampin commented 1 year ago

JSON Canonicalization, which we use when serializing JSON literals

ah... thanks

JCS Appendix D. Dealing with Big Numbers says

numbers that do not have a natural place in the current JSON ecosystem MUST be wrapped using the JSON string type.

This is aligned with my suggestion above: whenever a literal can not be mapped to a JSON number, ignore useNativeType and keep it as a value object with explicit @value (as a string) and @type.

anatoly-scherbakov commented 3 weeks ago

I tried to cover this with a PR: https://github.com/w3c/json-ld-api/pull/619

I don't think I can assign this issue to me though :thinking: