Try   HackMD
{
    "@type": "PhysicalSampleRecord",
    "sample_identifier":"",
    "alternate_identifiers":[{
        "@type": "IdentifierObjct",
        "label": "",
        "identifier": "",
        "scheme_name": ""
    }],
    "complies_with":[""],
    "curation": {
        "@type": "SpecimenCuration",
        "access_constraints":[""],
        "curation_location": "",
        "description": "",
        "label": "",
        "responsibility": [{
            "@type": "Agent",
            "name": "",
            "affiliation": "",
            "contact_information": "",
            "identifier": "",
            "role": ""
        }]
    },
    "description": "",
    "has_context_category": [{
        "@type": "IdentifierObject",
        "label": "",
        "identifier": "",
        "scheme_name": ""
    }],
    "has_material_category": [{
        "@type": "IdentifierObject",        
        "label": "",
        "identifier": "",
        "scheme_name": ""
    }],
    "has_specimen_category": [{
        "@type": "IdentifierObject",
        "label": "",
        "identifier": "",
        "scheme_name": ""
    }],
    "keywords": [{
        "@type": "Keyword",
        "keyword": "",
        "keyword_uri": "",
        "scheme_name": "",
        "scheme_uri": ""
    }],    
    "label": "",
    "produced_by": {
            "@type": "SamplingEvent",
            "identifier": "",
            "label": "",
            "description": "",
            "has_feature_of_interest": "",
            "responsibility": {
                "@type": "Agent",
                "name": "",
                "affiliation": "",
                "contact_information": "",
                "identifier": "",
                "role": ""                
            },
            "result_time": "2023-01-01",
            "sampling_site": {
                "@type": "SamplingSite",
                "description":"",
                "label": "",
                "location": {
                    "@type": "GeospatialCoordLocation",
                    "elevation": "",
                    "latitude": "",
                    "longitude": ""
                },
                "place_name": [""]
            },
            "authorized_by": ""
        },
    "registrant": {
            "@type": "Agent",
            "name": "",
            "affiliation": "",
            "contact_information": "",
            "identifier": "",
            "role": ""        
    },
    "related_resource": [{
        "@type": "SampleRelation",
        "description": "",
        "label": "",
        "relationship": "",
        "target": ""
    }],
    "sampling_purpose": ""
}

Persistence in Postgres

Draft Postgres schema

        
      

A thing can be a physical sample record or any "significant" components there of, e.g. an agent or sampling event.

Each thing has one or more guids.

Relationships between things is defined by relations between guids.

Things may have terms associated with them (keywords, controlled vocabulary values)