List of lists?
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
- (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?
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.
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:
- string,
- number,
- true,
- false,
- null,
- node object,
- value object, or
- an array of zero or more of the above possibilities
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.