- From: Paul Tyson <phtyson@sbcglobal.net>
- Date: Thu, 17 Nov 2022 09:33:38 -0600
- To: Vladimir Alexiev <vladimir.alexiev@ontotext.com>, Roman Evstifeev <someuniquename@gmail.com>
- Cc: public-json-ld@w3.org
- Message-ID: <ccf13eb1-4d54-c6a2-c053-2e2030031ba4@sbcglobal.net>
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