> Apologies for missing the last call where the purpose of the spec was discussed, it seems that was useful discussion. Going through the notes from the call [1], the previous discussion [2] and the old wiki pages with rationale [3] I think we are converging on two broad goals:
>
> 1. better align Fedora with existing standards, and reuse where possible (... to better focus effort of community, better support tool reuse, etc.)
Yes, I completely agree.
> 2. provide an opportunity for alternate implementations (... to provide for lightweight test fixtures, or alternate implementations suited for specific service profiles or environments)
Again, I agree.
> I think the effort is doing very well on 1, but much less well on 2. For 2 to be meaningful we really are talking about swappable implementations, with the generalization that there might be a checklist of features/behaviors required in order to be swappable for a given application.
On this point, I very much disagree. And I will push back vigorously on the point of "swappable implementations" being a goal of the specification effort.
The underlying question here, to my mind, is this: is the "Fedora specification" a specification or the description of an application?
Another way of saying this is: is the purpose of the specification to allow for the creation of Fedora4 clones or is it to allow for innovation?
If there is widespread belief that Fedora4 is the end-all-and-be-all of repository applications, then having the "spec" be a means by which alternate clones can be written is a fine goal. I do not hold this opinion. I see many ways that Fedora4 is lacking both in implementation and in design. If the "spec" is truly a specification, then it will be an open document that allows for a wide range of interpretations of various behaviors. And as such, implementations will most certainly not be "swappable".
In truth, "swappable" is a very slippery concept. And it is meaningless to talk about "swappable servers" without talking about the corresponding clients. For a server can only be called "swappable" in the context of a particular client or set of clients. However, as long as Fedora's interface is LDP and HTTP, then the "clients" for Fedora constitute an unbounded set of HTTP clients. I will assert that making an implementation "swappable" for an unbounded set of potential clients is, for all intents and purposes, an impossible goal.
It has already been pointed out that LDP imposes very few restrictions on the behaviors of servers. Even though the Fedora specification tightens some of the language here, there is still a broad range of permissible -- though (depending on the client) incompatible -- behaviors that can be part of an implementation. Here are just a few ways in which conforming Fedora implementations could be incompatible:
1. Implementation A users server-managed triples while Implementation B puts those into headers
2. Implementation A has a single-subject restriction while Implementation B doesn't
3. Implementation A supports the creation of non-Container LDP-RSs while implementation B doesn't
4. Implementation A supports blank nodes while Implementation B skolemizes them
5. Implementation A requires Link: rel="type" headers for the creation of new resources while implementation B uses a heuristic based on MIMEtype
6. Implementation A supports client-controlled versioning while implementation B does only server-managed versioning
7. Implementation A enforces referential integrity while implementation B doesn't
8. Implementation A allows uncontained PUT while implementation B doesn't
9. Implementation A supports rdf/xml while implementation B doesn't
10. Implementation A deletes resources recursively, while implementation B has a different model for deletes
I can go on and on with such examples. As we know from the Fedora4 issue related to the removal of the "xsd:string" datatype on string literals, there is disagreement about what is a "breaking/incompatible change" and what isn't. This will only get worse across multiple implementations if "swappability" is a goal.
Another example is the support of "message/external-body". This is a big weakness of the specification at present. In fact, IMO, this is fundamentally incompatible with LDP. As defined by RFC 2017, this is a mechanism for email messages to switch protocols for the message body; that is, message headers may use a pop3: or imap: protocol, but the body can be fetched from a different protocol, e.g.: gopher:, ftp:, file:, or http:. The idea of "protocol-switching" does not in any way fit with LDP as a HTTP/1.1 server.
From what is described below, it seems as though the direction of the specification writers is to specify more (not less) of the Fedora behaviors. I think this is a bad approach, and doing so will the death knell not just for the Fedora specification but for the Fedora project as a whole.
If anything, we need more innovation in the area of repository implementations, not less. And over-specifying "what is Fedora" will result in less innovation.
If it were up to me (which is clearly isn't), the entire specification would consist of about 5 sentences:
1. A Fedora server MUST be a conforming LDP server.
2. A Fedora server MUST provide time-based access to resources according to RFC 7089 (Memento)
3. A Fedora server SHOULD support instance digests on resources according to RFC 3230
4. A Fedora server that enforces authorization MUST use WebAC as defined by the Solid specification
5. For any resource that is changed, a Fedora server MUST make a notification available of that change; notifications MUST conform to the ActivityStreams specification.
There is clearly considerable disagreement on the goal of the specification effort. In my opinion, this is a good thing, and the specification itself should allow for that type of disagreement. Again, in my opinion, the specification can accommodate these multiple perspectives only by not over-specifying behavior.
Regards,
Aaron
> The first implication of swappable is that there would need to be at least one more specification (2 if fixity becomes a spec):
>
> a) Fedora API --
https://fcrepo.github.io/fcrepo-specification/
>
> b) Atomic operations --
https://github.com/fcrepo/fcrepo-specification-atomic-operations
>
> c) maybe... Fixity spec --
https://github.com/fcrepo/fcrepo-specification/issues/90
>
> d) "Other Fedora API Behaviors Spec" -- covering things like storage pattern, slug handling, URI patterns, single subject restrictions (or not), and more
>
> Thus, if Derby were to evolve into a useful test fixture for Fedora5, it would need implement all of these specifications (a,b,c,d), and hopefully the specs would be complete enough for it meet that need without reference to "yet more Fedora things not in the spec".
>
> If the Hydra framework does not use atomic batch operations or persistence fixity (say), then the checklist of specs needed to be support a Hydra app would be (a) and (d).
>
> To me this line of thinking implies two things:
>
> i) There will be a need to write (d), the "Other Fedora API Behaviors Spec" (or specs, probably with a better name)
>
> ii) It is desirable for (d) to be as small as possible, but not at the expense of sacrificing specificity. It really must include everything about "what the Fedora API does" (e.g. including the current "RESTful HTTP API" documentation [4]) that is not in the other specs. For example that the root container is at /rest/, the single subject rule, how/when slug requests are honored [5], etc.. However, anything behavior that might be usefully built into another implementation (such as Trellis or Cavendish) would be best split out into a spec along the lines of Atomic Batch Operations.
>
> Under this scenario we have a plausible way to implement either lightweight test fixtures that are drop-in replacements, or to understand through a checklist of specs/sections whether a particular alternate implementations will support a given application. The finesse with which specs/sections are split up will determine how clean that checklist is. Ideally there would also a test suite for each spec/section to verify support and interoperability across implementations.
>
> Attached is a picture I drew to help think about this.
>
> 2c,
> Simeon
>
>
> [1]
https://wiki.duraspace.org/display/FF/2017-04-13+-+Fedora+Tech+Meeting
>
> [2]
https://wiki.duraspace.org/display/FF/2017-03-23+-+Fedora+Tech+Meeting
>
> [3]
https://wiki.duraspace.org/display/FEDORAAPI/Fedora+Specification
>
> [4]
https://wiki.duraspace.org/display/FEDORA4x/RESTful+HTTP+API
>
> [5]
https://github.com/fcrepo4-labs/derby/issues/6
>
> --
> You received this message because you are subscribed to the Google Groups "Fedora Tech" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to
fedora-tech...@googlegroups.com.
> To post to this group, send email to
fedor...@googlegroups.com.
> Visit this group at
https://groups.google.com/group/fedora-tech.
> For more options, visit
https://groups.google.com/d/optout.
> <2017-04_fedora_dependencies.pdf>