W3C home > Mailing lists > Public > public-rdf-comments@w3.org > May 2014

RE: JSON-LD 1.0 - multiple values? [SEC=UNCLASSIFIED]

From: Markus Lanthaler <markus.lanthaler@gmx.net>
Date: Sat, 10 May 2014 14:29:57 +0200
To: "'Paul Murray'" <pmurray@anbg.gov.au>, <public-rdf-comments@w3.org>
Message-ID: <024301cf6c4b$8fbc67f0$af3537d0$@gmx.net>
Hi Paul,

Thanks for your feedback. Comments inline below.

On Thursday, May 08, 2014 6:34 AM, Paul Murray wrote:
> I am having some difficulty navigating the standard with respect to an
> object having multiple values for the same predicate:
> <rdf:Description rdf:about="#myObject">
>   <rdfs:seeAlso rdf:resource="#anotherObject1"/>
>   <rdfs:seeAlso rdf:resource="#anotherObject2"/>
> </rdf:Description>
> After looking at the JSON-LD 1.0 Processing Algorithms and API, I have
> managed to work out that to do mutilple values for a predicate, you
> put them in an array. It's only if the expanded type of a key has
> @container that it's not treated as multiple values - it's treated as
> an RDF Collection.
> It would be better if this was stated a bit more clearly in the main
> document - JSON-LD 1.0. The first mention of arrays in 3.1 "general
> terminology" gave me the impression that arrays are always rdf
> collections - it refers you to 6.11 Sets and Lists. I don't see
> anything up front to the effect that this only applies when there's a
> @container tag. None of the examples demonstrate this.

Well, it says explicitly that 

   "In JSON, an array is an ordered sequence of zero or more values. While
    JSON-LD uses the same array representation as JSON, the collection is
    unordered by default. While order is preserved in regular JSON arrays,
    it is not in regular JSON-LD arrays unless specifically defined (see
    section 6.11 Sets and Lists)."

If you click on that link to section 6.11 you get straight to "Example 42:
Multiple values with no inherent order". It then goes on to explain how
lists are expressed (Example 44: An ordered collection of values in JSON-LD,
Example 45: Specifying that a collection is ordered in the context).

> It would be good for there to be a section that explains that
> {
>   "@id": "#myObject",
>   "@context": {
>     "bar": { @container =  @set }
>   },
>   "foo": [ {"@id"="a"},{"@id"="b"},{"@id"="c"} ],
>   "bar": [ {"@id"="a"},{"@id"="b"},{"@id"="c"} ]
> }
> means
> <rdf:Description rdf:about="#myObject">
>   <foo rdf:resource="a"/>
>   <foo rdf:resource="b"/>
>   <foo rdf:resource="c"/>
>   <bar rdf:parseType="Container">
>     <rdf:Description rdf:about="a"/>
>     <rdf:Description rdf:about="b"/>
>     <rdf:Description rdf:about="c"/>
>   </bar>
> </rdf:Description>

No, that's not true. "foo" and "bar" are completely equivalent in this case.
The only purpose of @set is to ensure that also sets consisting of just a
simple item remain arrays when compacting a JSON-LD document. Also that is
described in said section:

   "While @list is used to describe ordered lists, the @set keyword is
    used to describe unordered sets. The use of @set in the body of a
    JSON-LD document is optimized away when processing the document, as it
    is just syntactic sugar. However, @set is helpful when used within the
    context of a document. Values of terms associated with an @set or
    @list container are always represented in the form of an array, even
    if there is just a single value that would otherwise be optimized to a
    non-array form in compact form (see section 6.18 Compacted Document
    Form). This makes post-processing of JSON-LD documents easier as the
    data is always in array form, even if the array only contains a single

Have a look at the JSON-LD playground to see how things like these are
translated to triples.


Markus Lanthaler
Received on Saturday, 10 May 2014 12:30:32 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 20:29:59 UTC