Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Graph-aliased keywords don't work as containers in JSON-LD 1.1 #536

Open
niklasl opened this issue Jan 15, 2022 · 2 comments
Open

Graph-aliased keywords don't work as containers in JSON-LD 1.1 #536

niklasl opened this issue Jan 15, 2022 · 2 comments

Comments

@niklasl
Copy link
Contributor

niklasl commented Jan 15, 2022

It appears that @graph-aliased keywords don't work as containers in JSON-LD 1.1. Given:

{
  "@context": {
    "@base": "https://example.org/",
    "@vocab": "https://example.org/ns/",
    "entities": {
      "@id": "@graph",
      "@container": "@index"
    }
  },
  "entities": {
    "Q102071": {
      "@type": "item",
      "@id": "Q102071"
    }
  }
}

I'd expect the following:

[
  {
    "@id": "https://example.org/Q102071",
    "@type": [
      "https://example.org/ns/item"
    ],
    "@index": "Q102071"
  }
]

I haven't positively checked that this is a regression from 1.0, but I am quite sure that the intent has always been to support this. Alas, there seems to be no such form in the test suite (in fact, no @graph-aliases at all, to my surprise), otherwise it'd been caught.

This actually works in the JSON-LD 1.1 playground, and in RDFLib.

Crucially though, it does not work according to the JSON-LD 1.1 Expansion Algorithm, where step 13.4 and 13.4.5 creates an expanded value and continues (in 13.4.17), thus bypassing the container processing step at 13.5.

Thus it doesn't work in the faithfully implemented Ruby RDF distiller, nor in TRLD (equally faithfully implemented I hope).

The fix is simple: just exclude @graph in step 13.4 (and thus step 13.4.5 can just be removed). I tried that in the TRLD implementation, and if this is acknowledged, I'd like to fix this in the spec (at least getting it into JSON-LD 1.2).

This appears to work in the compaction algorithm, at least if the expanded graph array is wrapped in a graph object, i.e. given:

{
  "@graph": [
    {
      "@id": "https://example.org/Q102071",
      "@type": [
        "https://example.org/ns/item"
      ],
      "@index": "Q102071"
    }
  ]
}

Combined with the context from the initial example, and fed into compaction unaltered, that will be compacted into the form of that example.

We may want to clarify that the compaction algorithm must ensure that it is thusly wrapped if it is given an array, or at least spell it out that for compaction using graph aliases to work, it needs that form (with an outer graph object) as input.

@gkellogg
Copy link
Member

Good call, not sure why this was not considered originally.

@dlongley
Copy link
Contributor

How this issue gets solved is also important to Verifiable Credentials and "safe mode" or "strict mode" processing. I believe this PR may be related and we will want to ensure a future spec says how to do these things that can be compatible with VCs and "safe mode"/"strict mode" and helps implementations to be in agreement on the behavior.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Future Work
Development

No branches or pull requests

3 participants