### iSamples:
A distributed system facilitating access to information about physical samples gathered primarily from the natural environment.
* Resolvable, unique identifiers are essential
* Collection instances ("iSamples in a box", iSB) hold content
* iSamples Central aggregates common view
* Flexible topology
---
### iSamples Context
```plantuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
System(isc, "iSC", "iSamples Central")
System_Boundary(isamples, "iSamples"){
System(isb, "iSB", "iSamples-In-A-Box")
System_Ext(collection, "Collection", "Collection of sample records")
Rel(isb, collection, "Get records from collection; Provide identifiers for collection")
}
BiRel(isb, isc, "Synchronize records")
Person(user, "User", "Data User")
Rel(user, isc, "Discover")
Rel(user, isb, "Discover")
Person(admin, "Admin", "Administrator")
Rel_U(admin, isc, "Manage")
Rel(admin, isb, "Manage")
System(models, "Models", "Community maintained data models and definitions, vocabulaies, ontologies, schemas")
Rel(models, isb, "Inform")
Rel(models, isc, "Inform")
```
---
### Current Deployment
```plantuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
System(isc, "iSC", "iSamples Central")
System_Boundary(isamples_geome, "iSamples-GEOME"){
System(isb_geome, "iSB", "GEOME")
System_Ext(collection, "GEOME", "Collection of sample records")
Rel(isb_geome, collection, "Get records from collection")
}
System_Boundary(isamples_smith, "iSamples-SMITHSONIAN"){
System(isb_smith, "iSB", "Smithsonian")
System_Ext(collection_smith, "Smithsonian", "Collection of sample records")
Rel(isb_smith, collection_smith, "Get records from collection")
}
System_Boundary(isamples_oc, "iSamples-OpenContext"){
System(isb_oc, "iSB", "OpenContext")
System_Ext(collection_oc, "OpenContext", "Collection of sample records")
Rel(isb_oc, collection_oc, "Get records from collection")
}
System_Boundary(isamples_sesar, "iSamples-SESAR"){
System(isb_sesar, "iSB", "SESAR")
System_Ext(collection_sesar, "SESAR", "Collection of sample records")
Rel(isb_sesar, collection_sesar, "Get records from collection")
}
BiRel(isc, isb_geome, "Synchronize Records")
BiRel(isc, isb_smith, "Synchronize Records")
BiRel(isc, isb_oc, "Synchronize Records")
BiRel(isc, isb_sesar, "Synchronize Records")
```
---
### Hierarchical
```plantuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
System(isc, "iSC", "iSamples Central")
System(isc2, "iSC 2", "iSamples Central 2")
System(isb_a, "iSB")
System(isb_b, "iSB")
System(isb_c, "iSB")
System(isb_a2, "iSB")
System(isb_b2, "iSB")
Rel(isc, isb_a, "get")
Rel(isc, isb_b, "get")
Rel(isc, isb_c, "get")
Rel(isc2, isc, "get")
Rel(isc2, isb_a2, "get")
Rel(isc2, isb_b2, "get")
```
---
### Multiple "Centrals"
```plantuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
System(isc, "iSC", "iSamples Central")
System(isc2, "iSC 2", "iSamples Central 2")
System(isb_a, "iSB")
System(isb_b, "iSB")
System(isb_c, "iSB")
Rel(isc, isb_a, "get")
Rel(isc, isb_b, "get")
Rel(isc2, isb_b, "get")
Rel(isc2, isb_c, "get")
```
---
### SESAR iSamples IGSN Allocation
* Where is the allocating authority?
* SESAR is generally digital source of truth
* But: Collection capabilities vary
* Support for normal operations, e.g.:
* sub-sampling
* transfers
* analyses
---
### iSamples IGSN Allocating Authority
```plantuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
System_Boundary(B,"iSB Allocator"){
System(isc2, "iSC", "iSamples Central")
System(isb_a, "iSB")
Rel(isb_a, isc2, "records")
System_Ext(igsn2, "IGSN", "DataCite IGSN service")
BiRel(isb_a, igsn2, "Mint Identifiers")
}
System_Boundary(A,"iSC Allocator"){
System(isc, "iSC", "iSamples Central")
System(isb_b, "iSB")
Rel(isb_b, isc, "records")
Rel(isc, isb_b, "assign IGSN")
System_Ext(igsn, "IGSN", "DataCite IGSN service")
BiRel(isc, igsn, "Mint Identifiers")
}
```
---
### iSB as Allocating Agent
```plantuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
System(isc, "iSC", "iSamples Central\nSESAR?")
System_Boundary(isamples, "Collection System"){
System(isb, "iSB", "iSamples-In-A-Box\nAllocating Agent\nSource of truth")
System_Ext(collection, "Collection", "Collection of sample records")
BiRel(isb, collection, "Get records from collection; Provide identifiers for collection")
Person(isbadmin,"iSB Admin")
}
BiRel_L(isb, isc, "Synchronize records")
System_Ext(igsn, "IGSN", "DataCite IGSN service")
BiRel(isb, igsn, "Mint Identifiers")
Rel(isbadmin, igsn, "Has minting authority")
Rel(isbadmin, isb, "Manages")
```
---
### iSC as Allocating Agent
```plantuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
System(isc, "iSC", "SESAR\nAllocating Agent\nSource of truth\nMay redirect to iSB")
Person(iscadmin,"iSC Admin")
System_Boundary(isamples, "Collection System"){
System(isb, "iSB", "Collection")
System_Ext(collection, "Collection", "Collection of sample records")
BiRel(isb, collection, "Get records from collection; Provide identifiers for collection")
Person(isbadmin,"iSB Admin")
}
BiRel_R(isb, isc, "Synchronize records; Provides IGSNs")
System_Ext(igsn, "IGSN", "DataCite IGSN service")
BiRel(isc, igsn, "Mint Identifiers")
Rel(isbadmin, isb, "Manages")
Rel(iscadmin, isc, "Manages")
Rel(iscadmin, igsn, "Has minting authority")
Rel_R(iscadmin, isbadmin, "Recognizes ownership")
```
---
```plantuml
skinparam monochrome true
title Allocation, SESAR as Allocating Agent
participant Collection as isb
participant "SESAR (iSC)" as isc
participant DataCite as igsn
== Register Collection ==
isb -> isc: registerNamespace("TT")
note over isc
Likely a human action
to ensure integrity
end note
isc -> igsn: Request Prefix
note over igsn
Prefix allocation requires
human action
end note
igsn --> isc: ok(10.1234)
note over isc
The IGSN prefix "TT"
is associated with the
DOI prefix "10.1234"
end note
isc --> isb: notify
== Allocate Identifier ==
isb -> isc: getIdentifier(TT0001)
note right isc
IGSN value may be generated by SESAR
or requested by Collection
end note
activate isc
isc -> igsn: create(10.1234/TT0001)
igsn --> isc: ok
isc --> isb: ok
deactivate isc
```
---
```plantuml
skinparam monochrome true
hide footbox
title Resolve IGSN, SESAR Allocating Agent
actor User as user
participant DataCite as igsn
participant "SESAR (iSC)" as isc
participant "Collection (iSB)" as isb
note over user: User has short form IGSN
user -> igsn: resolve(TT0001)
note over isc
SESAR may also resolve
short form IGSNs
end note
igsn --> user: see SESAR 10.1234/TT0001
== Alt: SESAR managed ==
user -> isc: resolve(10.1234/TT0001)
isc --> user: data
== Alt: Collection managed ==
user -> isc: resolve(10.1234/TT0001)
note right isc
Client may request
SESAR view of metadata
via profile property in
request header
end note
isc --> user: see Collection TT0001
user -> isb: resolve(TT0001)
isb --> user: data
```
---
### Summary
* Allocation feasible at both iSC and iSB levels
* SESAR as a domain specialized iSC instance
* Support IGSN allocation for many collections
* Simplified accounting for collections
* Facilitate IGSN prefix management
* Support sample transfers
* Assumes
* 1:1 IGSN namespace to DOI prefix
* SESAR is source of truth
* SESAR may redirect to collection
---
{"metaMigratedAt":"2023-06-17T00:33:04.368Z","metaMigratedFrom":"YAML","title":"IGSN Identifier Support","breaks":true,"slideOptions":"{\"theme\":\"white\"}","contributors":"[{\"id\":\"9681a99b-8995-4719-8f14-bd8a20422101\",\"add\":10942,\"del\":2760}]"}