- From: Filip Kolarik <filip26@gmail.com>
- Date: Mon, 16 Sep 2024 23:12:46 +0200
- To: Gregg Kellogg <gregg@greggkellogg.net>
- Cc: RDF-star WG <public-rdf-star-wg@w3.org>, JSON-LD Working Group <public-json-ld-wg@w3.org>
- Message-ID: <CADRK2_M+4f_a4szRQdxjKs_+n1UZZU9H=391siRox=DzmRqAVw@mail.gmail.com>
Thanks. Making the @annotation.id optional would help with adoption, I
guess it can be generated.
Details to be considered:
* what if an @annotation is used on a graph object?
The answer could depend on @graph/dataset interpretation (not necessarily
equal to RDF dataset definition). If the dataset is something substantial
then adding annotation to the @graph could be interpreted the same way as
adding it to a node. If not, then adding annotation looks like metadata of
metadata.
What about @annotation inside @annotation, does it make sense?
On Mon, Sep 16, 2024 at 10:53 PM Gregg Kellogg <gregg@greggkellogg.net>
wrote:
> On Sep 16, 2024, at 1:18 PM, Filip Kolarik <filip26@gmail.com> wrote:
>
> Hi Gregg,
> thank you for the examples. I like the compactness of @graph annotations
> and I wonder how to annotate a record, i.e. a group of statements
> represented as a JSON object.
>
> Would something like this be possible?
>
> {
> @context: ...
> @id: ...
> firstName: ..
> lastName: ..
> @annotation: {
> created:
> source:
> }
> }
>
> This should result in a list of statements (created, source,) about
> statements (@id firstName, .., @id lastName ...,).
>
>
> This is the most likely way that annotations would be implemented in
> JSON-LD-star, but the details need to be worked out. RDF 1.2 Turtle only
> allows annotations of a single triple, as the annotation pattern ( `{| …
> |}` can appear after an object production. JSON-LD doesn’t have such
> constraints, but this could be controversial.
>
> If @annotation is used in a node object having multiple properties, then
> the most natural interpretations is that the triples associated with that
> node would each be reified using a common reifier, and that reifier would
> be used to annotate each triple. Given something like you suggested, it
> might be treated as the following:
>
> {
> “@context”: …,
> “@id”: “id”,
> “firstName”: “Fred”,
> “lastName”: “Flintstone,
> “@annotation”: {
> “@id”: “reifier”,
> “created”: “1960-09-30”,
> “source: “HannaBarbara”
> }
> }
>
> This corresponds to the following Turtle.
>
> :id :firstName “Fred” ~ :reifier {| :created “1960-09-30”; :source
> :HannaBarbara |};
> :lastName “Flintstone” ~ :reifier .
>
> Details to be considered:
>
> * what if an @annotation is used on a graph object?
>
> Gregg
>
> Best,
> Filip
>
>
>
>
> On Mon, Sep 16, 2024 at 2:47 AM Gregg Kellogg <gregg@greggkellogg.net>
> wrote:
>
>> A follow on to this, with some hypothetical multi-statement reifiers
>> acting like graphs. Consider JSON-LD Example 115 [1] about making
>> statements about a graph.
>>
>> {
>> "@context": {
>> "generatedAt": {
>> "@id": "http://www.w3.org/ns/prov#generatedAtTime",
>> "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
>> },
>> "Person": "http://xmlns.com/foaf/0.1/Person",
>> "name": "http://xmlns.com/foaf/0.1/name",
>> "knows": {"@id": "http://xmlns.com/foaf/0.1/knows", "@type": "@id"}
>> },
>> "@id": "http://example.org/foaf-graph",
>> "generatedAt": "2012-04-09T00:00:00",
>> "@graph": [
>> {
>> "@id": "http://manu.sporny.org/about#manu",
>> "@type": "Person",
>> "name": "Manu Sporny",
>> "knows": "https://greggkellogg.net/foaf#me"
>> }, {
>> "@id": "https://greggkellogg.net/foaf#me",
>> "@type": "Person",
>> "name": "Gregg Kellogg",
>> "knows": "http://manu.sporny.org/about#manu"
>> }
>> ]
>> }
>>
>> This results in the following TriG:
>>
>> @prefix foaf: <http://xmlns.com/foaf/0.1/> .
>> @prefix prov: <http://www.w3.org/ns/prov#> .
>> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
>> @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
>>
>> <http://example.org/foaf-graph> prov:generatedAtTime "2012-04-09T00:00:00"^^xsd:dateTime .
>>
>> <http://example.org/foaf-graph> {
>> <http://manu.sporny.org/about#manu> a foaf:Person;
>> foaf:name "Manu Sporny";
>> foaf:knows <https://greggkellogg.net/foaf#me> .
>>
>> <https://greggkellogg.net/foaf#me> a foaf:Person;
>> foaf:name "Gregg Kellogg";
>> foaf:knows <http://manu.sporny.org/about#manu> .
>> }
>>
>> If you were to use @reifier instead of @graph, you’d get something like
>> the following Turtle:
>>
>> @prefix foaf: <http://xmlns.com/foaf/0.1/> .
>> @prefix prov: <http://www.w3.org/ns/prov#> .
>> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
>> @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
>>
>> <http://example.org/foaf-graph> prov:generatedAtTime "2012-04-09T00:00:00"^^xsd:dateTime;
>> rdf:reifies <<( <http://manu.sporny.org/about#manu> a foaf:Person )>>,
>> <<( <http://manu.sporny.org/about#manu> foaf:name “Manu Sporny” )>>, <<( <http://manu.sporny.org/about#manu> foaf:knows <https://greggkellogg.net/foaf#me> )>>, <<( <https://greggkellogg.net/foaf#me> a foaf:Person )>>, <<( <https://greggkellogg.net/foaf#me> foaf:name “Gregg Kellogg” )>>, <<( <https://greggkellogg.net/foaf#me> foaf:knows <http://manu.sporny.org/about#manu> )>> .
>>
>> Gregg Kellogg
>> gregg@greggkellogg.net
>>
>> [1] https://www.w3.org/TR/json-ld11/
>>
>> On Sep 14, 2024, at 1:13 PM, Gregg Kellogg <gregg@greggkellogg.net>
>> wrote:
>>
>> The JSON-LD CG (specifically, Pierre-Antoine, Niklas and myself) started
>> a draft on JSON-LD-star [1] in 2020. Since then, the target has changed, so
>> we’ve created an issue to consider how this might adapt to Triple Terms,
>> Reifying Triples, and Annotations [2].
>>
>> Basically, the idea is to add three new keywords to JSON-LD, @reifies,
>> @triple, and @annotation. JSON-LD encodes RDF iin JSON using Node Objects,
>> which can represent a subject/identifier, @type and properties based on
>> key/value entries in a map. This proposal uses @reifies, @triple, and
>> @annotation as special properties to encode triple terms.
>>
>> At the most fundamental level, @triple is intended to encode a single
>> triple with an @id and a single-valued property.
>>
>> {
>> "@context": {
>> "@base": "http://example.org/",
>> "@vocab": "http://example.org/",
>> "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
>> },
>> "rdf:reifies": {
>> "@triple": {
>> "@id": "bob",
>> "age": 42
>> }
>> },
>> "certainty": 0.8
>> }
>>
>> This would be equivalent to the following Turtle:
>>
>> BASE <http://example.org/>
>> PREFIX : <http://example.org/>
>> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#”>
>>
>> [ rdf:reifies <<( :bob :age 42 ))> ]; :certainty: 0.8 .
>>
>> In this case, since there is no explicit @id at the top level, a blank
>> node is generated, which is used as the reifier.
>>
>> The @reifies keyword can be used to compact this, and holds the
>> potentially for reifying more than one triple:
>>
>> {
>> "@context": {
>> "@base": "http://example.org/",
>> "@vocab": "http://example.org/",
>> "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
>> },
>> “@id”: “reifier”,
>> "@reifies": {
>> "@id": "bob",
>> "age": 42
>> },
>> "certainty": 0.8
>> }
>>
>> The example shows a single triple, but in principle, @reifies could take
>> an array of objects, each with a different @id, and each object may have
>> one or more properties; each of these could turn into a separate triple
>> term referenced by the same reifier. This perticular example uses an
>> expicit reifier, so the resulting Turtle would be:
>>
>> BASE <http://example.org/>
>> PREFIX : <http://example.org/>
>> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#”>
>>
>> :reifier rdf:reifies <<( :bob :age 42 ))>; :certainty: 0.8 .
>>
>> It’s an open question if downstream relationships would also be reified;
>> they’re not in Turtle.
>>
>> The annotation syntax is similar to Turtle:
>>
>> {
>> "@context": {
>> "@base": "http://example.org/",
>> "@vocab": "http://example.org/"
>> },
>> "@id": "bob",
>> "age": {
>> "@value": 42,
>> "@annotation": {
>> "@id": "_:anno",
>> "certainty": 0.8
>> }
>> }
>> }
>>
>> In this case, the annotation may have it’s own reifier assigned (here ’s
>> _:anno), or one can be assigned automatically. This would be equivalent to
>> the following Turtle:
>>
>> :bob :age 42 ~ _:anno {| :certainty 8.0E-1 |} .
>>
>> Note that in the Reification example, the @refiies keyword acts much like
>> @graph. If it were restated as follows, it would use the named graph
>> syntax, which is common in Verifiable Claims.
>>
>> {
>> "@context": {
>> "@base": "http://example.org/",
>> "@vocab": "http://example.org/",
>> "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>> },
>> "@id": "reifier",
>> "@graph": {
>> "@id": "bob",
>> "age": 42
>> },
>> "certainty": 0.8
>> }
>>
>> This results in the following TriG.
>>
>> BASE <http://example.org/>
>> PREFIX : <http://example.org/>
>> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#”>
>> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> .
>>
>> :reifier :certainty 8.0E-1 .
>>
>> :reifier {
>> :bob :age 42 .
>> }
>>
>> This suggests that there may be a way to describe named graphs using
>> reification.
>>
>> Gregg Kellogg
>> gregg@greggkellogg.net
>>
>> [1] https://json-ld.github.io/json-ld-star/
>> [2] https://github.com/json-ld/json-ld-star/issues/49
>>
>>
>>
>
Received on Monday, 16 September 2024 21:13:01 UTC