WebDAV API

API for manipulation and administration of OCFL directories.

The WebDAV API implements the WebDAV Specification:

[WebDAV]
HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV).
[OCFL]
Oxford Common File Layout Specification 0.3. Edited by Andrew Hankinson (Bodleian Libraries, University of Oxford), Neil Jefferies (Bodleian Libraries, University of Oxford), Rosalyn Metz (Emory University), Julian Morley (Stanford University), Simeon Warner (Cornell University), and Andrew Woods (DuraSpace).
Contents

Introduction

The purpose of this WebDAV API is to manage OCFL directories. Manipulation of OCFL directories is restricted by several HTTP-Method rules as described below in order to keep the OCFL structure consistent.

Usage Scenarios

Direct authoring of OCFL content data is not supported by design. Authoring is intended to take place in a remote cloud directory. Authored content files must then be transmitted to the OCFL directory.

Implementation Specifics

Compared to the official WebDAV specification, this WebDAV API implements the following specifics:

Supported Clients

The following WebDAV clients are tested with this WebDAV API:

Other clients may work too but problems may occur e.g. with special characters such as german umlauts.

HTTP-Method Rules

WebDAV Root Directory /

{scheme}://{server}/{repository}/

Statically returns the five main WebDAV subdirectories. Listing these directories is the only method allowed.

[root]
    ├── cache
    ├── config
    ├── cloud
    ├── data
    └── log
Default HTTP-Method Rules Exceptional Cases Description
PROPFIND / Allowed. Http Header <Depth> is ignored, though.
COPY / Forbidden.
DELETE / Forbidden.
GET / Forbidden.
MKCOL / Forbidden.
MOVE / Forbidden.
PUT / Forbidden.
LOCK / Not implemented.
PROPPATCH / Not implemented.
UNLOCK / Not implemented.

Cache Directory /cache

{scheme}://{server}/{repository}/cache/**

Methods to administrate media derivatives produced and used by the Media API. Besides listing and reading media files, the DELETE method is supported in order to delete single stale or corrupt media files or to empty the cache completely.

Default HTTP-Method Rules Exceptional Cases Description
GET /cache/** Allowed without restriction for any URI </cache/**>.
DELETE /cache/** Allowed without restriction for any URI </cache/**>.
PROPFIND /cache/** Allowed without restriction for any URI </cache/**>.
COPY /cache/** Forbidden for any URI </cache/**>.
MKCOL /cache/** Forbidden for any URI </cache/**>.
MOVE /cache/** Forbidden for any URI </cache/**>.
PUT /cache/** Forbidden for any URI </cache/**>.
LOCK /cache/** Not implemented for any URI </cache/**>.
PROPPATCH /cache/** Not implemented for any URI </cache/**>.
UNLOCK /cache/** Not implemented for any URI </cache/**>.

Config Directory /config

{scheme}://{server}/{repository}/config/**

Methods to author the configuration files needed by the Ingest API.

Default HTTP-Method Rules Exceptional Cases Description
GET /config/** Allowed without restriction for any URI </config/**>.
DELETE /config/**
/config/repository.xml
Allowed without restriction for any URI /config/** besides the <repository.xml> configuration file, which is required.
MKCOL /config/** Allowed without restriction for any URI </config/**>.
PROPFIND /config/** Allowed without restriction for any URI </config/**>.
PUT /config/** Allowed without restriction for any URI </config/**>.
COPY /config/** Forbidden for any URI </config/**>.
MOVE /config/** Forbidden for any URI </config/**>.
LOCK /config/** Not implemented for any URI </config/**>.
PROPPATCH /config/** Not implemented for any URI </config/**>.
UNLOCK /config/** Not implemented for any URI </config/**>.

Cloud Directory /cloud

{scheme}://{server}/{repository}/cloud/**

Methods to browse remote cloud directories (OwnCloud, NextCloud) and to transmit data collections from a remote cloud directory to a OCFL content directory.

Default HTTP-Method Rules Exceptional Cases Description
GET /cloud/** Allowed without restriction for any URI </cloud/**>.
PROPFIND /cloud/** Allowed without restriction for any URI </cloud/**>.
COPY /cloud/** Allowed for any URI </cloud/**>, but only if and only if Http Header <Target> is an OCFL content directory and if and only if the <Target> Header points to an OCFL content directory that belongs to the latest(!) version of an OCFL object. During the copy operation, the whole repository file system gets locked.
MOVE /cloud/** Allowed for any URI </cloud/**>, but only if and only if Http Header <Target> is an OCFL content directory and if and only if the <Target> Header points to an OCFL content directory that belongs to the latest(!) version of an OCFL object. During the move operation, the whole repository file system gets locked.
DELETE /cloud/** Forbidden for any URI </cloud/**>.
MKCOL /cloud/** Forbidden for any URI </cloud/**>.
PUT /cloud/** Forbidden for any URI </cloud/**>.
LOCK /cloud/** Not implemented for any URI </cloud/**>.
PROPPATCH /cloud/** Not implemented for any URI </cloud/**>.
UNLOCK /cloud/** Not implemented for any URI </cloud/**>.

Data Directory /data

{scheme}://{server}/{repository}/data/**

Methods to create new OCFL objects and new OCFL versions as well as for ACL administration. Deletion of OCFL objects and OCFL versions is supported for convenience. Please use with care.

Default HTTP-Method Rules Exceptional Cases Description
GET /data/** Allowed without restriction for any URI </data/**>.
PROPFIND /data/** Allowed without restriction for any URI </data/**>.
COPY /data/** Forbidden for any URI </data/**>.
DELETE /data/**
/data/{dir1}
/data/acl.json
/data/{dir1}/{dir2}
/data/{dir1}/{dir2}/{version}
/data/{dir1}/{dir2}/acl.json
Deletion of OCFL objects and ACLs is allowed for convenience. An OCFL version can be deleted if it is the latest version of an OCFL object. Otherwise, forbidden for any URI </data/**>.
MKCOL /data/**
/data/{dir1}
/data/{dir1}/{dir2}
/data/{dir1}/{dir2}/{version}
</data/{dir1}> starts the creation of a new OCFL object, </data/{dir1}/{dir2}> finishes the creation of a new OCFL object. </data/{dir1}/{dir2}/{version}> creates a new OCFL version if and only if the version number is higher by one than the latest version of the OCFL object. Otherwise, forbidden for any URI </data/**>.
MOVE /data/** Forbidden for any URI </data/**>.
PUT /data/**
/data/acl.json
/data/{dir1}/{dir2}/acl.json
Administration of the repository default ACL </data/acl.json> and the ACL of an OCFL object </data/{dir1}/{dir2}/acl.json> is allowed. Otherwise, forbidden for any URI </data/**>.
LOCK /data/** Not implemented for any URI </data/**>.
PROPPATCH /data/** Not implemented for any URI </data/**>.
UNLOCK /data/** Not implemented for any URI </data/**>.

Log Directory /log

{scheme}://{server}/{repository}/log/**

Methods to check log files of the Ingest API.

Default HTTP-Method Rules Exceptional Cases Description
GET /log/** Allowed without restriction for any URI </log/**>.
PROPFIND /log/** Allowed without restriction for any URI </log/**>.
COPY /log/** Forbidden for any URI </log/**>.
DELETE /log/** Forbidden for any URI </log/**>.
MKCOL /log/** Forbidden for any URI </log/**>.
MOVE /log/** Forbidden for any URI </log/**>.
PUT /log/** Forbidden for any URI </log/**>.
LOCK /log/** Not implemented for any URI </log/**>.
PROPPATCH /log/** Not implemented for any URI </log/**>.
UNLOCK /log/** Not implemented for any URI </log/**>.