lipdjs
Version:
A JavaScript library for reading and writing LiPD (Linked Paleo Data) files
700 lines (699 loc) • 21.1 kB
text/typescript
import { SYNONYMS } from './synonyms';
export const SCHEMA = {
'Dataset': {
'@id': ['{dataSetName}'],
'@toJson_pre': [
'setArchiveTypeLabel'
],
'datasetId': {
'name': 'hasDatasetId'
},
'dataSetName': {
'name': 'hasName',
'alternates': ['paleoArchiveName']
},
'dataSource': {
'name': 'hasDataSource'
},
'originalDataURL': {
'name': 'hasOriginalDataUrl',
'alternates': ['originalDataUrl', 'additionalDataUrl', 'originalDataSource', 'originalDataURL', 'originalSourceUrl', 'paleoData_WDSPaleoUrl']
},
'dataContributor': {
'name': 'hasContributor',
'schema': 'Person',
'alternates': ['whoEnteredinDB', 'MetadataEnteredByWhom', 'contributorName'],
'fromJson': 'parsePersons',
'multiple': true,
},
'archiveType': {
'name': 'hasArchiveType',
'alternates':[
'archive',
'paleoDataArchive',
'paleoData_Archive',
'Archive'
],
'type': 'Individual',
'synonyms': SYNONYMS['ARCHIVES']['ArchiveType'],
'class_range': 'ArchiveType',
'skip_auto_convert_to_json': true
},
'changelog': {
'name': 'hasChangeLog',
'schema': 'ChangeLog',
'multiple': true
},
'notes': {
'name': 'hasNotes'
},
'collectionName': {
'name': 'hasCollectionName',
'alternates': ['collectionName1', 'collectionName2', 'collectionName3']
},
'collectionYear': {
'name': 'hasCollectionYear'
},
'investigator': {
'name': 'hasInvestigator',
'alternates': ['investigators'],
'schema': 'Person',
'multiple': true,
'fromJson': 'parsePersons'
},
'creator': {
'name': 'hasCreator',
'schema': 'Person',
'multiple': true,
'fromJson': 'parsePersons'
},
'funding': {
'name': 'hasFunding',
'multiple': true,
'schema': 'Funding'
},
'pub': {
'name': 'hasPublication',
'multiple': true,
'schema': 'Publication'
},
'geo': {
'name': 'hasLocation',
'schema': 'Location',
'fromJson': 'parseLocation',
'toJson': 'locationToJson'
},
'paleoData': {
'name': 'hasPaleoData',
'multiple': true,
'schema': 'PaleoData'
},
'chronData': {
'name': 'hasChronData',
'multiple': true,
'schema': 'ChronData'
},
'googleSpreadSheetKey': {
'name': 'hasSpreadsheetLink',
'fromJson': 'getGoogleSpreadsheetUrl',
'toJson': 'getGoogleSpreadsheetKey'
},
'dataSetVersion': {
'name': 'hasVersion'
},
'compilation_nest': {
'name': 'hasCompilationNest',
'alternates': ['pages2kRegion', 'paleoDIVERSiteId', 'sisalSiteId', 'LegacyClimateDatasetId',
'LegacyClimateSiteId', 'ch2kCoreCode', 'coralHydro2kGroup', 'iso2kCertification',
'iso2kUI', 'ocean2kID', 'pages2kId', 'pages2kID', 'QCCertification', 'SISALEntityID' ]
}
},
'Compilation': {
'@id': ['{compilationName}', '.', '{@id}'],
'compilationName': {
'name': 'hasName'
},
'compilationVersion': {
'name': 'hasVersion',
'multiple': true
}
},
'ChangeLog': {
'@id': ['{@parent.@id}', '.ChangeLog.', '{@index}'],
'@category': 'ChangeLog',
'curator': {
'name': 'hasCurator',
},
'version': {
'name': 'hasVersion'
},
'lastVersion': {
'name': 'hasLastVersion'
},
'timestamp': {
'name': 'hasTimestamp'
},
'changes': {
'name': 'hasChanges',
'multiple': true,
'type': 'Individual',
'schema': 'Change',
'fromJson': 'parseChanges',
'toJson': 'changesToJson'
},
'notes': {
'name': 'hasNotes'
}
},
'Change': {
'@id': ['{@parent.@id}', '.Change.', '{@index}'],
'name': {
'name': 'hasName'
},
'notes': {
'name': 'hasNotes',
'multiple': true
}
},
'Funding': {
'@id': [
'{fundingAgency|agency}',
'.',
'{fundingGrant|grant}'
],
'agency': {
'name': 'hasFundingAgency',
'alternates': ['fundingAgency']
},
'grant': {
'name': 'hasGrant',
'multiple': true,
'alternates': ['fundingGrant']
},
'country': {
'name': 'hasFundingCountry',
'alternates': ['fundingCountry']
},
'investigator': {
'name': 'hasInvestigator',
'schema': 'Person',
'multiple': true,
'fromJson': 'parsePersons'
}
},
'Publication': {
'@id': [
'Publication.',
'{identifier.0.id|@parent.dataSetName}',
'{index}'
],
'title': {
'name': 'hasTitle'
},
'abstract': {
'name': 'hasAbstract'
},
'institution': {
'name': 'hasInstitution'
},
'issue': {
'name': 'hasIssue'
},
'journal': {
'name': 'hasJournal'
},
'volume': {
'name': 'hasVolume',
'type': 'string'
},
'pages': {
'name': 'hasPages'
},
'year': {
'name': 'hasYear',
'type': 'integer',
'alternates': ['pubYear']
},
'publisher': {
'name': 'hasPublisher'
},
'report': {
'name': 'hasReport'
},
'type': {
'name': 'hasType'
},
'citation': {
'name': 'hasCitation',
'type': 'string'
},
'citeKey': {
'name': 'hasCiteKey',
'type': 'string'
},
'url': {
'name': 'hasUrl',
'alternates': ['link'],
'multiple': true
},
'dataUrl': {
'name': 'hasDataUrl',
'alternates': ['data_Url', 'pubDataUrl'],
'multiple': true
},
'doi': {
'name': 'hasDOI',
'type': 'string',
'alternates': ['DOI']
},
'author': {
'name': 'hasAuthor',
'alternates': ['authors'],
'schema': 'Person',
'multiple': true,
'fromJson': 'parsePersons'
},
'firstauthor': {
'name': 'hasFirstAuthor',
'alternates': ['firstAuthor'],
'schema': 'Person',
'fromJson': 'parsePersons'
}
},
'PaleoData': {
'@id': [
'{@parent.dataSetName}',
'.PaleoData',
'{@index}'
],
'paleoDataName': {
'name': 'hasName'
},
'measurementTable': {
'alternates': ['paleoMeasurementTable'],
'name': 'hasMeasurementTable',
'multiple': true,
'schema': 'DataTable'
},
'model': {
'alternates': ['paleoModel'],
'name': 'modeledBy',
'multiple': true,
'schema': 'Model'
}
},
'ChronData': {
'@id': [
'{@parent.dataSetName}',
'.ChronData',
'{@index}'
],
'measurementTable': {
'alternates': ['chronMeasurementTable'],
'name': 'hasMeasurementTable',
'multiple': true,
'schema': 'DataTable'
},
'model': {
'alternates': ['chronModel'],
'name': 'modeledBy',
'multiple': true,
'schema': 'Model'
}
},
'Model': {
'@id': ['{@parent.@id}', '.Model', '{@index}'],
'method': {
'name': 'hasCode'
},
'summaryTable': {
'name': 'hasSummaryTable',
'multiple': true,
'schema': 'DataTable'
},
'ensembleTable': {
'name': 'hasEnsembleTable',
'multiple': true,
'schema': 'DataTable'
},
'distributionTable': {
'name': 'hasDistributionTable',
'multiple': true,
'schema': 'DataTable'
}
},
'DataTable': {
'@id': ['{filename}', '_trunc(4)'],
'toJson': ['orderVariables'],
'fromJson': ['setColumnNumbers'],
'filename': {
'name': 'hasFileName'
},
'columns': {
'name': 'hasVariable',
'multiple': true,
'schema': 'Variable'
},
'missingValue': {
'name': 'hasMissingValue'
}
},
'Variable': {
'@id': [
'{foundInTable|@parent.@id}',
'.',
'{TSid|tsid|tSid}',
'.',
'{variableName|name}'
],
'@fromJson': [
'wrapUncertainty',
'addFoundInTable',
'addFoundInDataset',
'addVariableValues',
'addStandardVariable',
'stringifyColumnNumbersArray'
],
'@toJson_pre': [
'removeFoundInTable',
'removeFoundInDataset',
'setVariableNameFromStandardVariableLabel',
'setUnitsLabel',
'setProxyLabel',
'setArchiveTypeLabel',
'setProxyGeneralLabel'
],
'@toJson': [
'unwrapUncertainty',
'extractVariableValues',
'unarrayColumnNumber'
],
'number': {
'name': 'hasColumnNumber',
'type': 'integer'
},
'TSid': {
'name': 'hasVariableId',
'alternates': ['tsid', 'tSid']
},
'variableName': {
'name': 'hasName'
},
'variableType': {
'name': 'hasType'
},
'archiveType': {
'name': 'hasArchiveType',
'alternates':[
'archive',
'paleoDataArchive',
'paleoData_Archive',
'Archive'
],
'type': 'Individual',
'synonyms': SYNONYMS.ARCHIVES?.ArchiveType,
'class_range': 'ArchiveType',
'skip_auto_convert_to_json': true
},
'units': {
'name': 'hasUnits',
'type': 'Individual',
'synonyms': SYNONYMS.UNITS?.PaleoUnit,
'class_range': 'PaleoUnit',
'skip_auto_convert_to_json': true
},
'missingValue': {
'name': 'hasMissingValue'
},
'hasMaxValue': {
'name': 'hasMaxValue',
'alternates': ['hasMax'],
'type': 'float'
},
'hasMinValue': {
'name': 'hasMinValue',
'alternates': ['hasMin'],
'type': 'float'
},
'hasMeanValue': {
'name': 'hasMeanValue',
'alternates': ['hasMean'],
'type': 'float'
},
'hasMedianValue': {
'name': 'hasMedianValue',
'alternates': ['hasMedian'],
'type': 'float'
},
'description': {
'name': 'hasDescription'
},
'isPrimary': {
'name': 'isPrimary',
'type': 'boolean'
},
'isComposite': {
'name': 'isComposite',
'type': 'boolean'
},
'measurementInstrument': {
'name': 'hasInstrument',
'type': 'Individual',
'category': 'Instrument'
},
'calibration': {
'name': 'calibratedVia',
'schema': 'Calibration',
'type': 'Individual',
'multiple': true
},
'interpretation': {
'name': 'hasInterpretation',
'schema': 'Interpretation',
'category': 'Interpretation',
'type': 'Individual',
'multiple': true
},
'resolution': {
'name': 'hasResolution',
'category': 'Resolution',
'schema': 'Resolution',
'type': 'Individual',
'alternates': ['hasResolution']
},
'physicalSample': {
'name': 'hasPhysicalSample',
'schema': 'PhysicalSample',
'category': 'PhysicalSample',
'alternates': ['hasPhysicalSample'],
'type': 'Individual',
'multiple': true
},
'uncertainty': {
'name': 'hasUncertainty'
},
'uncertaintyAnalytical': {
'name': 'hasUncertaintyAnalytical'
},
'uncertaintyReproducibility': {
'name': 'hasUncertaintyReproducibility'
},
'proxy': {
'name': 'hasProxy',
'type': 'Individual',
'synonyms': SYNONYMS.PROXIES?.PaleoProxy,
'class_range': 'PaleoProxy',
'skip_auto_convert_to_json': true
},
'proxyGeneral': {
'name': 'hasProxyGeneral',
'type': 'Individual',
'synonyms': SYNONYMS.PROXIES?.PaleoProxyGeneral,
'class_range': 'PaleoProxyGeneral',
'skip_auto_convert_to_json': true
},
'inCompilationBeta': {
'name': 'partOfCompilation',
'schema': 'Compilation',
'category': 'Compilation',
'type': 'Individual',
'multiple': true
},
'notes': {
'name': 'hasNotes',
'alternates': ['qcNotes', 'qCNotes', 'qCnotes', 'qcnotes', 'QCnotes', 'QCNotes']
},
'hasValues': {
'type': 'string'
},
'foundInTable': {
'type': 'Individual'
},
'foundInDataset': {
'type': 'Individual'
},
'hasStandardVariable': {
'type': 'EnumeratedIndividual',
'synonyms': SYNONYMS.VARIABLES?.PaleoVariable,
'class_range': 'PaleoVariable',
'skip_auto_convert_to_json': true
}
},
'PhysicalSample': {
'hasidentifier': {
'name': 'hasIGSN'
},
'hasname': {
'name': 'name'
},
'housedat': {
'name': 'housedAt'
}
},
'Resolution': {
'@id': ['{@parent.@id}', '.Resolution'],
'@toJson_pre': [
'setUnitsLabel'
],
'hasMaxValue': { 'name': 'hasMaxValue', 'alternates': ['hasMax'], 'type': 'float' },
'hasMinValue': { 'name': 'hasMinValue', 'alternates': ['hasMin'], 'type': 'float' },
'hasMeanValue': { 'name': 'hasMeanValue', 'alternates': ['hasMean'], 'type': 'float' },
'hasMedianValue': { 'name': 'hasMedianValue', 'alternates': ['hasMedian'], 'type': 'float' },
'units': {
'name': 'hasUnits',
'type': 'Individual',
'synonyms': SYNONYMS.UNITS?.PaleoUnit,
'class_range': 'PaleoUnit',
'skip_auto_convert_to_json': true
}
},
'Location': {
'@id': ['{@parent.dataSetName}', '.Location'],
'coordinates': {
'type': 'Geographic_coordinate',
'class_type': 'string'
},
'coordinatesFor': {
'type': 'Individual'
},
'type': { 'name': 'hasType' },
'continent': { 'name': 'hasContinent' },
'country': { 'name': 'hasCountry' },
'countryOcean': { 'name': 'hasCountryOcean' },
'description': { 'name': 'hasDescription' },
'elevation': { 'name': 'hasElevation' },
'geometryType': { 'name': 'hasGeometryType' },
'latitude': { 'name': 'hasLatitude' },
'longitude': { 'name': 'hasLongitude' },
'locationName': { 'name': 'hasLocationName', 'alternates': ['secondarySiteName'] },
'ocean': { 'name': 'hasOcean', 'alternates': ['ocean2'] },
'siteName': { 'name': 'hasSiteName' },
'notes': { 'name': 'hasNotes' }
},
'Interpretation': {
'@id': [
'{@parent.@id}',
'.Interpretation',
'{@index}'
],
'@fromJson': ['addInterpretationRank'],
'@toJson_pre': [
'setUnitsLabel',
'setSeasonalityLabels',
'setInterpretationVariableLabel'
],
'variable': {
'name': 'hasVariable',
'type': 'Individual',
'synonyms': SYNONYMS['INTERPRETATION']['InterpretationVariable'],
'class_range': 'InterpretationVariable',
'skip_auto_convert_to_json': true
},
'variableGeneral': {
'name': 'hasVariableGeneral',
'alternates': ['variableGroup']
},
'variableGeneralDirection': {
'name': 'hasVariableGeneralDirection',
'alternates': ['variableGroupDirection']
},
'variableDetail': {
'name': 'hasVariableDetail',
'alternates': ['variabledetail']
},
'seasonality': {
'name': 'hasSeasonality',
'type': 'Individual',
'synonyms': SYNONYMS['INTERPRETATION']['InterpretationSeasonality'],
'class_range': 'InterpretationSeasonality',
'skip_auto_convert_to_json': true
},
'seasonalityOriginal': {
'name': 'hasSeasonalityOriginal',
'type': 'Individual',
'synonyms': SYNONYMS['INTERPRETATION']['InterpretationSeasonality'],
'class_range': 'InterpretationSeasonality',
'skip_auto_convert_to_json': true
},
'seasonalityGeneral': {
'name': 'hasSeasonalityGeneral',
'type': 'Individual',
'synonyms': SYNONYMS['INTERPRETATION']['InterpretationSeasonality'],
'class_range': 'InterpretationSeasonality',
'skip_auto_convert_to_json': true
},
'notes': { 'name': 'hasNotes' },
'rank': { 'name': 'hasRank' }, // TODO: Auto-create if it doesnt exist
'basis': { 'name': 'hasBasis' },
'scope': { 'name': 'hasScope' },
'mathematicalRelation': { 'name': 'hasMathematicalRelation' },
'direction': {
'name': 'hasDirection',
'alternates': ['interpDirection']
},
'isLocal': {
'name': 'isLocal',
'alternates': ['local']
}
},
'Calibration': {
'@id': ['{@parent.@id}', '.Calibration'],
'@fromJson': ['wrapUncertainty'],
'@toJson': ['unwrapUncertainty'],
'datasetRange': {
'name': 'hasDatasetRange'
},
'doi': {
'name': 'hasDOI',
'alternates': ['calibrationDOI', 'hasDOI', 'transferFunctionDOI']
},
'equation': {
'name': 'hasEquation',
'alternates': ['calibrationEquation']
},
'equationIntercept': {
'name': 'hasEquationIntercept'
},
'equationR2': {
'name': 'hasEquationR2'
},
'equationSlope': {
'name': 'hasEquationSlope'
},
'equationSlopeUncertainty': {
'name': 'hasEquationSlopeUncertainty'
},
'method': {
'name': 'hasMethod'
},
'methodDetail': {
'name': 'hasMethodDetail'
},
'proxyDataset': {
'name': 'hasProxyDataset',
'alternates': ['transferFunctionTrainingSet']
},
'targetDataset': {
'name': 'hasTargetDataset',
'alternates': ['target', 'dataset']
},
'hasSeasonality': {
'name': 'seasonality',
'alternates': ['transferFunctionTrainingSet']
},
'notes': {
'name': 'hasNotes',
'alternates': ['Note']
},
'uncertainty': {
'name': 'hasUncertainty',
'alternates': ['uncertainty', 'calibrationUncertainty', 'temperature12kUncertainty', 'transferFunctionUncertainty'],
}
},
'Person': {
'@id': ['{name}'],
'name': {
'name': 'hasName'
}
}
}