- From: Robert Sanderson <azaroth42@gmail.com>
- Date: Thu, 26 Oct 2017 12:31:20 -0700
- To: Christopher Johnson <chjohnson39@gmail.com>
- Cc: Gregg Kellogg <gregg@greggkellogg.net>, Martynas Jusevičius <martynas@atomgraph.com>, Linked JSON <public-linked-json@w3.org>
- Message-ID: <CABevsUGnA4pT-8dsLug-RnR2ZYtvu_y6fsx4gUb7dQvHQtX1Xw@mail.gmail.com>
A context document without any graph is absolutely valid JSON-LD and thus can be served with the JSON-LD media type. You process it and get zero triples, but it's still a valid serialization of the empty graph. In terms of LDP, if you want to manage the context as a separate *document* then yes, you need to manage it as a LDP-NR. Rob On Thu, Oct 26, 2017 at 11:14 AM, Christopher Johnson <chjohnson39@gmail.com > wrote: > By "processing document", I mean only an @context or frame that is served > without a graph body via HTTP. i.e. analogous to "schema". > > The server-side processing from and to RDF is facilitated by "localized" > persistence of schema as LDP-NRs, so that it does not have to depend on an > HTTP client to dereference potentially unknown/threatening entities > remotely. Of course, a client can opt to process the document itself if it > does not issue the Accept header and just fetches the graph as RDF. > However, as mentioned, the prevailing trend seems to be have the server do > the processing to simply the client interaction model. > > Christopher Johnson > Scientific Associate > Universitätsbibliothek Leipzig > > On 26 October 2017 at 19:31, Gregg Kellogg <gregg@greggkellogg.net> wrote: > >> On Oct 26, 2017, at 1:04 PM, Christopher Johnson <chjohnson39@gmail.com> >> wrote: >> >> Hi list, >> >> Following up on this: >> In a discussion regarding JSON-LD processing documents in relation to an >> implementation of LDP, a few specification points have been addressed: >> >> 1. Since JSON-LD processing documents cannot be deserialized to RDF (and >> are therefore not JSON-LD documents), they *MUST* be served with a >> Content-Type application/json. >> >> >> Can you clarify this? If the JSON-LD processing document is JSON-LD, it >> would include an @context, which would allow it to be interpreted as RDF, >> no? application/json can serve a JSON document that can be interpreted as >> JSON-LD by linking to a context, or it can return a JSON-LD document >> containing @context (or both). Am I missing something? >> >> No clear what a “processing document” is in relation to LDP. >> >> 2. As application/json Content-Type, JSON-LD processing documents can >> only be persisted in LDP as rdf:type http://www.w3.org/ns/ >> ldp#NonRDFSource . >> >> >> This wouldn’t seem to restrict a client’s ability to process it as >> JSON-LD, though, would it? >> >> Gregg >> >> 3. A (recommended) HTTP header for clients who need to identify a >> processing document to a specification compliant LDP implementation *MAY* be >> Accept: application/ld+json; profile="http://example.org/context.json >> <http://www.google.com/url?q=http%3A%2F%2Fexample.org%2Fcontext.json&sa=D&sntz=1&usg=AFQjCNGVZtpiz4NkamqiB3uatpw9ZmXeyw> >> " >> >> Christopher Johnson >> Scientific Associate >> Universitätsbibliothek Leipzig >> >> On 23 October 2017 at 00:59, Gregg Kellogg <gregg@greggkellogg.net> >> wrote: >> >>> On Oct 22, 2017, at 11:58 AM, Martynas Jusevičius < >>> martynas@atomgraph.com> wrote: >>> >>> Why should LDP be concerned with any specific serialization? >>> >>> >>> I think the concern is likely captured in issue #491. A context cache >>> isn’t really something the spec needs to handle explicitly, as it already >>> provides the means to specify an alternative document loader, with which a >>> client could implement a context cache. >>> >>> Gregg >>> >>> On Sun, 22 Oct 2017 at 20.44, Gregg Kellogg <gregg@greggkellogg.net> >>> wrote: >>> >>>> On Oct 21, 2017, at 8:49 PM, Christopher Johnson <chjohnson39@gmail.com> >>>> wrote: >>>> >>>> Hi, >>>> >>>> Thanks for the reply.. jsonld-java does not execute the remote-doc >>>> tests, yet. Interesting thing about the 0009 test is that the Link >>>> references a non-HTTP document. Processing Link headers is not that easy, >>>> but I would assume that the test client should also try to dereference the >>>> Link Header using an HTTP client. I will check how jsonld.js does this. >>>> >>>> >>>> It is HTTP, but should be HTTPS, I’ll update the .htaccess file that >>>> sets this. However, it should redirect and work anyway. >>>> >>>> The rational is buried in the GitHub issue tracker, but as I recall, >>>>> application/ld+json is intended to represent a JSON-LD document that can be >>>>> fully interpreted based on its content, rather than rely on out-of-band >>>>> information. This allows the document to be used outside of it’s HTTP >>>>> context (URI base issues aside). >>>> >>>> >>>> By "URI base issues", I assume that you mean when @context is >>>> referenced with an IRI in a document. Perhaps, this form and also the >>>> JSON-LD profiles that do not include context (i.e. >>>> http://www.w3.org/ns/json-ld#expanded) should be mentioned in the spec >>>> as exclusions to the #context constraint if these are intended to also be >>>> served as application/ld+json. >>>> >>>> >>>> By “URI base issues”, I mean the resolution of non-absolute >>>> document-relative IRIs; but, this is a common issue among any format that >>>> uses relative IRIs where the document is used outside of a scheme that can >>>> be used to determine the base IRI (URL). Implementations may provide a >>>> means of setting this through options. If the `@context` uses a relative >>>> IRI, it will have the same issue. >>>> >>>> However, the spec mostly is concerned with JSON(-LD) documents served >>>> over HTTP(S); certainly when the Link header is involved. >>>> >>>> The concern that I would like to address relates primarily with the >>>> "HTTP context" dependency that you indicate. If a client depends on an >>>> processed document format (e.g. framed or compacted) and the @context or >>>> frame is only served by HTTP, then any client-side JSON-LD processing >>>> (required when a document is served in a non-expected format like RDF or >>>> JSON-LD expanded) requires some hypermedia mechanism whereby these >>>> dependencies can be dereferenced and validated *before* deserialization. >>>> >>>> >>>> >>>> You can also specify the context through the API (both for expansion >>>> and compaction). Same with the frame. >>>> >>>> If dependencies are provided outside the document envelope (Link header >>>> or API option), you can certainly do this. If inside the document, then you >>>> need to deserialize to find the references (consider an @context embedded >>>> within some object). >>>> >>>> An undefined point is how an LDP server can persist @context in RDF for >>>> a particular document graph or document collection. This seems to be >>>> related to a the client expectation of a particular document format that >>>> can only be provided by an remote reference (z.B. the "HTTP context"). A >>>> client could issue some form of negotiated "Accept-Processing-Document" >>>> request, and the server could respond with an "processing document" IRI, >>>> (but only if it had persisted it) … >>>> >>>> >>>> There isn’t a way to represent a context in RDF, per-se, other than >>>> when serialized as JSON-LD which includes a top-level @context. >>>> >>>> These seem like reasonable concerns, however, but perhaps they should >>>> be considered in LDP. At most, I could see the API including some form of >>>> @context lookup hash that would allow an implementation to look for context >>>> references that are in this hash and use them rather than perform a >>>> dereference. >>>> >>>> Furthermore, it seems then that an "HTTP context" is a actually a >>>> dependency for client-side processing of the document , and could be >>>> serviced similarly to other compile time package dependency managers (e.g. >>>> Maven Central, npm, etc.). This frees the producer from having to provide >>>> custom headers for every possible document processing relation. When >>>> deserializing from JSON-LD, the producer could persist a context hash with >>>> the graph that pointed to a package, and let the client do the rest. For >>>> LDP implementations, where the data can be serialized dynamically from RDF, >>>> the client does have the potential to declare profile preferences, though I >>>> am not sure why it would if it were doing the processing. The protocol >>>> regarding negotiation of JSON-LD processing options is undefined at the >>>> moment, though this is yet another "feature" that could be considered for >>>> server-side negotiated processing. >>>> >>>> >>>> If the server maintains such a cache, then presumably it could be >>>> included in a JSON-LD serialization when serialized. It’s similar to prefix >>>> management for Turtle, where the service may have a configured set of >>>> prefixes it uses when serializing resources. >>>> >>>> There is also an open-issue to allow the client to request (#491) [1], >>>> which could also be used for specifying a context the service should use >>>> when serializing compacted/framed JSON-LD (presumably, subject to >>>> white/black listing on the server side). >>>> >>>> It seems a gray area as to where the JSON-LD processing *should* occur. >>>> In writing this, I have convinced myself that a clean solution is to have >>>> the producer provide expanded or RDF with some externally defined reference >>>> to processing options and context dependencies and let the client do the >>>> processing into its desired format. No need for negotiation of >>>> preferences! However, "tailored JSON serialization" is generally what some >>>> clients expect, though this level of service certainly has a cost in >>>> complexity for the producer. >>>> >>>> >>>> The JSON-LD spec was originally written from the perspective that a >>>> client may apply algorithms to the received JSON-LD to put it in the most >>>> convenient form for local processing, but I think that, in actuality, it’s >>>> more common for clients to work with the results the server sends directly, >>>> thus the need for additional request profile information (tying us further >>>> to HTTP(S)). >>>> >>>> This is a complicated enough issue that we might consider creating an >>>> ad-hoc conference call to discuss in more detail, or perhaps piggy-back on >>>> some existing LDP call (if such exists). >>>> >>>> Gregg >>>> >>>> [1] https://github.com/json-ld/json-ld.org/issues/491 >>>> >>>> Christopher Johnson >>>> Scientific Associate >>>> Universitätsbibliothek Leipzig >>>> >>>> On 19 October 2017 at 19:03, Gregg Kellogg <gregg@greggkellogg.net> >>>> wrote: >>>> >>>> On Oct 17, 2017, at 8:29 PM, Christopher Johnson <chjohnson39@gmail.com> >>>>> wrote: >>>>> >>>>> Hi list, >>>>> >>>>> In am writing tests and possibly a >>>>> n >>>>> async document loader implementation for jsonld-java that could check >>>>> Content-Type and Link headers before fetching. The current one does not. >>>>> >>>>> >>>>> There are tests for this in the JSON-LD test suite, specifically >>>>> remote-doc-0009-0011. >>>>> >>>>> > curl -I https://json-ld.org/test-suite/tests/remote-doc-0009-in.json >>>>> ld >>>>> HTTP/1.1 200 OK >>>>> Accept-Ranges: bytes >>>>> Access-Control-Allow-Origin: * >>>>> Content-Length: 77 >>>>> Content-Type: application/ld+json >>>>> Date: Thu, 19 Oct 2017 16:54:08 GMT >>>>> Etag: "20d78-4d-4e582e01c8079" >>>>> Last-Modified: Tue, 03 Sep 2013 23:16:15 GMT >>>>> Link: <remote-doc-0009-context.jsonld>; rel="http://www.w3.org/ns/json >>>>> -ld#context" >>>>> Server: Apache/2.2.22 (Ubuntu) >>>>> Vary: Accept-Encoding >>>>> >>>>> I would like >>>>> to >>>>> research and find actual examples where the JSON-LD specification >>>>> about the Interpretation requirement has been observed.. Anyone know a >>>>> site that serve >>>>> s >>>>> Content-Type application/json with a Link header that provides a " >>>>> http://www.w3.org/ns/json-ld#context" relation? >>>>> >>>>> Also could some >>>>> one >>>>> please explain why application/ld+json is forbidden to provide an >>>>> #context relation with a Link Header? >>>>> >>>>> >>>>> The rational is buried in the GitHub issue tracker, but as I recall, >>>>> application/ld+json is intended to represent a JSON-LD document that can be >>>>> fully interpreted based on its content, rather than rely on out-of-band >>>>> information. This allows the document to be used outside of it’s HTTP >>>>> context (URI base issues aside). >>>>> >>>>> Is an #context relation (if served as application/ld+json) allowed to >>>>> specify a http://www.w3.org/ns/json-ld profile? >>>>> >>>>> >>>>> I think there’s a test for this, where it is specifically ignored >>>>> (0009). >>>>> >>>>> Or could a non http://www..w3.org/ns/json-ld >>>>> <http://www.w3.org/ns/json-ld> Content-Type profile be served as >>>>> application/json and provide a secondary #context relation if it were >>>>> itself an #context ? >>>>> >>>>> >>>>> Need a more specific example of this. >>>>> >>>>> Should the document loader check (and >>>>> subsequently >>>>> dereference the relations) if "second-step" remote documents provide >>>>> Link and/or Content-Type profile? Should there be a processing "order of >>>>> precedence”? >>>>> >>>>> >>>>> The remote-doc test manifests does have some redirect logic, but >>>>> you’d need to look more specifically to see if it addresses what you’re >>>>> concerned about; we can always add more tests. https://json-ld.org/tes >>>>> t-suite/tests/remote-doc-manifest.jsonld. >>>>> >>>>> Just trying to understand required hypermedia options and possible use >>>>> cases. >>>>> >>>>> >>>>> Happy to help, also you can chat on Giiter or IRC. >>>>> >>>>> Gregg >>>>> >>>> Thanks, >>>>> Christopher Johnson >>>>> Scientific Associate >>>>> Universitätsbibliothek Leipzig >>>>> >>>>> [1] https://stackoverflow.com/questions/39551829/usage-for-profi >>>>> le-parameter-for-json-ld-requests >>>>> [2] https://json-ld.org/spec/latest/json-ld/#interpreting-json-a >>>>> s-json-ld >>>>> [3] https://github.com/IIIF/api/issues/1066 >>>>> >>>>> [4] https://github.com/ProfileNegotiation/I-D-Accept--Schema >>>>> <https://github.com/ProfileNegotiation/I-D-Accept--Schema%E2%80%8B> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>> >>>> >>> >> >> > -- Rob Sanderson Semantic Architect The Getty Trust Los Angeles, CA 90049
Received on Thursday, 26 October 2017 19:32:41 UTC