- From: Nathan <nathan@webr3.org>
- Date: Sat, 03 Nov 2012 11:47:56 +0000
- To: LDP WG <public-ldp-wg@w3.org>
Feedback on section 4...
I'd suggets that the notion of "server" within the specification is
unneeded as "Linked Data Platform Resources (LDPRs) are HTTP resources"
- by removing the notion of "server" you can simplify the specification.
Further, LDPRs are RDF data model documents, which are always guaranteed
to be in at least turtle. Since GET must be supported, and turtle must
be supported.
Thus:
4.1 General
============================
- del 4.1.1 LDPR servers must at least be HTTP/1.1 conformant servers.
+ add 4.1.1 LDPRs must support at least HTTP/1.1
- del 4.1.2 LDPR servers must provide an RDF representation for LDPRs.
The subject is typically the LDPR itself.
(it's void)
- del 4.1.3 LDPR servers may host a mixture of LDPRs and non-LDPRs. For
example, it is common for LDPR servers to need to host binary or text
resources that do not have useful RDF representations.
(it's void)
- simplify 4.1.4 Clients can access a LDPR using multiple URLs, for
example when DNS aliasing is used. A LDPR server must respond to each of
those requests using a single consistent URL, a canonical URL, for the
LDPR which may be found in the response's Location header and
potentially also in the representation of the LDPR. Clients should use
that canonical URL to identify the LDPR.
+ to 4.1.x Clients can access a LDPR using multiple URLs, for example
when DNS aliasing is used. An LDPR must provide a canonical URL for
itself using the Content-Location header. Clients should use that
canonical URL to identify the LDPR.
(consider adding Link rel=canonical too)
4.1.5 and 4.1.6 make more sense when swapped over
- del 4.1.8
as it's nearly impossible for anybody to conform to, as it means only
predicates which deref to text/turtle that conforms to the LDPR spec can
be used. Further "whose representations are retrievable." is unneeded in
the sentence "These predicate URIs must identify LDPRs whose
representations are retrievable.", and "These predicate URIs must
identify LDPRs" makes "Predicate URIs used in LDPR representations
should be HTTP URLs." redundant. Further still "LDPR servers should
provide an RDF Schema [RDF-SCHEMA] representation of these predicates."
is made redundant by 4.1.5
- del 4.1.9 as already agreed at f2f
4.1.10 may require clarification, the first sentence appears to say that
every LDPR must link to another LDPR in at least one triple, but the
second sentence doesn't relate to that scenario.
4.1.11 remove "servers" and a typo "would be likely be common."
4.1.13 remove "servers"
4.2 HTTP GET
============================
- del 4.2.1 LDPR servers must support the HTTP GET Method for LDPRs.
+ add 4.2.1 LDPRs MUST support the HTTP GET Method.
- del 4.2.2 LDPR servers must provide an text/turtle representation of
the requested LDPR.[TURTLE]
+ add 4.2.2 LDPRs must provide a text/turtle representation.
4.1.3 is already gone
4.2.4 and 4.2.5 can be reduced to one "LDPR clients must assume that any
LDPR may have multiple values for rdf:type, and that those values may
change over time." - however by 4.1.7 (LDPR representations should have
at least one rdf:type set explicitly) the text would need to be "zero,
one, or multiple values for rdf:type", which leads me to wonder if it's
worth saying.
4.4 HTTP PUT
============================
4.4.1
"The only recognized exception are the properties dcterms:modified and
dcterms:creator that are never under client control - LDPR servers must
ignore any values of these properties that are provided by the client."?
this seems to pop up from nowhere, the spec doesn't explain anything
about how they should be used, or that the server must control them. It
also places a requirement for the server to always have an identifier
for each person doing a PUT, and doesn't account for automated agents
uploading on behalf of a human agent. Modified may not take in to
account offline sync.. if it's supposed to be "last-modified" then a
restriction where dcterms:modified values must match the Last-Modified
of the server would do it, but seems very limiting and perhaps unneeded?
4.4.2 would be good to mention "If-None-Match: *", and it's "412
(Precondition Failed)" not "412 (Condition Failed). No need to mention
"LDPR clients"
4.4.3 seems informative rather than normative, primer stuff
4.4.4 can be reduced to "LDPRs MAY discard triples whose predicates the
server does not recognize or otherwise chooses not to persist", but
"does not recognize" could be considered bad form, requiring the data
tier to have application tier logic in it, similarly it may want to add
triples by inference or for data management. Thus I'd suggest something
like "LDPRs MAY discard triples which violate their privacy or security
policies, and MAY augment the graph with further triples by inference
(such as rdf:type) or to indicate the LDPRs status (dcterms:modified,
dcterms:creator)."
Do note though, that this clashes with 4.4.1 ("LDPR servers must replace
the entire persistent state of the identified resource with the entity
representation in the body of the request.")
- del 4.4.6 LDPR servers may choose to allow the creation of new
resources using HTTP PUT.
+ add 4.4.6 LDPRs may be created using HTTP PUT.
- del 4.4.7, it's primer/intro stuff
4.5 HTTP DELETE
============================
4.5.1, the first sentence is redundant after you remove the word
"server" .. eg: "LDPRs must remove themselves."
thus suggest:
"4.5.1 After a successful HTTP DELETE, a subsequent HTTP GET on the same
Request-URI must result in a 404 (Not found) or 410 (Gone) status code.
Clients should note that severs may reuse a Request-URI under some
circumstances."
4.5.2 needs a reword as soon as you remove the word "server" - suggest:
"An HTTP DELETE request may alter the state of other resources."
the "for example..." isn't really needed
4.7 HTTP PATCH
============================
4.7.2 may be unneeded, as per 4.4.7
Summary:
============================
From what I can tell, section 4 amounts to:
- Use HTTP/1.1 and text/turtle
- Always support HEAD/GET, optionally support PUT/PATCH/DELETE, and
advertise these using Allow. OPTIONS of course, may need mentioned.
- Specify canonical URLs
- Support If-Match/If-None-Match and ETags
- Try to specify an rdf:type, and use common vocabs where you can.
- Be aware that other processes may change LDPRs
- LDPRs may conneg to appropriate alternative formats
General Notes:
============================
You may need to advertise that something is an LDPR (supporting
PUT/PATCH/DELETE) via a header, and the URL to PUT/PATCH/DELETE may be
different to the one you GET (for example https for state changing
events, or when CDNs and reverse proxies are used to host LDPRs).
Best,
Nathan
Received on Saturday, 3 November 2012 11:48:39 UTC