Schema for documenting material samples

Schema documentation generated from linkml sources.

Modified

April 16, 2026

URI: https://w3id.org/isample/schema/2.0 Name: MaterialSampleRecord

How this schema is organized

The autogenerated reference below lists every class, slot, enumeration, and type alphabetically. For newcomers, that flat list can obscure the fact that the schema has a clear conceptual center and that most other classes exist to describe the context around it. This section is a hand-written orientation to help you find your way in.

The centerpiece: the sample record

MaterialSampleRecord is the schema’s core class. It is the digital record about a physical material sample — a rock core, a sherd of pottery, a biological specimen, a sediment grab. Every other class in the schema exists to describe something about a MaterialSampleRecord: how it was collected, where, by whom, what it is, and what has happened to it since.

The act of sampling

A sample doesn’t exist in isolation — it was produced by some act of sampling at some place and time. Three classes capture this:

  • SamplingEvent — the event that produced the sample (who did it, when, under what authorization, following which protocol).
  • SamplingSite — documentation of the place the sample was collected from, including place name(s) and the broader context it is part of.
  • GeospatialCoordLocation — decimal latitude/longitude and elevation, used both for the sample’s precise coordinates and for the centroid of a sampling site.

After collection: curation and relationships

Once a sample leaves its original context, it has an ongoing life in collections, analyses, and derived artifacts:

  • MaterialSampleCuration — where the sample is currently kept, how it can be accessed, and the history of its handling.
  • SampleRelation — semantic links between samples (e.g. a derived subsample) or between a sample and a related resource.

Supporting types used across the model

Two classes appear throughout the model rather than being specific to any one part:

  • Agent — a person (or organization) playing a role such as collector, curator, or registrant.
  • IdentifiedConcept — a vocabulary term with an identifier and label, used for things like material category, context category, object type, and relationship kinds.

Putting it together

A complete record typically looks like: a MaterialSampleRecord — produced by a SamplingEvent at a SamplingSite with a GeospatialCoordLocation, described using IdentifiedConcept vocabulary terms for its material and context categories, with Agents named as registrant and responsible parties, curated per a MaterialSampleCuration, and optionally linked to other samples via SampleRelation.

%%{init: {'securityLevel': 'loose', 'theme':'neutral', 'themeVariables': { 'fontSize':'14px', 'fontFamily':'Roboto Mono'}}}%%
classDiagram
  direction BT
  class MaterialSampleRecord {
    alternate_identifiers : string[]
    complies_with : string[]
    curation : MaterialSampleCuration
    dc_rights : string
    description : string
    has_context_category : IdentifiedConcept[]
    has_material_category : IdentifiedConcept[]
    has_sample_object_type : IdentifiedConcept[]
    keywords : IdentifiedConcept[]
    label : string
    last_modified_time : datetime
    pid : uriorcurie
    produced_by : SamplingEvent
    registrant : Agent
    related_resource : SampleRelation[]
    sample_identifier : string
    sampling_purpose : string
    }
    click MaterialSampleRecord href "MaterialSampleRecord.html" "Documentation"
    MaterialSampleCuration --o MaterialSampleRecord : curation
    IdentifiedConcept --o MaterialSampleRecord : has_context_category
    IdentifiedConcept --o MaterialSampleRecord : has_material_category
    IdentifiedConcept --o MaterialSampleRecord : has_sample_object_type
    IdentifiedConcept --o MaterialSampleRecord : keywords
    SamplingEvent --o MaterialSampleRecord : produced_by
    Agent --o MaterialSampleRecord : registrant
    SampleRelation --o MaterialSampleRecord : related_resource
    
  class Agent {
    affiliation : string
    contact_information : string
    name : string
    pid : uriorcurie
    role : string
    }
    click Agent href "Agent.html" "Documentation"
    
  class SamplingSite {
    description : string
    is_part_of : uriorcurie[]
    label : string
    pid : uriorcurie
    place_name : string[]
    site_location : GeospatialCoordLocation
    }
    click SamplingSite href "SamplingSite.html" "Documentation"
    GeospatialCoordLocation --o SamplingSite : site_location
    
  class SamplingEvent {
    authorized_by : string[]
    description : string
    has_context_category : IdentifiedConcept[]
    has_feature_of_interest : string
    label : string
    pid : uriorcurie
    project : string
    responsibility : Agent[]
    result_time : string
    sample_location : GeospatialCoordLocation
    sampling_site : SamplingSite
    }
    click SamplingEvent href "SamplingEvent.html" "Documentation"
    IdentifiedConcept --o SamplingEvent : has_context_category
    Agent --o SamplingEvent : responsibility
    GeospatialCoordLocation --o SamplingEvent : sample_location
    SamplingSite --o SamplingEvent : sampling_site
    
  class GeospatialCoordLocation {
    elevation : string
    latitude : decimal
    longitude : decimal
    obfuscated : boolean
    }
    click GeospatialCoordLocation href "GeospatialCoordLocation.html" "Documentation"
    
  class MaterialSampleCuration {
    access_constraints : string[]
    curation_location : string
    description : string
    label : string
    pid : uriorcurie
    responsibility : Agent[]
    }
    click MaterialSampleCuration href "MaterialSampleCuration.html" "Documentation"
    Agent --o MaterialSampleCuration : responsibility
    
  class SampleRelation {
    description : string
    label : string
    relationship : string
    target : uriorcurie
    }
    click SampleRelation href "SampleRelation.html" "Documentation"
    
  class IdentifiedConcept {
    label : string
    pid : uriorcurie
    scheme_name : string
    scheme_uri : string
    }
    click IdentifiedConcept href "IdentifiedConcept.html" "Documentation"
    
  

Classes

Class Description
Agent Object to represent a person who plays a role relative to sample collection o…
GeospatialCoordLocation A physical location in decimal degrees using EPSG:4326
IdentifiedConcept An identifier with a label, used for vocabulary terms
MaterialSampleCuration Information about the current storage of sample, access to sample, and events…
MaterialSampleRecord This is a data object that is a digital representation of a material sample; …
SampleRelation Semantic link to other samples or related resources
SamplingEvent Information about the event resulting in the creation of the material sample
SamplingSite Documentation of the site where the sample was collected, with place name(s) …

Slots

Slot Description
access_constraints Cultural, legal, or other policy issues that bear on access to view, borrow, …
affiliation Name of an organization that employes or sponsors a person for the role they …
alternate_identifiers One or more identifiers used to identify the sample in other contexts
authorized_by A list of permits or other formal permission documents under which the sample…
complies_with A list of policies, recommendations, best practices (etc
contact_information E-mail address, telephone number, mailing address, or web site through which …
curation Information about the current storage of sample, access to sample, and events…
curation_location Information about where and how the sample is currently stored
dc_rights A statement about various property rights associated with the resource, inclu…
description Free text description of the subject of a triple
elevation Should be a number and Unit of measure, and the vertical reference system
has_context_category Top level context, based on the kind of feature sampled
has_feature_of_interest A more specific name of the feature that was sampled, as opposed to the kind …
has_material_category The kind of material that constitutes the sample
has_sample_object_type The kind of object the material sample is
is_part_of A link from a SamplingSite to a larger sampling site that spatially contains …
keywords Free text terms or formal categories associate with sample to support discove…
label A human intelligible string used to identify a thing, i
last_modified_time time stamp when the metadata record was most recently updated
latitude Angular coordinate measured positive north from the equator
longitude Angular coordinate measured positive eastward from the prime meridian
name String, name of a person
obfuscated Flag to indicate that accuracy of provided coordinate location has been reduc…
pid A string that identifies some resource
place_name One or more names by which the sampling site is known
produced_by Object that documents the sampling event–who, where, when the material sampl…
project The name or identifier for a project that is the sponsor for a samplingEvent
registrant Identification of the agent that registered the sample, with contact informat…
related_resource Link to related resource with relationship property to indicate nature of con…
relationship Term to identify relationship between host sample and the sample relation tar…
responsibility Agent object includes person name, person identifier, affiliation, or organiz…
result_time Date on which the sample was collected
role Term that specifies how a person is related to a sample curation or collectio…
sample_identifier URI that identifies the material sample described by this record
sample_location Geopatial location of sample event; required default is WGS84 latitude, longi…
sampling_purpose Term to specify why a sample was collection
sampling_site Object that identifies the place where the sample was collected
scheme_name String label for the concept scheme or vocabulary within which the keyword co…
scheme_uri Identifier for the concept scheme or vocabulary within which the keyword conc…
site_location Geopatial location of site; required default is WGS84 latitude, longitude in …
target Identifier for the target resource in the relationship

Enumerations

No enumerations are defined.

Types

Type Description
xsd:boolean A binary (true or false) value
xsd:string a compact URI
xsd:date a date (year, month and day) in an idealized calendar
linkml:DateOrDatetime Either a date or a datetime
xsd:dateTime The combination of a date and time
xsd:decimal A real number with arbitrary precision that conforms to the xsd:decimal speci…
xsd:double A real number that conforms to the xsd:double specification
xsd:float A real number that conforms to the xsd:float specification
xsd:integer An integer
xsd:string A string encoding a JSON Path
xsd:string A string encoding a JSON Pointer
xsd:string Prefix part of CURIE
shex:nonLiteral A URI, CURIE or BNODE that represents a node in a model
shex:iri A URI or CURIE that represents an object in the model
xsd:string A string encoding a SPARQL Property Path
xsd:string A character string
xsd:time A time object represents a (local) time of day, independent of any particular…
xsd:anyURI a complete URI
xsd:anyURI a URI or a CURIE

Subsets

No subsets are defined.

Revision history

SMR 2022-10-07. Schema for iSamples sample registry integration. Updated from 0.2 by synchronizing the vocabulary enumerations, change ‘id’ to ‘@id’ and ‘schema’ to ‘$schema’. Schema name is iSamplesSchemaCore1.0.json. Target JSON schema version is https://json-schema.org/draft/2019-09/schema. SMR 2023-03-17. Move authorized_by into SamplingEvent, change keywords to list of Keyword objects with string, uri, scheme and scheme URI. Reorder elements in slot list. Update scheme URI to 1.0 2023-06-13 SMR add project property on SamplingEvent, with text or URI value. 2024-01-17 SMR run linkml-lint from current linkml version before rebuilding JSON schema. 2024-04-19. DV ran yaml linter on the file to clean up formatting, put hard return in text bodies. Update schema URI to dereference with w3id. SMR 2024-09-13 add last_modified_time as property of MaterialSampleRecord. DV 2025-02-07. Modifications after discussion on iSamples tech. Change IdentifierObject to IdentifiedConcept, change identifier property labels to ‘pid’ add geo location directly to SamplingEvent, add has_context_category to SamplingEvent, change keywords values to IdentifiedConcept. make version 2.0