linked-rolls 0.59.0 → 0.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -108,19 +108,23 @@ export declare const uncheckedMotivation: {
108
108
  };
109
109
  /**
110
110
  * Whether the edit is one a collation writes by itself: a bare
111
- * insertion or a bare deletion saying nothing further, or an
112
- * equivalence between two systems' spellings for one command.
111
+ * insertion or a bare deletion saying nothing further, or a recoding
112
+ * that exchanges two systems' spellings for one command.
113
113
  *
114
114
  * Collating again rewrites these and keeps the rest. An edit that says
115
115
  * what the change is, or why it was made, or what it rests on, is an
116
116
  * editor's reading of the difference between two texts, and collating
117
117
  * the two again is no reason to discard it.
118
118
  *
119
- * An equivalence counts as the collation's own even where an editor
119
+ * Such an exchange counts as the collation's own even where an editor
120
120
  * added a motivation to it, because it is derived rather than read:
121
121
  * freezing it would leave the transfers, where nearly every edit is
122
122
  * one, unable to be collated again at all. What an editor wrote on it
123
- * is not lost by that, since `connectVersions` keeps an equivalence it
123
+ * is not lost by that, since `connectVersions` keeps an exchange it
124
124
  * draws a second time over the very same symbols.
125
+ *
126
+ * A recoding that only inserts or only deletes is the editor's: a
127
+ * collation types no one-sided edit, so one typed so is a reading of
128
+ * the transfer that collating again must not undo.
125
129
  */
126
130
  export declare const isCollationsOwn: (edit: Readonly<Edit>) => boolean;
@@ -88,7 +88,7 @@ export const collationsOf = (own, inherited, locate, tolerance = defaultCollatio
88
88
  .map(({ symbol: counterpart }) => ({ symbol, counterpart })));
89
89
  };
90
90
  /** The edit type a collation draws by itself, from the two systems' vocabularies rather than off the paper. */
91
- const drawnByCollation = 'replace-with-equivalent';
91
+ const drawnByCollation = 'recoding';
92
92
  /**
93
93
  * The motivation a collation writes on what it makes, saying that
94
94
  * nobody has read it yet.
@@ -112,22 +112,26 @@ export const uncheckedMotivation = {
112
112
  };
113
113
  /**
114
114
  * Whether the edit is one a collation writes by itself: a bare
115
- * insertion or a bare deletion saying nothing further, or an
116
- * equivalence between two systems' spellings for one command.
115
+ * insertion or a bare deletion saying nothing further, or a recoding
116
+ * that exchanges two systems' spellings for one command.
117
117
  *
118
118
  * Collating again rewrites these and keeps the rest. An edit that says
119
119
  * what the change is, or why it was made, or what it rests on, is an
120
120
  * editor's reading of the difference between two texts, and collating
121
121
  * the two again is no reason to discard it.
122
122
  *
123
- * An equivalence counts as the collation's own even where an editor
123
+ * Such an exchange counts as the collation's own even where an editor
124
124
  * added a motivation to it, because it is derived rather than read:
125
125
  * freezing it would leave the transfers, where nearly every edit is
126
126
  * one, unable to be collated again at all. What an editor wrote on it
127
- * is not lost by that, since `connectVersions` keeps an equivalence it
127
+ * is not lost by that, since `connectVersions` keeps an exchange it
128
128
  * draws a second time over the very same symbols.
129
+ *
130
+ * A recoding that only inserts or only deletes is the editor's: a
131
+ * collation types no one-sided edit, so one typed so is a reading of
132
+ * the transfer that collating again must not undo.
129
133
  */
130
- export const isCollationsOwn = (edit) => edit.editType === drawnByCollation
134
+ export const isCollationsOwn = (edit) => (edit.editType === drawnByCollation && !!edit.insert?.length && !!edit.delete?.length)
131
135
  || (edit.editType === undefined
132
136
  && (edit.motivation === undefined || edit.motivation === unchecked)
133
137
  && edit['@annotation'] === undefined);
package/lib/io/migrate.js CHANGED
@@ -54,6 +54,13 @@ const withTypology = (node) => {
54
54
  }
55
55
  return node;
56
56
  };
57
+ /** Edit types renamed since: an exchange of two systems' spellings is one kind of recoding. */
58
+ const renamedEditTypes = {
59
+ 'replace-with-equivalent': 'recoding'
60
+ };
61
+ const withRenamedEditType = (node) => typeof node.editType === 'string' && Object.hasOwn(renamedEditTypes, node.editType)
62
+ ? { ...node, editType: renamedEditTypes[node.editType] }
63
+ : node;
57
64
  const withRenamedType = (node) => Object.hasOwn(renamedTypes, node['@type']) ? { ...node, '@type': renamedTypes[node['@type']] } : node;
58
65
  /** Whether the feature is of the class under either name, since a node is migrated before its children are. */
59
66
  const isOfType = (type) => (feature) => feature?.['@type'] === type || renamedTypes[feature?.['@type']] === type;
@@ -371,7 +378,7 @@ const withTimeSpanDates = (node) => {
371
378
  const { '@value': within, '@type': _typed, ...rest } = node;
372
379
  return { ...rest, within };
373
380
  };
374
- const migrateNode = (node) => [withRenamedKeys, withTypology, withRenamedType, withoutVersionType, withoutVersionSiglum, withLowerCaseTerms, withSplitMethod, withReferences, withKeeper, withoutEmptyKeeper,
381
+ const migrateNode = (node) => [withRenamedKeys, withRenamedEditType, withTypology, withRenamedType, withoutVersionType, withoutVersionSiglum, withLowerCaseTerms, withSplitMethod, withReferences, withKeeper, withoutEmptyKeeper,
375
382
  withPerforator, withProductionNodes, withTypedPerforator, withScale, withoutOps, withDerivationList, withReadingKind, withTimeSpanDates,
376
383
  withoutFeatureKind, withBorneFeaturesNamed, withFeaturesInActs, withDriveOfStaggering, withoutPattern, withoutBearings, withoutEntailedType]
377
384
  .reduce((result, step) => step(result), node);
@@ -71,11 +71,29 @@ export interface BeliefAdoption extends Argumentation<'beliefAdoption'> {
71
71
  */
72
72
  note: string;
73
73
  }
74
+ /**
75
+ * A measurement takes a value off an object by a stated procedure: the
76
+ * period the slot lengths of a copy keep, the median pitch of its held
77
+ * notes. It concludes the belief in that value by itself, with no
78
+ * premises. CRMinf counts observations, and a measurement is one, among
79
+ * the ways a belief comes about, so the value does not have to be
80
+ * passed off as an inference.
81
+ * @see crmsci:S21 Measurement
82
+ */
83
+ export interface Measurement extends Argumentation<'measurement'> {
84
+ /**
85
+ * References (by `@id` or URL) to what the measurement was taken on
86
+ * or with, such as the scan, the analysis output or the script.
87
+ * @see crm:P16 used specific object
88
+ */
89
+ used?: string[];
90
+ }
74
91
  /**
75
92
  * An argumentation can be either a plain argumentation, a
76
- * meaning comprehension, an inference, or a belief adoption.
93
+ * meaning comprehension, an inference, a belief adoption or a
94
+ * measurement.
77
95
  */
78
- export type AnyArgumentation = MeaningComprehension | Inference | BeliefAdoption | Argumentation;
96
+ export type AnyArgumentation = MeaningComprehension | Inference | BeliefAdoption | Measurement | Argumentation;
79
97
  /**
80
98
  * A belief is a temporal object and associates a proposition (i.e.
81
99
  * a statement) with a certainty. It comes into existence through
@@ -143,21 +161,39 @@ export type ObjectAssumption<O extends object> = Assumption & O;
143
161
  * annotated with a belief about its certainty.
144
162
  */
145
163
  export type ActorAssignment = ObjectAssumption<Person>;
164
+ /** The day an event falls within. */
165
+ interface DateWithin {
166
+ /**
167
+ * The day the event falls within.
168
+ * @format date
169
+ * @see crm:P82 at some time within
170
+ */
171
+ within: Date;
172
+ }
173
+ /** The bounds an event lies between. */
174
+ interface DateBounds {
175
+ /**
176
+ * The earliest day the event can have happened on: it did not
177
+ * happen before it.
178
+ * @format date
179
+ * @see crm:P82a begin of the begin
180
+ */
181
+ after: Date;
182
+ /**
183
+ * The latest day the event can have happened on: it did not
184
+ * happen after it.
185
+ * @format date
186
+ * @see crm:P82b end of the end
187
+ */
188
+ before: Date;
189
+ }
146
190
  /**
147
191
  * When something happened, as far as the edition can state it: the day
148
192
  * it falls `within`, or the bounds it lies between. A bound nobody can
149
193
  * give is left out, so `after` alone says "not before".
150
194
  * @see crm:E52 Time-Span
151
195
  */
152
- export type DateAssignment = Assumption & ({
153
- within: Date;
154
- } | {
155
- after: Date;
156
- before?: Date;
157
- } | {
158
- before: Date;
159
- after?: Date;
160
- });
196
+ export type DateAssignment = Assumption & (DateWithin | (Pick<DateBounds, 'after'> & Partial<Pick<DateBounds, 'before'>>) | (Pick<DateBounds, 'before'> & Partial<Pick<DateBounds, 'after'>>));
161
197
  export declare function valueOf<ValueT>(assumption: ValueAssumption<ValueT>): ValueT;
162
198
  export declare function valuesOf<ValueT>(assumptions: ValueAssumption<ValueT>[]): ValueT[];
163
199
  export declare function idOf(assumption: ReferenceAssumption): string;
@@ -177,3 +213,4 @@ export declare const dateOf: (assignment: DateAssignment) => Date | undefined;
177
213
  export declare const earliestOf: (assignment: DateAssignment) => Date | undefined;
178
214
  /** The latest the event can have happened, as far as the edition states it. */
179
215
  export declare const latestOf: (assignment: DateAssignment) => Date | undefined;
216
+ export {};
@@ -1,13 +1,14 @@
1
1
  import { Assumption } from "./Assumption.js";
2
2
  import { AnySymbol } from "./Symbol.js";
3
3
  import { WithId } from "../shared/utils.js";
4
- export declare const editTypes: readonly [
4
+ export declare const editTypes: readonly ['additional-accent', 'add-redundancy', 'remove-redundancy',
5
5
  /**
6
- * An additional accent that can only be encoded with
7
- * sforzando on/off due to the short space left between
8
- * the notes to be differentiated.
6
+ * Carries the text into another reproducing system's coding: a
7
+ * latched pair of one system giving way to the other's held command,
8
+ * a command the other system cannot read struck, or one of its own
9
+ * put in where the first had no word for it.
9
10
  */
10
- 'short-dynamic-differentation', 'additional-accent', 'add-redundancy', 'remove-redundancy', 'replace-with-equivalent', 'shift', 'correct-error', 'shorten', 'prolong'];
11
+ 'recoding', 'shift', 'correct-error', 'shorten', 'prolong'];
11
12
  /**
12
13
  * The type of editorial change applied to a symbol or set of symbols.
13
14
  * Classifies the nature of the edit, e.g. whether it corrects an error,
package/lib/model/Edit.js CHANGED
@@ -1,14 +1,14 @@
1
1
  export const editTypes = [
2
- /**
3
- * An additional accent that can only be encoded with
4
- * sforzando on/off due to the short space left between
5
- * the notes to be differentiated.
6
- */
7
- 'short-dynamic-differentation',
8
2
  'additional-accent',
9
3
  'add-redundancy',
10
4
  'remove-redundancy',
11
- 'replace-with-equivalent',
5
+ /**
6
+ * Carries the text into another reproducing system's coding: a
7
+ * latched pair of one system giving way to the other's held command,
8
+ * a command the other system cannot read struck, or one of its own
9
+ * put in where the first had no word for it.
10
+ */
11
+ 'recoding',
12
12
  'shift',
13
13
  'correct-error',
14
14
  'shorten',
@@ -85,15 +85,19 @@ export type ScaleReading = {
85
85
  export interface ProductionEvent {
86
86
  /**
87
87
  * The company that produced the roll copy
88
- * (e.g. "M. Welte & Söhne").
88
+ * (e.g. "M. Welte & Söhne"). An object assumption, so that a
89
+ * company read off a box label or adopted from a letter can say
90
+ * where it comes from.
89
91
  * @see crm:P14 carried out by
90
92
  */
91
- company?: Agent;
93
+ company?: ObjectAssumption<Agent>;
92
94
  /**
93
- * The paper the roll copy was cut on.
95
+ * The paper the roll copy was cut on. An object assumption, so that
96
+ * what the paper is taken to be can say how that was found and serve
97
+ * as a premise, e.g. of a dating.
94
98
  * @see crm:P126 employed
95
99
  */
96
- paper?: Concept;
100
+ paper?: ObjectAssumption<Concept>;
97
101
  /**
98
102
  * The date of production, if known.
99
103
  * @see crm:P4 has time-span
@@ -98,7 +98,7 @@ export const connectVersions = (given, childId, parentId, tolerance = defaultCol
98
98
  return alreadyStated.get(exchangeKey(inserted, deleted)) ?? {
99
99
  type: 'edit',
100
100
  id: v4(),
101
- editType: 'replace-with-equivalent',
101
+ editType: 'recoding',
102
102
  motivation: unchecked,
103
103
  insert: [...by],
104
104
  delete: deleted
package/lib/ops/edits.js CHANGED
@@ -31,18 +31,24 @@ const guessEditType = (view, versionId, edit) => {
31
31
  const bar = trackerBarOf(view.version(versionId)?.system);
32
32
  const parentBar = trackerBarOf(view.predecessorOf(versionId)?.system);
33
33
  /**
34
- * Where the version is coded for another system than its parent, an
35
- * exchange of expression matter is the transfer being carried out:
36
- * a red ForzandoOn and ForzandoOff pair giving way to one held green
37
- * SforzandoForte says the same thing in the other system's words,
38
- * which is what 'replace-with-equivalent' is for. Calling it a
39
- * corrected error would say the editor made a mistake.
34
+ * Where the version is coded for another system than its parent,
35
+ * expression matter changed is the transfer being carried out: a red
36
+ * ForzandoOn and ForzandoOff pair giving way to one held green
37
+ * SforzandoForte says the same thing in the other system's words, and
38
+ * a red command the green bar cannot read struck, or a green hold put
39
+ * in where the red had no word for it, belongs to the same act. That
40
+ * is a recoding. Calling it a corrected error would say the editor
41
+ * made a mistake. Only an insertion spelling the bar's own accent
42
+ * reads more narrowly, as the accent it spells.
40
43
  */
41
- if (bar && parentBar && bar.id !== parentBar.id && inserted.length > 0 && deleted.length > 0) {
42
- return 'replace-with-equivalent';
43
- }
44
+ const transferred = bar && parentBar && bar.id !== parentBar.id;
45
+ if (transferred && inserted.length > 0 && deleted.length > 0)
46
+ return 'recoding';
44
47
  if (deleted.length === 0 && accentsOn(bar).some(accent => sameSequence(inserted, accent)))
45
48
  return 'additional-accent';
49
+ const onlyExpressions = [...inserts, ...deletes].every(symbol => symbol.type === 'expression');
50
+ if (transferred && onlyExpressions && inserted.length + deleted.length > 0)
51
+ return 'recoding';
46
52
  if (inserted.length > 1 && sameSequence(inserted, deleted))
47
53
  return 'shift';
48
54
  if (inserted.length === 0 && deleted.length === 1)
package/lib/schema.json CHANGED
@@ -69,11 +69,14 @@
69
69
  {
70
70
  "$ref": "#/definitions/BeliefAdoption"
71
71
  },
72
+ {
73
+ "$ref": "#/definitions/Measurement"
74
+ },
72
75
  {
73
76
  "$ref": "#/definitions/Argumentation"
74
77
  }
75
78
  ],
76
- "description": "An argumentation can be either a plain argumentation, a meaning comprehension, an inference, or a belief adoption."
79
+ "description": "An argumentation can be either a plain argumentation, a meaning comprehension, an inference, a belief adoption or a measurement."
77
80
  },
78
81
  "AnyFeature": {
79
82
  "anyOf": [
@@ -316,8 +319,10 @@
316
319
  "type": "object"
317
320
  },
318
321
  "within": {
322
+ "description": "The day the event falls within.",
319
323
  "format": "date",
320
- "type": "string"
324
+ "type": "string",
325
+ "ontology": "crm:P82 at some time within"
321
326
  }
322
327
  },
323
328
  "required": [
@@ -347,12 +352,16 @@
347
352
  "type": "object"
348
353
  },
349
354
  "after": {
355
+ "description": "The earliest day the event can have happened on: it did not happen before it.",
350
356
  "format": "date",
351
- "type": "string"
357
+ "type": "string",
358
+ "ontology": "crm:P82a begin of the begin"
352
359
  },
353
360
  "before": {
361
+ "description": "The latest day the event can have happened on: it did not happen after it.",
354
362
  "format": "date",
355
- "type": "string"
363
+ "type": "string",
364
+ "ontology": "crm:P82b end of the end"
356
365
  }
357
366
  },
358
367
  "required": [
@@ -382,12 +391,16 @@
382
391
  "type": "object"
383
392
  },
384
393
  "after": {
394
+ "description": "The earliest day the event can have happened on: it did not happen before it.",
385
395
  "format": "date",
386
- "type": "string"
396
+ "type": "string",
397
+ "ontology": "crm:P82a begin of the begin"
387
398
  },
388
399
  "before": {
400
+ "description": "The latest day the event can have happened on: it did not happen after it.",
389
401
  "format": "date",
390
- "type": "string"
402
+ "type": "string",
403
+ "ontology": "crm:P82b end of the end"
391
404
  }
392
405
  },
393
406
  "required": [
@@ -512,11 +525,10 @@
512
525
  "EditType": {
513
526
  "description": "The type of editorial change applied to a symbol or set of symbols. Classifies the nature of the edit, e.g. whether it corrects an error, adds an accent, shifts a note, or shortens/prolongs a perforation.",
514
527
  "enum": [
515
- "short-dynamic-differentation",
516
528
  "additional-accent",
517
529
  "add-redundancy",
518
530
  "remove-redundancy",
519
- "replace-with-equivalent",
531
+ "recoding",
520
532
  "shift",
521
533
  "correct-error",
522
534
  "shorten",
@@ -1138,6 +1150,40 @@
1138
1150
  "type": "object",
1139
1151
  "ontology": "crm:E54 Dimension"
1140
1152
  },
1153
+ "Measurement": {
1154
+ "description": "A measurement takes a value off an object by a stated procedure: the period the slot lengths of a copy keep, the median pitch of its held notes. It concludes the belief in that value by itself, with no premises. CRMinf counts observations, and a measurement is one, among the ways a belief comes about, so the value does not have to be passed off as an inference.",
1155
+ "properties": {
1156
+ "actor": {
1157
+ "$ref": "#/definitions/Person",
1158
+ "description": "The person who carried out this activity.",
1159
+ "ontology": "crm:P14 carried out by"
1160
+ },
1161
+ "note": {
1162
+ "description": "A free-text note providing additional context.",
1163
+ "type": "string",
1164
+ "ontology": "crm:P3 has note"
1165
+ },
1166
+ "used": {
1167
+ "description": "References (by `@id` or URL) to what the measurement was taken on or with, such as the scan, the analysis output or the script.",
1168
+ "items": {
1169
+ "type": "string"
1170
+ },
1171
+ "type": "array",
1172
+ "ontology": "crm:P16 used specific object"
1173
+ },
1174
+ "@type": {
1175
+ "const": "measurement",
1176
+ "type": "string",
1177
+ "description": "The type discriminator for this object.",
1178
+ "ontology": "rdf:type"
1179
+ }
1180
+ },
1181
+ "required": [
1182
+ "@type"
1183
+ ],
1184
+ "type": "object",
1185
+ "ontology": "crmsci:S21 Measurement"
1186
+ },
1141
1187
  "Medium": {
1142
1188
  "description": "What a trace was put on with.",
1143
1189
  "enum": [
@@ -1924,6 +1970,106 @@
1924
1970
  ],
1925
1971
  "type": "object"
1926
1972
  },
1973
+ "ObjectAssumption<Concept>": {
1974
+ "anyOf": [
1975
+ {
1976
+ "properties": {
1977
+ "@annotation": {
1978
+ "description": "An optional annotation expressing a belief about this assumption. Uses the JSON-LD-star `@annotation` mechanism to attach epistemic metadata (certainty and reasons) to any triple.",
1979
+ "properties": {
1980
+ "belief": {
1981
+ "$ref": "#/definitions/Belief",
1982
+ "description": "The belief held about the annotated statement.",
1983
+ "ontology": "crminf:J4i is subject of"
1984
+ },
1985
+ "@id": {
1986
+ "description": "A unique identifier for this object.",
1987
+ "type": "string"
1988
+ }
1989
+ },
1990
+ "required": [
1991
+ "belief",
1992
+ "@id"
1993
+ ],
1994
+ "type": "object"
1995
+ },
1996
+ "name": {
1997
+ "description": "The name, e.g. \"Grünfeld, Alfred\", \"Wien\", \"M. Welte & Söhne\".",
1998
+ "type": "string",
1999
+ "ontology": "rdfs:label"
2000
+ },
2001
+ "sameAs": {
2002
+ "description": "Authority records for the same thing: GND, Wikidata, geonames or similar.",
2003
+ "examples": [
2004
+ "https://d-nb.info/gnd/116888652"
2005
+ ],
2006
+ "items": {
2007
+ "type": "string"
2008
+ },
2009
+ "type": "array",
2010
+ "ontology": "owl:sameAs"
2011
+ },
2012
+ "@id": {
2013
+ "description": "A unique identifier for this object.",
2014
+ "type": "string"
2015
+ }
2016
+ },
2017
+ "required": [
2018
+ "@id"
2019
+ ],
2020
+ "type": "object"
2021
+ },
2022
+ {
2023
+ "properties": {
2024
+ "@annotation": {
2025
+ "description": "An optional annotation expressing a belief about this assumption. Uses the JSON-LD-star `@annotation` mechanism to attach epistemic metadata (certainty and reasons) to any triple.",
2026
+ "properties": {
2027
+ "belief": {
2028
+ "$ref": "#/definitions/Belief",
2029
+ "description": "The belief held about the annotated statement.",
2030
+ "ontology": "crminf:J4i is subject of"
2031
+ },
2032
+ "@id": {
2033
+ "description": "A unique identifier for this object.",
2034
+ "type": "string"
2035
+ }
2036
+ },
2037
+ "required": [
2038
+ "belief",
2039
+ "@id"
2040
+ ],
2041
+ "type": "object"
2042
+ },
2043
+ "name": {
2044
+ "description": "The name, e.g. \"Grünfeld, Alfred\", \"Wien\", \"M. Welte & Söhne\".",
2045
+ "type": "string",
2046
+ "ontology": "rdfs:label"
2047
+ },
2048
+ "sameAs": {
2049
+ "description": "Authority records for the same thing: GND, Wikidata, geonames or similar.",
2050
+ "examples": [
2051
+ "https://d-nb.info/gnd/116888652"
2052
+ ],
2053
+ "items": {
2054
+ "type": "string"
2055
+ },
2056
+ "type": "array",
2057
+ "ontology": "owl:sameAs"
2058
+ },
2059
+ "@id": {
2060
+ "description": "A unique identifier for this object.",
2061
+ "type": "string"
2062
+ }
2063
+ },
2064
+ "required": [
2065
+ "name",
2066
+ "sameAs"
2067
+ ],
2068
+ "type": "object"
2069
+ }
2070
+ ],
2071
+ "description": "An object assumption wraps a complex object with an optional annotation. Used for structured values (e.g. persons, conditions) whose properties may be uncertain."
2072
+ },
1927
2073
  "ObjectAssumption<ConditionState<\"general\">>": {
1928
2074
  "description": "An object assumption wraps a complex object with an optional annotation. Used for structured values (e.g. persons, conditions) whose properties may be uncertain.",
1929
2075
  "properties": {
@@ -2700,8 +2846,8 @@
2700
2846
  "description": "Describes the production of a roll copy: the manufacturer, the paper used, the date, and the system and paper speed the copy was cut for.",
2701
2847
  "properties": {
2702
2848
  "company": {
2703
- "$ref": "#/definitions/Agent",
2704
- "description": "The company that produced the roll copy (e.g. \"M. Welte & Söhne\").",
2849
+ "$ref": "#/definitions/ObjectAssumption%3CAgent%3E",
2850
+ "description": "The company that produced the roll copy (e.g. \"M. Welte & Söhne\"). An object assumption, so that a company read off a box label or adopted from a letter can say where it comes from.",
2705
2851
  "ontology": "crm:P14 carried out by"
2706
2852
  },
2707
2853
  "date": {
@@ -2710,8 +2856,8 @@
2710
2856
  "ontology": "crm:P4 has time-span"
2711
2857
  },
2712
2858
  "paper": {
2713
- "$ref": "#/definitions/Concept",
2714
- "description": "The paper the roll copy was cut on.",
2859
+ "$ref": "#/definitions/ObjectAssumption%3CConcept%3E",
2860
+ "description": "The paper the roll copy was cut on. An object assumption, so that what the paper is taken to be can say how that was found and serve as a premise, e.g. of a dating.",
2715
2861
  "ontology": "crm:P126 employed"
2716
2862
  },
2717
2863
  "perforator": {
@@ -9,6 +9,7 @@
9
9
  "crm": "http://www.cidoc-crm.org/cidoc-crm/",
10
10
  "crmdig": "http://www.cidoc-crm.org/extensions/crmdig/",
11
11
  "crminf": "http://www.cidoc-crm.org/extensions/crminf/",
12
+ "crmsci": "http://www.cidoc-crm.org/extensions/crmsci/",
12
13
  "lrmoo": "http://iflastandards.info/ns/lrm/lrmoo/",
13
14
  "reo": "https://w3id.org/reo/",
14
15
  "RollCopy": "reo:RollCopy",
@@ -75,6 +76,16 @@
75
76
  "@id": "crminf:I16_Meaning_Comprehension",
76
77
  "@context": { "note": "crm:P3_has_note" }
77
78
  },
79
+ "measurement": {
80
+ "@id": "crmsci:S21_Measurement",
81
+ "@context": {
82
+ "note": "crm:P3_has_note",
83
+ "used": {
84
+ "@id": "crm:P16_used_specific_object",
85
+ "@type": "@id"
86
+ }
87
+ }
88
+ },
78
89
  "title": "dcterms:title",
79
90
  "license": {
80
91
  "@id": "dcterms:license",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "linked-rolls",
3
- "version": "0.59.0",
3
+ "version": "0.61.0",
4
4
  "description": "Digital editions of piano rolls: import, collation, editorial assumptions, JSON-LD export, and emulation through a reproducing system",
5
5
  "license": "MIT",
6
6
  "repository": {