- 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