Collection, Ordered Collection vs. rdf:Alt, rdf:Bag, rdf:Seq

I have the feeling that there are few parallels (apart from the fact that they are all collections), or have I not understood something.

If i convert my rdf list to json-ld it looks like that:

{
    "@context": {
    ...
   },
    "@graph": [
        {
            "type": "http://www.w3.org/1999/02/22-rdf-syntax-ns#List",
            "http://www.w3.org/1999/02/22-rdf-syntax-ns#first": {
                "id": "http://localhost:8080/camel/tester/outbox/activity_4efabc24-202b-428a-b5ba-037af83dcd36"
            },
            "http://www.w3.org/1999/02/22-rdf-syntax-ns#rest": {
                "@list": [
                    {
                        "id": "http://localhost:8080/camel/tester/outbox/activity_50be84af-ed78-4530-8f59-90d7b7800c58"
                    },
                    {
                        "id": "http://localhost:8080/camel/tester/outbox/activity_8b901053-116e-42f5-a719-140bd3ee1ce0"
                    },
                    {
                        "id": "http://localhost:8080/camel/tester/outbox/activity_6ab9acec-7bbc-458c-aa6c-9877afde74ce"
                    }
                ]
            }
        },
        {
            "id": "http://localhost:8080/camel/tester/outbox/activity_4efabc24-202b-428a-b5ba-037af83dcd36"
        },
        {
            "id": "http://localhost:8080/camel/tester/outbox/activity_50be84af-ed78-4530-8f59-90d7b7800c58"
        },
        {
            "id": "http://localhost:8080/camel/tester/outbox/activity_6ab9acec-7bbc-458c-aa6c-9877afde74ce"
        },
        {
            "id": "http://localhost:8080/camel/tester/outbox/activity_8b901053-116e-42f5-a719-140bd3ee1ce0"
        }
    ]
}

Does anyone have experience with converting rdf:Alt, rdf:Bag, rdf:Seq to AP collections ?

Thanks Fredy

I find lists in RDF orders of magnitude more complex than arrays, in JSON(-LD)

There’s some docs here

https://json-ld.org/spec/latest/json-ld/#sets-and-lists

iirc, you start with rdf:first, and end with rdf:nil, then you have a linked list of bnodes in the middle

You can also look at the @list keyword in the spec. This can be put in the @context, and then you can use regular arrays in JSON. Activity Streams uses it in places:

    "orderedItems": {
      "@id": "as:items",
      "@type": "@id",
      "@container": "@list"
    }

Personally I avoid this kind of thing in RDF completely and come up with another data structure, e.g. having an index as a predicate.

I’m currently playing with building the collection using SPARQL.
The result is not so bad. Pagination is working. i’m again a little bit confused by the ActivityStreams Specification because of first, last, previous, next.
Because i want to pass the pageSize and the startIndex and then the page count is undefined for me.

Another interesting thing is
"to:talItems": "2", no idea where this comes from, as a turtle it looks good
<https://www.w3.org/ns/activitystreams#totalItems> "2" .

My current result for http://localhost:8080/camel/tester/outbox?pageSize=100&startIndex=3
Its ordered by publishingDate.

    "@graph": [
        {
            "id": "http://localhost:8080/camel/outbox"
        },
        {
            "id": "http://localhost:8080/camel/outbox?pageSize=100&startIndex=3",
            "type": "OrderedCollectionPage",
            "items": [
                {
                    "id": "http://localhost:8080/camel/tester/outbox/activity_50be84af-ed78-4530-8f59-90d7b7800c58",
                    "http://www.w3.org/1999/02/22-rdf-syntax-ns#type": "https://www.w3.org/ns/activitystreams#Create",
                    "as:actor": "http://localhost:8080/camel/tester",
                    "name": "Object(s) 'Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering' created.",
                    "as:published": "2021-12-07T10:14:56.256665Z",
                    "summary": "This activity wraps an object that was created without a surrounding activity."
                },
                {
                    "id": "http://localhost:8080/camel/tester/outbox/activity_6ab9acec-7bbc-458c-aa6c-9877afde74ce",
                    "http://www.w3.org/1999/02/22-rdf-syntax-ns#type": "https://www.w3.org/ns/activitystreams#Create",
                    "as:actor": "http://localhost:8080/camel/tester",
                    "name": "Object(s) 'Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering' created.",
                    "as:published": "2021-12-07T10:09:08.187553Z",
                    "summary": "This activity wraps an object that was created without a surrounding activity."
                }
            ],
            "partOf": "http://localhost:8080/camel/outbox",
            "summary": "outbox of http://localhost:8080/camel/tester pageSize: 100; startIndex: 3",
            "to:talItems": "2"
        },
        {
            "id": "http://localhost:8080/camel/tester/outbox/activity_50be84af-ed78-4530-8f59-90d7b7800c58",
            "http://www.w3.org/1999/02/22-rdf-syntax-ns#type": "https://www.w3.org/ns/activitystreams#Create",
            "as:actor": "http://localhost:8080/camel/tester",
            "name": "Object(s) 'Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering' created.",
            "as:published": "2021-12-07T10:14:56.256665Z",
            "summary": "This activity wraps an object that was created without a surrounding activity."
        },
        {
            "id": "http://localhost:8080/camel/tester/outbox/activity_6ab9acec-7bbc-458c-aa6c-9877afde74ce",
            "http://www.w3.org/1999/02/22-rdf-syntax-ns#type": "https://www.w3.org/ns/activitystreams#Create",
            "as:actor": "http://localhost:8080/camel/tester",
            "name": "Object(s) 'Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering, Teikei Gemeinschaft München Trudering' created.",
            "as:published": "2021-12-07T10:09:08.187553Z",
            "summary": "This activity wraps an object that was created without a surrounding activity."
        }
    ]
}