|
@@ -40,9 +40,9 @@ to replace the essential functionality of a previous project,
|
|
|
|
|
|
## Status
|
|
|
|
|
|
-Pre-alpha. Currently at the beginning of the implementation phase. The
|
|
|
-structure of the code may change radically. Features mentioned below are to be
|
|
|
-intended as goals.
|
|
|
+Alpha. Currently at the beginning of the implementation phase. The
|
|
|
+structure of the code may change radically. Basic functionality is still being
|
|
|
+built. See [road map](doc/ROADMAP.md) for details.
|
|
|
|
|
|
## Features
|
|
|
|
|
@@ -79,9 +79,9 @@ While the underlying `LSUP_RDF` allows for working with multiple, user-defined
|
|
|
storage back ends, `LSUP_REPO` has two designated stores: an in-memory staging
|
|
|
area, where resources are created and manipulated, and a persistent storage
|
|
|
backed by LMDB, where resources are pushed after they are modified. Functions
|
|
|
-such as `LSR_desc_new`, `LSR_desc_update`, and `LSR_desc_triples` operate on
|
|
|
-the staging area. Functions such as `LSR_desc_store`, `LRS_desc_get`, and
|
|
|
-`LSR_desc_delete` move resources between the staging area and the persistent
|
|
|
+such as `LSR_dres_new`, `LSR_dres_update`, and `LSR_dres_triples` operate on
|
|
|
+the staging area. Functions such as `LSR_dres_store`, `LRS_dres_get`, and
|
|
|
+`LSR_dres_delete` move resources between the staging area and the persistent
|
|
|
store, or delete them from the persistent store.
|
|
|
|
|
|
Usual actions in a resource lifecycle flow in `LSUP_REPO` may be, for example:
|
|
@@ -111,22 +111,25 @@ following lines:
|
|
|
- A soft-deleted resource or an active resource can be hard-deleted (i.e.
|
|
|
entirely and irrevocably removed from storage).
|
|
|
|
|
|
-### Data resources
|
|
|
+### Opaque resources
|
|
|
|
|
|
-At the center of Lakesuperior is the goal of storing and organizing arbitrary
|
|
|
-files that can be found in a hard drive, remote server, etc. These files are
|
|
|
-called *Data Resources* (DATA-R). Their contents are entirely opaque to
|
|
|
-Lakesuperior, therefore any type of document can be handled.
|
|
|
+Lakesuperior stores and organizes arbitrary files that can be found in a hard
|
|
|
+drive, remote server, etc. These files are called *Opaque Resources* (O-RES).
|
|
|
+Their contents are entirely opaque to Lakesuperior, therefore any type of
|
|
|
+document can be handled.
|
|
|
+
|
|
|
+In further development phases `LSUP_REPO` may perform some essential
|
|
|
+preservation tasks, such as checksum and basic characterization.
|
|
|
|
|
|
### Descriptive Resources
|
|
|
|
|
|
-Each data resource is accompanied by a *Descriptive Resource* (DESC-R). In the
|
|
|
+Each opaque resource is accompanied by a *Descriptive Resource* (D-RES). In the
|
|
|
first iteration of Lakesuperior this is a RDF named graph which at a minimum
|
|
|
contains a pointer to the data location and basic technical metadata. the URI
|
|
|
-of the named graph is globally unique. Such resource stands for the non-RDF
|
|
|
-resource in a Linked Data context. It can also be added user-defined metadata.
|
|
|
+of the named graph is globally unique. This resource can be added any
|
|
|
+user-defined metadata.
|
|
|
|
|
|
-Descriptive resources may also exist independently of data resources for
|
|
|
+Descriptive resources may also exist independently of opaque resources for
|
|
|
cataloging and organizational purposes. They have a few characteristics in
|
|
|
common:
|
|
|
|
|
@@ -139,31 +142,32 @@ common:
|
|
|
- They may consist of several named graphs, each with a purpose defined by the
|
|
|
software: library-managed data, user-provided data, versioning data, etc.
|
|
|
|
|
|
-Partitioning a DESC-R into multiple graphs allows individual data sets to be
|
|
|
+An O-RES cannot be looked up directly and has no metadata directly attached to
|
|
|
+it; instead, its related D-RES is looked up, which contains the file's metadata
|
|
|
+and a link to the file.
|
|
|
+
|
|
|
+Partitioning a D-RES into multiple graphs allows individual data sets to be
|
|
|
annotated, e.g. to establish provenance or versioning information about the
|
|
|
asserted facts. Future developments of `lsup_repo` or software built upon it
|
|
|
may take advantage of this structure.
|
|
|
|
|
|
-Triples in a DESC-R can have any subject; however it is recommended to maintain
|
|
|
+Triples in a D-RES can have any subject; however it is recommended to maintain
|
|
|
some consistency about which subjects are treated in each resource.
|
|
|
Specifically, the use of a resource as an aggregation or container of triples
|
|
|
-about multiple independent entities is discouraged in favor of the use of
|
|
|
+about multiple independent subjects is discouraged in favor of the use of
|
|
|
dedicated data structures, as described below.
|
|
|
|
|
|
-### Resource Structures
|
|
|
+### Data Structures
|
|
|
|
|
|
Descriptive resources can be organized in varios aggregation forms. The
|
|
|
aggregating resources are normal descriptive resources, with specific
|
|
|
predicates pointing to other descriptive resources.
|
|
|
|
|
|
-It is important to notice that, unlike in Fedora or other LDP implementations,
|
|
|
-the life cycle of resource aggregations is entirely independent of the
|
|
|
-aggregated resources. In LDP, deleting a container would remove its contained
|
|
|
-resources. Also, in LDP a resource can be only contained by a single container
|
|
|
-(except in the case of indirect containers, to some extent). In Lakesuperior an
|
|
|
-aggregation only "contains" pointers to other entirely independent resources,
|
|
|
-which can be pointed to by an arbitrary number of other aggregations, which can
|
|
|
-be removed at any time without changing the state of the aggregated resources.
|
|
|
+The life cycle of resource aggregations is entirely independent of the
|
|
|
+aggregated resources. An aggregation only "contains" pointers to other entirely
|
|
|
+independent resources, which can be pointed to by an arbitrary number of other
|
|
|
+aggregations, which can be removed at any time without changing the state of
|
|
|
+the aggregated resources.
|
|
|
|
|
|
On the other hand, deleting a resource that is part of some structure causes a
|
|
|
scan of all inbound links (see "Referential Integrity" below) and the removal
|
|
@@ -182,12 +186,16 @@ Set members, as well as performing boolean operations on them, shall be made
|
|
|
available. As it is a descriptive resource, a Set may have descriptive metadata
|
|
|
added to it, such as taxonomy, descriptions, labels, etc.
|
|
|
|
|
|
+Deleting a resource contained in a set also deletes the membership relationship
|
|
|
+in the set.
|
|
|
+
|
|
|
#### List
|
|
|
|
|
|
-A Lakesuperior *List* is the implementation of a "Linked List" data structure.
|
|
|
-It contains a link to a single descriptive resource. This resource, called a
|
|
|
-*List Item*, represents the first item in the list. Each list item, except for
|
|
|
-the last one, contains a single link to the next list item.
|
|
|
+A Lakesuperior *List* is a plain implementation of a linked list data
|
|
|
+structure. The list resource contains a link to a single descriptive resource.
|
|
|
+This resource, called a *List Item*, represents the first item in the list.
|
|
|
+Each list item, except for the last one, contains a single link to the next
|
|
|
+list item.
|
|
|
|
|
|
In addition, every list item has either:
|
|
|
|
|
@@ -201,6 +209,15 @@ Shorthand functions to perform common list operations shall be made available.
|
|
|
As with other descriptive resources, Lists and List Items can have any type of
|
|
|
user-defined metadata and relationships added.
|
|
|
|
|
|
+Deleting a list removes all list items under it, but leaves the resources
|
|
|
+pointed to by the list items intact.
|
|
|
+
|
|
|
+Deleting a list item deletes all child items and shift the following item, if
|
|
|
+existent, to the position the deleted item occupied.
|
|
|
+
|
|
|
+Deleting an object that a list item stands for, causes the list item to be
|
|
|
+deleted as well.
|
|
|
+
|
|
|
#### Proxy
|
|
|
|
|
|
A List Item is a special case of a *Proxy*, which is a descriptive resource
|
|
@@ -213,6 +230,8 @@ well, as one sees fit.
|
|
|
Proxy definitions follow the [OAI ORE](http://www.openarchives.org/ore/)
|
|
|
ontology.
|
|
|
|
|
|
+Deleting a resource that a proxy stands for, also deletes the proxy.
|
|
|
+
|
|
|
### Referential Integrity
|
|
|
|
|
|
The concept of Linked data, which `lsup_repo` is partly built upon, does not
|
|
@@ -222,13 +241,13 @@ for managing that resource, let alone having any agency upon it. Therefore,
|
|
|
"broken links" are not excluded.
|
|
|
|
|
|
`lsup_repo`, however, relies on the assumption that a specific set of resources
|
|
|
-is under its full control, and therefore guarantees that all references to
|
|
|
-internally managed resources are maintained at all times. This means that when
|
|
|
-a resource is deleted, all links pointing to it are identified and removed.
|
|
|
-This is called *referential integrity*.
|
|
|
+(all under the `urn:lsres:` namespace) is under its full control, and therefore
|
|
|
+guarantees that all references to internally managed resources are maintained
|
|
|
+at all times. This means that when a resource is deleted, all links pointing to
|
|
|
+it are identified and removed. This is called *referential integrity*.
|
|
|
|
|
|
-Tools shall be developed to perform periodical referential integrity checks and
|
|
|
-to notify of dangling links and/or repair them.
|
|
|
+Tools shall be developed to perform referential integrity checks and to notify
|
|
|
+of dangling links and/or repair them.
|
|
|
|
|
|
### Managed resources
|
|
|
|