- From: Gregg Kellogg <gregg@greggkellogg.net>
- Date: Thu, 17 Nov 2022 08:58:44 -0800
- To: Paul Tyson <phtyson@sbcglobal.net>
- Cc: Vladimir Alexiev <vladimir.alexiev@ontotext.com>, Roman Evstifeev <someuniquename@gmail.com>, public-json-ld@w3.org
- Message-Id: <D1467282-F71B-4CC5-9049-A969134261D8@greggkellogg.net>
> 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