- From: Markus Lanthaler <markus.lanthaler@gmx.net>
- Date: Thu, 2 Oct 2014 13:43:45 +0200
- To: <public-hydra@w3.org>
On 1 Okt 2014 at 13:56, ☮ elf Pavlik ☮ wrote: > On 04/25/2014 07:29 PM, Markus Lanthaler wrote: >> On Friday, April 25, 2014 6:34 PM, Ruben Verborgh wrote: >>>> To illustrate, we might return something like the following: >>>> >>>> </collection> a hydra:PagedCollection; >>>> hydra:member <1>, <2>, ...; >>>> hydra:nextPage </collection?page=2>; >>>> hydra:pageOf </collection#dataset> . >>>> <collection#dataset> a hydra:Collection; >>>> hydra:totalItems 243; >>>> hydra:itemsPerPage 10; >>>> hydra:firstPage </collection>; >>>> hydra:lastPage </collection?page=24> . >>>> >>>> I think this is pretty close to what you originally proposed. This does >>>> allow for a certain >>> amount of semantic purity, but practically doesn't do more for me than >>> just collapsing the dataset properties down to the PagedCollection (or >>> CollectionPage, if you >> prefer). >> >> Yeah. I agree. Let me convert this to JSON-LD because I think that will be >> easier for a lot of people on this list to understand and evaluate. Here's >> Gregg's Turtle converted 1:1, the first page is the "central" resource: >> >> { >> "@id": "/collection", >> "@type": "Page(dCollection)", >> "member": [ "1", "2", "..." ], >> "nextPage": /collection?page=2", >> "pageOf": { >> "@id": "/collection#dataset", >> "@type": "Collection", >> "totalItems": 243, >> "itemsPerPage": 10, >> "firstPage": "/collection", >> "lastPage": "/collection?page=24" >> } >> } >> This has the advantage that the representations of all pages would look more >> or less the same. The downside is, that you would have to link to >> /collection#dataset instead of just /collection. So it would be >> >> { >> "@id": "markus", >> "knows": "/friend-collection#dataset" >> } >> An alternative serialization could put the collection itself at the center >> (please note that I changed the resource identifiers): >> >> { >> "@id": "/collection", >> "@type": "Collection", >> "totalItems": 243, >> "itemsPerPage": 10, >> "firstPage": { >> "@id": "/collection#page", >> "@type": "Page(dCollection)", >> "member": [ "1", "2", "..." ], >> "nextPage": /collection?page=2", >> "pageOf": "/collection" >> }, >> "lastPage": "/collection?page=24" >> } >> The disadvantage here is that while it looks nice for the first page, it >> kind of breaks down for all other pages. > > how about: > > * PagedCollection SHOULD embed it's first Page > > { > "@id": "/collection", > "@type": "PagedCollection", > "totalItems": 243, > "itemsPerPage": 10, > "firstPage": { > "@id": "/collection?page=1", > "@type": "Page", > "member": [ "1", "2", "..." ], > "nextPage": /collection?page=2", > "pageOf": "/collection" > }, > "lastPage": "/collection?page=24" > } > * Page SHOULD embed PagedCollection it belongs to > > { > "@id": "/collection?page=1", > "@type": "Page", > "member": [ "1", "2", "..." ], > "nextPage": /collection?page=2", > "pageOf": { > "@id": "/collection", > "@type": "PagedCollection", > "totalItems": 243, > "firstPage": "/collection?page=2", > "lastPage": "/collection?page=24" > "itemsPerPage": 10 > } > } > > using PagedCollection (subclasOf: Collection) for fristPage and itemsPerPage This is certainly an option as well but it has the same "issue" as the one I outlined above. The structure etc. changes quite a bit when you go from non-paged collection to a paged collection. In HTML, Atom, and most JSON-based Web APIs I've seen the structure stays exactly the same... only "next", "last" etc. links are added. Let's try to finish the IriTemplate design first (I'll re-read the discussions we had and send out a mail tonight or tomorrow) and then address paged collections. How does that sound? Cheers, Markus -- Markus Lanthaler @markuslanthaler
Received on Thursday, 2 October 2014 11:44:15 UTC