Re: type coercion question

> On Nov 17, 2022, at 7:33 AM, Paul Tyson <phtyson@sbcglobal.net> wrote:
> 
> Thank you all for suggestions, but as Vladimir said, I must distinguish by value not context.
> 
> The specific use case is SHACL, and the property is sh:hasValue. The focus node being validated can have any datatype. If I'm expecting a non-native JSON value, the shape would have to written with a local type declaration, like:
> 
> "sh:property": {
>   "sh:path": "ex:foo",
>   "sh:hasValue": {"@type": "http://example.org/yugo" <http://example.org/yugo>}
> }
> 
> This is inconvenient, and not suitable for applying a context to a given json payload.
> 
> I wonder if the WG would consider an extension to the @type syntax, allowing a list of coercion types to try, so one could write a term expansion in the context like:
> 
> 
> "sh:hasValue": {
>   "@type": ["@id","xsd:dateTime"]
> }
> 
> If none of these coercions work, use the best native JSON type conversion. If the context author wants to limit the coercion attempts to just those named, a final token could be added to the list, such as an empty string. In that case, if no type coercion succeeded, an error would be thrown.
> 

I think there’s already a similar issue for this: https://github.com/w3c/json-ld-syntax/issues/362

Gregg
> Regards,
> --Paul
> 
> On 11/17/22 09:07, Vladimir Alexiev wrote:
>> Thanks Roman! Good trick.
>> I've used nested contexts in EPCIS 2, but scoped by class.
>> 
>> That assumes ex:thing4/ex:foo is consistently always the same kind of literal.
>> The way I understood Paul is that ex:foo is to be distinguished by value, not by place of use (context).
>> 
>> On Thu, Nov 17, 2022 at 4:24 PM Roman Evstifeev <someuniquename@gmail.com <mailto:someuniquename@gmail.com>> wrote:
>>> On Thu, 17 Nov 2022 at 06:24, Paul Tyson <phtyson@sbcglobal.net <mailto:phtyson@sbcglobal.net>> wrote:
>>> >
>>> > I have a property that can take any type of RDF term as a value.
>>> >
>>> > {
>>> >      "@context": {
>>> >      "ex": "http://example.org/ns/",
>>> >      },
>>> >      "ex:thing1": {"ex:foo": 1},
>>> >      "ex:thing2": {"ex:foo": "a string"},
>>> >      "ex:thing3": {"ex:foo": "http://example.org/yugo"}
>>> >      "ex:thing4": {"ex:foo": "2022-11-16T21:04:41"}
>>> > }
>>> >
>>> > Is there any way to construct the context to make this come out in RDF like:
>>> >
>>> > _:b0 <http://example.org/ns/thing1> _:b1 .
>>> > _:b0 <http://example.org/ns/thing2> _:b2 .
>>> > _:b0 <http://example.org/ns/thing3> _:b3 .
>>> > _:b0 <http://example.org/ns/thing4> _:b4 .
>>> > _:b1 <http://example.org/ns/foo>
>>> > "1"^^<http://www.w3.org/2001/XMLSchema#integer> .
>>> > _:b2 <http://example.org/ns/foo> "a string" .
>>> > _:b3 <http://example.org/ns/foo> <http://example.org/yugo> .
>>> > _:b4 <http://example.org/ns/foo>
>>> > "2022-11-16T21:04:41"^^<http://www.w3.org/2001/XMLSchema#dateTime> .
>>> >
>>> > Thanks and regards,
>>> > --Paul
>>> >
>>> >
>>> 
>>> You can use property-scoped context:
>>> 
>>> {
>>>      "@context": {
>>>        "ex": "http://example.org/ns/",
>>>        "xsd": "http://www.w3.org/2001/XMLSchema#",
>>>        "ex:thing3": {
>>>          "@context": {
>>>            "ex:foo": {
>>>                "@type": "@id"
>>>            }
>>>          }
>>>        },
>>>        "ex:thing4": {
>>>          "@context": {
>>>            "ex:foo": {
>>>              "@type": "xsd:dateTime"
>>>            }
>>>          }
>>>        }
>>> 
>>>      },
>>>      "ex:thing1": {"ex:foo": 1},
>>>      "ex:thing2": {"ex:foo": "a string"},
>>>      "ex:thing3": {"ex:foo": "http://example.org/yugo"},
>>>      "ex:thing4": {"ex:foo": "2022-11-16T21:04:41"}
>>> }
>>> 
>>> json-ld playground: https://tinyurl.com/dwpf68db
>>> 

Received on Thursday, 17 November 2022 18:02:09 UTC