json-ld-syntax icon indicating copy to clipboard operation
json-ld-syntax copied to clipboard

List of lists?

Open puckipedia opened this issue 1 year ago • 3 comments

Section 4.3.1 of the JSON-LD 1.1 spec suggests that lists of lists are "fully supported", and this is also what the API implements. However, this section is non-normative, and what I believe to be the normative text for list objects and set objects suggests that it is, in fact, not possible to nest lists or sets in other lists or sets. What's going on here?

puckipedia avatar Feb 17 '24 18:02 puckipedia

@puckipedia

  • (It's better to read https://w3c.github.io/json-ld-syntax/#lists-and-sets, though in this case I think there's no difference).
  • Can you elaborate "suggests that it is, in fact, not possible to nest"? The last bullet says "an array of zero or more of the above possibilities", so I think this allows nested lists?

VladimirAlexiev avatar Mar 27 '24 07:03 VladimirAlexiev

No, it doesn't; as that bullet ("an array of zero or more of the above possibilities") allows the JSON-LD to contain both, say:

{
    "@list": "foo"
}

and

{
    "@list": ["bar", "baz"]
}

but, note the conspicuous lack of list objects and set objects that may be contained inside list and set objects. (and no, list and set objects aren't subsets of value ar node objects, I checked.) This also doesn't allow for arrays of arrays of e.g. value objects, as it says "of the above possibilities", which excludes itself.

puckipedia avatar Mar 27 '24 08:03 puckipedia

I think @puckipedia is right. A list within a list looks like:

{
  "http://example.com/list-of-lists": {
    "@list": [
      { "@list": ["foo", "bar"] },
      { "@list": ["baz", "quux"] }
    ]
  }
}

The playground accepts this as one would expect from intuition and the non-normative text. But as @puckipedia says, the normative text doesn't appear to account for it. It says a list of set can contain:

A list or a set is neither a node object nor a value object. The last bullet supports actually putting more than one thing in the (top-level) list or set, not nesting them.

Peeja avatar Aug 23 '24 16:08 Peeja