Requirements:
___________________
A Kepler instance always has a unique namespace.
Ship Kepler with a list of valid authorities for providing unique namespaces.
During installation of a Kepler instance
IF a network connection is available
and an authority can be reached
and a namespace can be assigned
record authority and assigned namespace in the installation directory (not the cache directory)
call this file InstanceAuthNamespace { file contents example: kepler-project.org:3271 }
refer to an LSID generated using this kind of Authorized Namespace as a Verified LSID (VLSID)
ELSE
create a version 4 UUID and save it to disk as the existing namespace using "uuid" as the authority
call this file InstanceAuthNamespace { file contents example: uuid:7e1d1daf-4890-4e84-bcf4-e9192254461a }
refer to an LSID generated using this kind of Unauthorized Namespace as a Probabilistic LSID (PLSID)
Kepler may only create LSIDs using the authority and namespace that is saved in the InstanceAuthNamespace file.
(in future releases this file would be signed by the authority and could not be changed by the user without invalidating it)
LSID history will be maintained
The idea here is that if you have an object that does not match the InstanceAuthNamespace
and you resave that object (with or without changing it) then the original LSID is recorded in the object metadata
For example: the InstanceAuthNamespace of an existing Kepler installation is kepler-project.org:983
the user opens the "Display" actor that was shipped with Kepler as urn:lsid:kepler-project.org:1:1:1
and saves it back to the library as "Display 2",
the lsid for this new object is set as urn:lsid:kepler-project.org:983:1:1
(assuming this is the first object and first revision created with this InstanceAuthNamespace)
also saved in the metadata for this object is the previous LSID ( urn:lsid:kepler-project.org:1:1:1 )
call this type of LSID a Referral LSID (RLSID)
In this way objects may have 1 LSID and an ordered list of RLSIDs (ordered from newest to oldest)
LSIDs may only be "deleted" and "created" never "updated".
This implies that there will be no functionality developed to go back and retroactively update any objects that have been generated (or even uploaded) using PLSIDs. If objects are assigned PLSIDs then those are their LSIDs. If a user wishes to assign a VLSID to an object that has been labeled with a PLSID then they must save it as a new object (which would mean there is now an RLSID list that contains the original PLSID).
______________________
Note:
In this system, object revisions now become a function of both the LSID revision number and the RLSID list.
These requirements are being driven by
the need to
always have a unique identifier for objects within Kepler,
(regardless of save state or successful communication with a server over an internet connection)
the desire to
minimize complexity associated with ID collision handling
maintain provenance of Kepler objects
use as much existing code as possible