Re: type coercion question

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"}
}

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.

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> wrote:
>
>     On Thu, 17 Nov 2022 at 06:24, Paul Tyson <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 15:33:55 UTC