Kepler Life Science Identifiers (KeplerLSID)
The page will describe the format of Kepler Life Science Identifiers and how they are used within the Kepler system.
KeplerLSID format
See org.kepler.objectmanager.lsid.KeplerLSID for the class that is used to store KeplerLSIDs.
A KeplerLSID is of the format
urn:lsid:<authority>:<namespace>:<object>:<revision>#<anchor>
where
<authority> is a string that does not contain a colon character, it is usually the URL of the web service that assigned the namespace
<namespace> is a string that does not contain a colon character, it is usually a number that was uniquely assigned from the authority
<object> is a Long, it is just a number that gets incremented each time a new object ID is assigned by Kepler
<revision> is a Long, it is just a number that gets incremented anytime a change is made to the object that the LSID is attached to
<anchor> is an optional string (that does not contain a colon character)
The anchor does not affect the uniqueness of the LSID.
For example
- urn:lsid:kepler-project.org:bob:4:10
is equal to
- urn:lsid:kepler-project.org:bob:4:10#fred
How KeplerLSIDs are assigned
Every time Kepler is run it uses a unique Authority and Namespace to determine unique object ids. Kepler can only create new LSIDs that contain the authority and namespace that are registered with the running Kepler instance.
The Authority and Namespace are stored in a file called ~/KeplerData/modules/core/AuthorizedNamespace. The last ObjectId and revision information is stored in the persistent KeplerData directory for the core module. For the time being if you want to retrieve a new authority and namespace you can delete the ~/KeplerData/modules/core/AuthorizedNamespace file and restart Kepler. You should see a message about the most recent namespace being retrieved:
bash-3.2$ cd build-area bash-3.2$ rm ~/KeplerData/modules/core/AuthorizedNamespace bash-3.2$ ant run ... [run] Kepler Initializing... [run] INFO (org.kepler.util.AuthNamespace:generateAuthNamespace:265) A unique namespace, 3562, was successfully retrieved from authority gamma.msi.ucsb.edu/OpenAuth/ [run] INFO (org.kepler.objectmanager.library.LibraryManager:buildLibrary:318) Building Library...
The list of webservices used to retrieve a unique namespace can be found in the configuration-manager/resources/configurations/configuration.xml file of the configuration-manager module under the authNamespaceServices entity. You can implement your own service, an example and more info about the Kepler AuthNamespace webservice exists here.
Here is a list of known implementations (updated 10/10/2010)
How to generate a LSID for a XML description of an actor or director
All the LSIDs that are in svn checked in xml files were hand generated.
Feel free to generate your own LSIDs and put them in by hand.
You can make up your own authority and namespace and do something like
urn:lsid:yourdomain.edu:yourlogin:1:1
Where yourdomain.edu might be something like "kepler-project.org" and yourlogin might be your username. You will need to keep track of your own object ids and revisions when
modifying things by hand.
if you want to use the same web service that Kepler uses to automate
namespace generation
you can connect to the following URL in your web browser:
#
and append the following parameters to the URL ?username=kepler&password=kepler&
and this will return an incremented integer as the next available and
unique namespace
The lsid here would be (if the namespace returned was 10001)
urn:lsid:kepler-project.org/ns/:10001:1:1
Where the authority in this case is the actual URL of the web service
that generated the namespace
Or you can implement your own web service:
https://code.kepler-project.org/code/kepler-docs/trunk/teams-and-wg/2-infr-teams/framework/AuthNamespace_WebService_Spec/example.jsp
and modify the configuration to reflect it in
configuration-manager/resources/configuration/configuration.xml
(authNamespaceServices).
entityId and derivedFrom attributes
A KeplerLSID is assigned to a NamedObj by setting an attribute with the name "entityId". History of assigned LSIDs for an object are kept in an attribute called "derivedFrom". These are visible within Kepler in the Outline tab by selecting the Show All checkbox.
ObjectManager.getIdFor(NamedObj) should be used for getting an ID that has already been assigned to an object (if the object does not have an ID one will be assigned to it).
ObjectManager.getIdAttributeFor(NamedObj) will return the NamedIdObj associated with the NamedObj (or null if it does not have one).
ObjectManager.assignIdTo(NamedObj) should be used for assigning LSIDs to NamedObjs.
Code references
org.kepler.objectmanager.lsid.KeplerLSID
org.kepler.objectmanager.lsid.LSIDGenerator
org.kepler.objectmanager.ObjectManager
org.kepler.moml.GetMomlFromLSID
org.kepler.moml.NamedObjId
org.kepler.moml.NamedObjIdReferralList
org.kepler.util.AuthNamespace