linked-rolls 0.52.0 → 0.54.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.
- package/lib/Emulation.js +6 -5
- package/lib/Feature.d.ts +0 -9
- package/lib/Perforator.d.ts +120 -0
- package/lib/Perforator.js +11 -0
- package/lib/RollCopy.d.ts +18 -9
- package/lib/RollCopy.js +6 -1
- package/lib/importJsonLd.js +2 -2
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/migrate.d.ts +2 -0
- package/lib/migrate.js +70 -2
- package/lib/readers/stanfordAton.js +15 -4
- package/lib/schema.json +262 -27
- package/lib/spec/context.json +15 -6
- package/lib/vocabulary.d.ts +2 -2
- package/lib/vocabulary.js +5 -3
- package/package.json +1 -1
package/lib/Emulation.js
CHANGED
|
@@ -2,15 +2,16 @@ import { MIDIControlEvents } from "midifile-ts";
|
|
|
2
2
|
import { idOf } from "./Assumption.js";
|
|
3
3
|
import { isCommand, pairsAmong, placementsOf } from "./Symbol.js";
|
|
4
4
|
import { add, mean, mm, seconds, subtract } from "./Quantity.js";
|
|
5
|
+
import { punchDiameterOf } from "./RollCopy.js";
|
|
5
6
|
/** The punch diameter the edition's copies report, where any of them does. */
|
|
6
|
-
const
|
|
7
|
+
const meanPunchDiameterOf = (view) => {
|
|
7
8
|
const measured = view.edition.copies
|
|
8
|
-
.map(
|
|
9
|
-
.filter(
|
|
9
|
+
.map(punchDiameterOf)
|
|
10
|
+
.filter(value => value !== undefined);
|
|
10
11
|
return measured.length > 0 ? mean(measured) : undefined;
|
|
11
12
|
};
|
|
12
13
|
const propertiesOf = (view, version) => ({
|
|
13
|
-
punchDiameter:
|
|
14
|
+
punchDiameter: meanPunchDiameterOf(view),
|
|
14
15
|
tempo: view.edition.tempoAdjustment,
|
|
15
16
|
toOwnPaper: view.toOwnPaperOf(version)
|
|
16
17
|
});
|
|
@@ -141,7 +142,7 @@ export class Emulation {
|
|
|
141
142
|
* diameter, or a millimetre, where no copy agrees with a statement.
|
|
142
143
|
*/
|
|
143
144
|
applyConstraints(view) {
|
|
144
|
-
const gap =
|
|
145
|
+
const gap = meanPunchDiameterOf(view) ?? mm(1);
|
|
145
146
|
const offsets = (follower, reference) => offsetsBetween(view, follower, reference);
|
|
146
147
|
displacementsOf(this.negotiatedEvents, offsets, gap).forEach((distance, event) => {
|
|
147
148
|
event.horizontal.from = add(event.horizontal.from, distance);
|
package/lib/Feature.d.ts
CHANGED
|
@@ -109,15 +109,6 @@ export type FeatureConditionAssignment = ObjectAssumption<ConditionState<Feature
|
|
|
109
109
|
* @see reo:Hole
|
|
110
110
|
*/
|
|
111
111
|
export interface Hole extends RollFeature<'Hole', typeof conditions.Hole[number]> {
|
|
112
|
-
/**
|
|
113
|
-
* The punching pattern of the hole. Regular holes have evenly-spaced
|
|
114
|
-
* bridges, accelerating holes have decreasing bridge widths, and
|
|
115
|
-
* staggering holes do not align in rows across the tracks, the mark
|
|
116
|
-
* of an asynchronous perforator with a separate driver for each
|
|
117
|
-
* punch (Phillips 2016, p. 112).
|
|
118
|
-
* @see reo:pattern
|
|
119
|
-
*/
|
|
120
|
-
pattern?: 'regular' | 'accelerating' | 'staggering';
|
|
121
112
|
}
|
|
122
113
|
/**
|
|
123
114
|
* Something that lies on a face of the paper rather than through it. A
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { ObjectAssumption } from "./Assumption.js";
|
|
2
|
+
import { ConditionState } from "./ConditionState.js";
|
|
3
|
+
import { Measure, Millimeters } from "./Quantity.js";
|
|
4
|
+
import { WithId, WithType } from "./utils.js";
|
|
5
|
+
/**
|
|
6
|
+
* The pitch in the engineering sense: the distance along the roll from
|
|
7
|
+
* one punch of a chain to the next, which is the slot one firing cut
|
|
8
|
+
* together with the bridge of paper left before the next. It is taken
|
|
9
|
+
* on held notes, whose chains repeat it, as the median over them. It
|
|
10
|
+
* runs along the roll, and is another thing than the hole separation,
|
|
11
|
+
* which is the distance across the roll from one track to the next.
|
|
12
|
+
* @see crm:E54 Dimension
|
|
13
|
+
*/
|
|
14
|
+
export interface ChainPitch extends Measure<'mm'> {
|
|
15
|
+
/**
|
|
16
|
+
* The length along the roll of one slot of a chain.
|
|
17
|
+
* @see reo:slot
|
|
18
|
+
*/
|
|
19
|
+
slot?: Millimeters;
|
|
20
|
+
/**
|
|
21
|
+
* The paper left standing between two slots of a chain. Slot and
|
|
22
|
+
* bridge are medians of their own and need not add up to the pitch.
|
|
23
|
+
* @see reo:bridge
|
|
24
|
+
*/
|
|
25
|
+
bridge?: Millimeters;
|
|
26
|
+
/**
|
|
27
|
+
* How many pitches the median was taken over.
|
|
28
|
+
* @see reo:sampleSize
|
|
29
|
+
*/
|
|
30
|
+
n?: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* The step by which the perforator moved the paper on, read as the
|
|
34
|
+
* period the lengths of the slots keep: a slot is the punch together
|
|
35
|
+
* with a whole number of steps, so its lengths fall on a comb of this
|
|
36
|
+
* spacing.
|
|
37
|
+
* @see crm:E54 Dimension
|
|
38
|
+
*/
|
|
39
|
+
export interface Advance extends Measure<'mm'> {
|
|
40
|
+
/**
|
|
41
|
+
* How closely the lengths keep the period, from 0 where they scatter
|
|
42
|
+
* to 1 where every one falls on the comb: the mean resultant length
|
|
43
|
+
* of the lengths folded onto it. A period found weakly is the result
|
|
44
|
+
* of a search all the same; the belief it is stated with says how far
|
|
45
|
+
* it is held to be the machine's step.
|
|
46
|
+
* @see reo:strength
|
|
47
|
+
*/
|
|
48
|
+
strength?: number;
|
|
49
|
+
/**
|
|
50
|
+
* How many slot lengths were folded.
|
|
51
|
+
* @see reo:sampleSize
|
|
52
|
+
*/
|
|
53
|
+
n?: number;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* How the perforator was set when it punched the copy, as far as the
|
|
57
|
+
* perforations show it. No time is stated: how long a machine kept a
|
|
58
|
+
* setting is for a comparison across rolls to find out.
|
|
59
|
+
* @see crm:E3 Condition State
|
|
60
|
+
*/
|
|
61
|
+
export interface PerforatorSetting extends ConditionState<'setting'> {
|
|
62
|
+
/**
|
|
63
|
+
* The diameter of the round punch. Taken across the roll, it is the
|
|
64
|
+
* one value of the setting that neither the scale along the roll nor
|
|
65
|
+
* the shrinkage of the paper enters.
|
|
66
|
+
* @see reo:punchDiameter
|
|
67
|
+
*/
|
|
68
|
+
punchDiameter?: ObjectAssumption<Measure<'mm'>>;
|
|
69
|
+
/**
|
|
70
|
+
* @see reo:chainPitch
|
|
71
|
+
*/
|
|
72
|
+
chainPitch?: ObjectAssumption<ChainPitch>;
|
|
73
|
+
/**
|
|
74
|
+
* @see reo:advance
|
|
75
|
+
*/
|
|
76
|
+
advance?: ObjectAssumption<Advance>;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* How the punches of a perforator were driven, after Phillips (2016,
|
|
80
|
+
* pp. 112 f.): all at once by one ram head, or each by a driver of its
|
|
81
|
+
* own. `ontology/types.ttl` defines them, and a test holds this list
|
|
82
|
+
* against it.
|
|
83
|
+
* @see crm:E55 Type
|
|
84
|
+
*/
|
|
85
|
+
export declare const drives: readonly [{
|
|
86
|
+
readonly id: 'https://w3id.org/reo/type/drive/ram-head';
|
|
87
|
+
readonly name: 'ram head';
|
|
88
|
+
}, {
|
|
89
|
+
readonly id: 'https://w3id.org/reo/type/drive/asynchronous';
|
|
90
|
+
readonly name: 'asynchronous';
|
|
91
|
+
}];
|
|
92
|
+
export type DriveId = typeof drives[number]['id'];
|
|
93
|
+
/**
|
|
94
|
+
* A drive, named by its IRI alone.
|
|
95
|
+
* @see crm:E55 Type
|
|
96
|
+
*/
|
|
97
|
+
export interface Drive {
|
|
98
|
+
/** The IRI the type vocabulary gives the drive. */
|
|
99
|
+
readonly id: DriveId;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* The machine that punched the copy. It stands for this production
|
|
103
|
+
* alone. Whether it is the one another copy was punched on is left to a
|
|
104
|
+
* statement of identity made about it elsewhere, which its id allows.
|
|
105
|
+
* @see crm:E22 Human-Made Object
|
|
106
|
+
*/
|
|
107
|
+
export interface Perforator extends WithType<'Perforator'>, WithId {
|
|
108
|
+
/**
|
|
109
|
+
* How its punches were driven, as the rows of its chains show it:
|
|
110
|
+
* in line across the tracks where one ram head drove them all, and
|
|
111
|
+
* staggered where each punch had a driver of its own. It is part of
|
|
112
|
+
* how the machine was built and so no part of its setting.
|
|
113
|
+
* @see reo:drive
|
|
114
|
+
*/
|
|
115
|
+
drive?: ObjectAssumption<Drive>;
|
|
116
|
+
/**
|
|
117
|
+
* @see crm:P44 has condition
|
|
118
|
+
*/
|
|
119
|
+
condition?: PerforatorSetting;
|
|
120
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How the punches of a perforator were driven, after Phillips (2016,
|
|
3
|
+
* pp. 112 f.): all at once by one ram head, or each by a driver of its
|
|
4
|
+
* own. `ontology/types.ttl` defines them, and a test holds this list
|
|
5
|
+
* against it.
|
|
6
|
+
* @see crm:E55 Type
|
|
7
|
+
*/
|
|
8
|
+
export const drives = [
|
|
9
|
+
{ id: 'https://w3id.org/reo/type/drive/ram-head', name: 'ram head' },
|
|
10
|
+
{ id: 'https://w3id.org/reo/type/drive/asynchronous', name: 'asynchronous' }
|
|
11
|
+
];
|
package/lib/RollCopy.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { WithId, WithType } from "./utils.js";
|
|
|
8
8
|
import { Agent, Concept } from "./Agent.js";
|
|
9
9
|
import { FeatureSource } from "./FeatureSource.js";
|
|
10
10
|
import { Measure, Millimeters, Quantity, Track } from "./Quantity.js";
|
|
11
|
+
import { Perforator } from "./Perforator.js";
|
|
11
12
|
/**
|
|
12
13
|
* This condition state is used to describe the roll's
|
|
13
14
|
* paper shrinkage or stretching. It might be calculated
|
|
@@ -114,6 +115,12 @@ export interface ProductionEvent {
|
|
|
114
115
|
* @see reo:paperSpeed
|
|
115
116
|
*/
|
|
116
117
|
speed?: ObjectAssumption<PaperSpeed>;
|
|
118
|
+
/**
|
|
119
|
+
* The perforator the copy was punched on, with the drive and the
|
|
120
|
+
* setting its perforations show.
|
|
121
|
+
* @see crm:P16 used specific object
|
|
122
|
+
*/
|
|
123
|
+
perforator?: Perforator;
|
|
117
124
|
/**
|
|
118
125
|
* The features the copy came from its punching with: the note and
|
|
119
126
|
* expression perforations, and now and then a mark the perforator
|
|
@@ -204,8 +211,10 @@ export interface RollCopy extends WithType<'RollCopy'>, WithId {
|
|
|
204
211
|
ops: Array<'shifted' | 'stretched' | 'shortened'>;
|
|
205
212
|
/**
|
|
206
213
|
* Physical measurements of this roll copy, including
|
|
207
|
-
* dimensions,
|
|
208
|
-
*
|
|
214
|
+
* dimensions, hole separation, margins, shift corrections,
|
|
215
|
+
* and information about the measuring software. What the
|
|
216
|
+
* perforations tell about the machine that cut them is stated
|
|
217
|
+
* with the production.
|
|
209
218
|
* @see crm:P39i was measured by
|
|
210
219
|
*/
|
|
211
220
|
measurements: Partial<{
|
|
@@ -231,13 +240,11 @@ export interface RollCopy extends WithType<'RollCopy'>, WithId {
|
|
|
231
240
|
unit: 'mm';
|
|
232
241
|
};
|
|
233
242
|
/**
|
|
234
|
-
* The
|
|
235
|
-
*
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
* The distance between adjacent tracker bar holes, in the
|
|
240
|
-
* unit the scan was measured in.
|
|
243
|
+
* The distance across the roll from the centre of one track to
|
|
244
|
+
* the next, the track pitch or Teilung, in the unit the scan was
|
|
245
|
+
* measured in. It is fixed by the tracker bar the roll was cut
|
|
246
|
+
* for, and is another thing than the chain pitch, which runs
|
|
247
|
+
* along the roll.
|
|
241
248
|
* @see reo:holeSeparation
|
|
242
249
|
*/
|
|
243
250
|
holeSeparation: Measure<'px'> | Measure<'mm'>;
|
|
@@ -400,6 +407,8 @@ export declare const isPaperStretch: (condition: RollConditionAssignment) => boo
|
|
|
400
407
|
* before the systems were told apart; `reservationsAbout` says so.
|
|
401
408
|
*/
|
|
402
409
|
export declare const barOf: (copy: Pick<RollCopy, 'production'>) => TrackerBar;
|
|
410
|
+
/** The diameter of the punch the copy was cut with, where the edition holds it true or likely. */
|
|
411
|
+
export declare const punchDiameterOf: (copy: Pick<RollCopy, 'production'>) => Millimeters | undefined;
|
|
403
412
|
/**
|
|
404
413
|
* Reads the features of a copy as the tracker bar would read them.
|
|
405
414
|
* Holes on a position the bar does not read carry no symbol and are
|
package/lib/RollCopy.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { v4 } from "uuid";
|
|
2
2
|
import { welteT100 } from "./systems/welteT100/bar.js";
|
|
3
3
|
import { trackerBarOf } from "./systems/index.js";
|
|
4
|
-
import { assignReference } from "./Assumption.js";
|
|
4
|
+
import { assignReference, certaintyOf, isAsserted } from "./Assumption.js";
|
|
5
5
|
import { px, track } from "./Quantity.js";
|
|
6
6
|
export const rollConditions = [
|
|
7
7
|
'general',
|
|
@@ -47,6 +47,11 @@ export const isPaperStretch = (condition) => condition.conditionType === 'paper-
|
|
|
47
47
|
* before the systems were told apart; `reservationsAbout` says so.
|
|
48
48
|
*/
|
|
49
49
|
export const barOf = (copy) => trackerBarOf(copy.production?.system) ?? welteT100;
|
|
50
|
+
/** The diameter of the punch the copy was cut with, where the edition holds it true or likely. */
|
|
51
|
+
export const punchDiameterOf = (copy) => {
|
|
52
|
+
const diameter = copy.production?.perforator?.condition?.punchDiameter;
|
|
53
|
+
return diameter && isAsserted(certaintyOf(diameter)) ? diameter.value : undefined;
|
|
54
|
+
};
|
|
50
55
|
/**
|
|
51
56
|
* Reads the features of a copy as the tracker bar would read them.
|
|
52
57
|
* Holes on a position the bar does not read carry no symbol and are
|
package/lib/importJsonLd.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { derivedKeys } from "./asJsonLd.js";
|
|
2
|
-
import { migrate } from "./migrate.js";
|
|
2
|
+
import { migrate, plainCopyId } from "./migrate.js";
|
|
3
3
|
import { isDateString } from "./utils.js";
|
|
4
4
|
export const importDate = (str) => {
|
|
5
5
|
const [y, m, d] = str.split('-').map(s => parseInt(s, 10));
|
|
@@ -49,7 +49,7 @@ const withPlainCopyIds = (json) => ({
|
|
|
49
49
|
...json,
|
|
50
50
|
copies: (json.copies ?? []).map((copy) => ({
|
|
51
51
|
...copy,
|
|
52
|
-
'@id': typeof copy['@id'] === 'string' ? copy['@id']
|
|
52
|
+
'@id': typeof copy['@id'] === 'string' ? plainCopyId(copy['@id']) : copy['@id']
|
|
53
53
|
}))
|
|
54
54
|
});
|
|
55
55
|
export const importJsonLd = (json) => {
|
package/lib/index.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export * from './systems/welteT98/bar.js';
|
|
|
16
16
|
export * from './systems/index.js';
|
|
17
17
|
export * from './ReproducingSystem.js';
|
|
18
18
|
export * from './FeatureSource.js';
|
|
19
|
+
export * from './Perforator.js';
|
|
19
20
|
export * from './RollCopy.js';
|
|
20
21
|
export * from './procedures.js';
|
|
21
22
|
export * from './vocabulary.js';
|
package/lib/index.js
CHANGED
|
@@ -16,6 +16,7 @@ export * from './systems/welteT98/bar.js';
|
|
|
16
16
|
export * from './systems/index.js';
|
|
17
17
|
export * from './ReproducingSystem.js';
|
|
18
18
|
export * from './FeatureSource.js';
|
|
19
|
+
export * from './Perforator.js';
|
|
19
20
|
export * from './RollCopy.js';
|
|
20
21
|
export * from './procedures.js';
|
|
21
22
|
export * from './vocabulary.js';
|
package/lib/migrate.d.ts
CHANGED
|
@@ -11,5 +11,7 @@
|
|
|
11
11
|
* had renamed before.
|
|
12
12
|
*/
|
|
13
13
|
type Json = any;
|
|
14
|
+
/** A copy's id without the `copy/` that documents of earlier releases put before it. */
|
|
15
|
+
export declare const plainCopyId: (id: string) => string;
|
|
14
16
|
export declare const migrate: (edition: Json) => Json;
|
|
15
17
|
export {};
|
package/lib/migrate.js
CHANGED
|
@@ -117,6 +117,74 @@ const withScale = (node) => {
|
|
|
117
117
|
const factor = (node.conditions ?? []).find(isPaperStretch)?.factor;
|
|
118
118
|
return factor === undefined ? node : { ...node, measurements: { ...node.measurements, scale: factor } };
|
|
119
119
|
};
|
|
120
|
+
/** A copy's id without the `copy/` that documents of earlier releases put before it. */
|
|
121
|
+
export const plainCopyId = (id) => id.replace(/^copy\//, '');
|
|
122
|
+
/**
|
|
123
|
+
* The perforator the copy states, or a new one named after the copy, so
|
|
124
|
+
* that a file migrated twice names it the same way.
|
|
125
|
+
*/
|
|
126
|
+
const perforatorOf = (copy) => copy.production?.perforator ?? { '@type': 'Perforator', '@id': `perforator_${plainCopyId(copy['@id'])}` };
|
|
127
|
+
/**
|
|
128
|
+
* The punch diameter was a measurement of the copy before it was stated
|
|
129
|
+
* as the setting of the perforator that cut it. A diameter of -1 stood
|
|
130
|
+
* for one nobody had measured and is left out.
|
|
131
|
+
*/
|
|
132
|
+
const withPerforator = (node) => {
|
|
133
|
+
const diameter = node.measurements?.punchDiameter;
|
|
134
|
+
if (diameter === undefined)
|
|
135
|
+
return node;
|
|
136
|
+
const { punchDiameter: _moved, ...measurements } = node.measurements;
|
|
137
|
+
if (!(diameter?.value > 0))
|
|
138
|
+
return { ...node, measurements };
|
|
139
|
+
const perforator = perforatorOf(node);
|
|
140
|
+
return {
|
|
141
|
+
...node,
|
|
142
|
+
measurements,
|
|
143
|
+
production: {
|
|
144
|
+
...node.production,
|
|
145
|
+
perforator: {
|
|
146
|
+
...perforator,
|
|
147
|
+
condition: {
|
|
148
|
+
'@type': 'ConditionState',
|
|
149
|
+
conditionType: 'setting',
|
|
150
|
+
...perforator.condition,
|
|
151
|
+
punchDiameter: diameter
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
/** A perforator was first written without a type. */
|
|
158
|
+
const withTypedPerforator = (node) => {
|
|
159
|
+
const perforator = node.perforator;
|
|
160
|
+
if (!perforator || typeof perforator !== 'object' || perforator['@type'])
|
|
161
|
+
return node;
|
|
162
|
+
return { ...node, perforator: { '@type': 'Perforator', ...perforator } };
|
|
163
|
+
};
|
|
164
|
+
const asynchronous = 'https://w3id.org/reo/type/drive/asynchronous';
|
|
165
|
+
/**
|
|
166
|
+
* Each hole once stated its punching pattern. A staggering hole the copy
|
|
167
|
+
* was punched with shows that its perforator drove each punch on its
|
|
168
|
+
* own; one a later act made shows nothing about the machine. Regular
|
|
169
|
+
* and accelerating bridges are not carried over: the chain pitch states
|
|
170
|
+
* the one, and for the other no source was found. The features are in
|
|
171
|
+
* their acts here, since a node is migrated before its children are.
|
|
172
|
+
*/
|
|
173
|
+
const withDriveOfStaggering = (node) => {
|
|
174
|
+
const produced = node.production?.produced;
|
|
175
|
+
if (!Array.isArray(produced) || !produced.some((feature) => feature?.pattern === 'staggering'))
|
|
176
|
+
return node;
|
|
177
|
+
const perforator = perforatorOf(node);
|
|
178
|
+
if (perforator.drive)
|
|
179
|
+
return node;
|
|
180
|
+
return { ...node, production: { ...node.production, perforator: { ...perforator, drive: { '@id': asynchronous } } } };
|
|
181
|
+
};
|
|
182
|
+
const withoutPattern = (node) => {
|
|
183
|
+
if (node['@type'] !== 'Hole' || !Object.hasOwn(node, 'pattern'))
|
|
184
|
+
return node;
|
|
185
|
+
const { pattern: _moved, ...rest } = node;
|
|
186
|
+
return rest;
|
|
187
|
+
};
|
|
120
188
|
/** A derivation written as a single one, before a version could name several. */
|
|
121
189
|
const isSingleDerivation = (basedOn) => basedOn !== null && typeof basedOn === 'object' && !Array.isArray(basedOn);
|
|
122
190
|
const withDerivationList = (node) => isSingleDerivation(node.basedOn) ? { ...node, basedOn: [node.basedOn] } : node;
|
|
@@ -233,8 +301,8 @@ const withTimeSpanDates = (node) => {
|
|
|
233
301
|
return { ...rest, within };
|
|
234
302
|
};
|
|
235
303
|
const migrateNode = (node) => [withRenamedKeys, withTypology, withoutVersionType, withoutVersionSiglum, withLowerCaseTerms, withSplitMethod, withReferences, withKeeper, withoutEmptyKeeper,
|
|
236
|
-
withProductionNodes, withScale, withDerivationList, withReadingKind, withTimeSpanDates,
|
|
237
|
-
withBorneFeaturesNamed, withFeaturesInActs]
|
|
304
|
+
withPerforator, withProductionNodes, withTypedPerforator, withScale, withDerivationList, withReadingKind, withTimeSpanDates,
|
|
305
|
+
withoutFeatureKind, withBorneFeaturesNamed, withFeaturesInActs, withDriveOfStaggering, withoutPattern]
|
|
238
306
|
.reduce((result, step) => step(result), node);
|
|
239
307
|
/** The items each walked, or the very same list where the walk changed none. */
|
|
240
308
|
const walked = (items) => {
|
|
@@ -157,7 +157,21 @@ export function readFromStanfordAton(atonString, { trackShift, system = welteT10
|
|
|
157
157
|
id: v4(),
|
|
158
158
|
ops: [],
|
|
159
159
|
conditions: [],
|
|
160
|
-
production: {
|
|
160
|
+
production: {
|
|
161
|
+
system: systemOf(system),
|
|
162
|
+
...(punchDiameter !== undefined && {
|
|
163
|
+
perforator: {
|
|
164
|
+
type: 'Perforator',
|
|
165
|
+
id: `perforator_${v4()}`,
|
|
166
|
+
condition: {
|
|
167
|
+
type: 'ConditionState',
|
|
168
|
+
conditionType: 'setting',
|
|
169
|
+
punchDiameter: { value: punchDiameter, unit: 'mm' }
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}),
|
|
173
|
+
produced: features
|
|
174
|
+
},
|
|
161
175
|
modifications: [],
|
|
162
176
|
...((scan ?? stanford) && { scan: scan ?? stanford?.scan }),
|
|
163
177
|
measurements: {
|
|
@@ -166,9 +180,6 @@ export function readFromStanfordAton(atonString, { trackShift, system = welteT10
|
|
|
166
180
|
height: inMillimeters(readPx(json.ROLLINFO.IMAGE_LENGTH), dpi),
|
|
167
181
|
unit: 'mm'
|
|
168
182
|
},
|
|
169
|
-
...(punchDiameter !== undefined && {
|
|
170
|
-
punchDiameter: { value: punchDiameter, unit: 'mm' }
|
|
171
|
-
}),
|
|
172
183
|
holeSeparation: {
|
|
173
184
|
value: separation,
|
|
174
185
|
unit: 'px'
|
package/lib/schema.json
CHANGED
|
@@ -436,6 +436,13 @@
|
|
|
436
436
|
"type": "object",
|
|
437
437
|
"ontology": "lrmoo:R76 is derivative of"
|
|
438
438
|
},
|
|
439
|
+
"DriveId": {
|
|
440
|
+
"enum": [
|
|
441
|
+
"https://w3id.org/reo/type/drive/ram-head",
|
|
442
|
+
"https://w3id.org/reo/type/drive/asynchronous"
|
|
443
|
+
],
|
|
444
|
+
"type": "string"
|
|
445
|
+
},
|
|
439
446
|
"Edit": {
|
|
440
447
|
"description": "A set of edits transforms a version of a roll into another version. Edits insert or delete symbols, or both (= replace). Edits may be motivated by a given set of reasons, e.g. to add an additional accent or to correct an error. If an edit is the interpretation of a metamark, such as a pencil mark, this should be made explicit using a meaning comprehension on the `@annotation` field.",
|
|
441
448
|
"properties": {
|
|
@@ -895,16 +902,6 @@
|
|
|
895
902
|
"description": "Horizontal span of the feature on the roll.",
|
|
896
903
|
"ontology": "crm:P43 has dimension"
|
|
897
904
|
},
|
|
898
|
-
"pattern": {
|
|
899
|
-
"description": "The punching pattern of the hole. Regular holes have evenly-spaced bridges, accelerating holes have decreasing bridge widths, and staggering holes do not align in rows across the tracks, the mark of an asynchronous perforator with a separate driver for each punch (Phillips 2016, p. 112).",
|
|
900
|
-
"enum": [
|
|
901
|
-
"regular",
|
|
902
|
-
"accelerating",
|
|
903
|
-
"staggering"
|
|
904
|
-
],
|
|
905
|
-
"type": "string",
|
|
906
|
-
"ontology": "reo:pattern"
|
|
907
|
-
},
|
|
908
905
|
"vertical": {
|
|
909
906
|
"$ref": "#/definitions/VerticalSpan",
|
|
910
907
|
"description": "Vertical span of the feature on the roll.",
|
|
@@ -1448,16 +1445,6 @@
|
|
|
1448
1445
|
"description": "Horizontal span of the feature on the roll. Left out by a feature a patch bears.",
|
|
1449
1446
|
"ontology": "crm:P43 has dimension"
|
|
1450
1447
|
},
|
|
1451
|
-
"pattern": {
|
|
1452
|
-
"description": "The punching pattern of the hole. Regular holes have evenly-spaced bridges, accelerating holes have decreasing bridge widths, and staggering holes do not align in rows across the tracks, the mark of an asynchronous perforator with a separate driver for each punch (Phillips 2016, p. 112).",
|
|
1453
|
-
"enum": [
|
|
1454
|
-
"regular",
|
|
1455
|
-
"accelerating",
|
|
1456
|
-
"staggering"
|
|
1457
|
-
],
|
|
1458
|
-
"type": "string",
|
|
1459
|
-
"ontology": "reo:pattern"
|
|
1460
|
-
},
|
|
1461
1448
|
"vertical": {
|
|
1462
1449
|
"$ref": "#/definitions/VerticalSpan",
|
|
1463
1450
|
"description": "Vertical span of the feature on the roll. Left out by a feature a patch bears.",
|
|
@@ -1854,6 +1841,56 @@
|
|
|
1854
1841
|
],
|
|
1855
1842
|
"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."
|
|
1856
1843
|
},
|
|
1844
|
+
"ObjectAssumption<Advance>": {
|
|
1845
|
+
"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.",
|
|
1846
|
+
"properties": {
|
|
1847
|
+
"@annotation": {
|
|
1848
|
+
"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.",
|
|
1849
|
+
"properties": {
|
|
1850
|
+
"belief": {
|
|
1851
|
+
"$ref": "#/definitions/Belief",
|
|
1852
|
+
"description": "The belief held about the annotated statement.",
|
|
1853
|
+
"ontology": "crminf:J4i is subject of"
|
|
1854
|
+
},
|
|
1855
|
+
"@id": {
|
|
1856
|
+
"description": "A unique identifier for this object.",
|
|
1857
|
+
"type": "string"
|
|
1858
|
+
}
|
|
1859
|
+
},
|
|
1860
|
+
"required": [
|
|
1861
|
+
"belief",
|
|
1862
|
+
"@id"
|
|
1863
|
+
],
|
|
1864
|
+
"type": "object"
|
|
1865
|
+
},
|
|
1866
|
+
"n": {
|
|
1867
|
+
"description": "How many slot lengths were folded.",
|
|
1868
|
+
"type": "number",
|
|
1869
|
+
"ontology": "reo:sampleSize"
|
|
1870
|
+
},
|
|
1871
|
+
"strength": {
|
|
1872
|
+
"description": "How closely the lengths keep the period, from 0 where they scatter to 1 where every one falls on the comb: the mean resultant length of the lengths folded onto it. A period found weakly is the result of a search all the same; the belief it is stated with says how far it is held to be the machine's step.",
|
|
1873
|
+
"type": "number",
|
|
1874
|
+
"ontology": "reo:strength"
|
|
1875
|
+
},
|
|
1876
|
+
"unit": {
|
|
1877
|
+
"const": "mm",
|
|
1878
|
+
"description": "The unit of measurement.",
|
|
1879
|
+
"type": "string",
|
|
1880
|
+
"ontology": "crm:P91 has unit"
|
|
1881
|
+
},
|
|
1882
|
+
"value": {
|
|
1883
|
+
"$ref": "#/definitions/Quantity%3C%22mm%22%3E",
|
|
1884
|
+
"description": "The measured value.",
|
|
1885
|
+
"ontology": "crm:P90 has value"
|
|
1886
|
+
}
|
|
1887
|
+
},
|
|
1888
|
+
"required": [
|
|
1889
|
+
"unit",
|
|
1890
|
+
"value"
|
|
1891
|
+
],
|
|
1892
|
+
"type": "object"
|
|
1893
|
+
},
|
|
1857
1894
|
"ObjectAssumption<Agent>": {
|
|
1858
1895
|
"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.",
|
|
1859
1896
|
"properties": {
|
|
@@ -1908,6 +1945,61 @@
|
|
|
1908
1945
|
],
|
|
1909
1946
|
"type": "object"
|
|
1910
1947
|
},
|
|
1948
|
+
"ObjectAssumption<ChainPitch>": {
|
|
1949
|
+
"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.",
|
|
1950
|
+
"properties": {
|
|
1951
|
+
"@annotation": {
|
|
1952
|
+
"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.",
|
|
1953
|
+
"properties": {
|
|
1954
|
+
"belief": {
|
|
1955
|
+
"$ref": "#/definitions/Belief",
|
|
1956
|
+
"description": "The belief held about the annotated statement.",
|
|
1957
|
+
"ontology": "crminf:J4i is subject of"
|
|
1958
|
+
},
|
|
1959
|
+
"@id": {
|
|
1960
|
+
"description": "A unique identifier for this object.",
|
|
1961
|
+
"type": "string"
|
|
1962
|
+
}
|
|
1963
|
+
},
|
|
1964
|
+
"required": [
|
|
1965
|
+
"belief",
|
|
1966
|
+
"@id"
|
|
1967
|
+
],
|
|
1968
|
+
"type": "object"
|
|
1969
|
+
},
|
|
1970
|
+
"bridge": {
|
|
1971
|
+
"$ref": "#/definitions/Millimeters",
|
|
1972
|
+
"description": "The paper left standing between two slots of a chain. Slot and bridge are medians of their own and need not add up to the pitch.",
|
|
1973
|
+
"ontology": "reo:bridge"
|
|
1974
|
+
},
|
|
1975
|
+
"n": {
|
|
1976
|
+
"description": "How many pitches the median was taken over.",
|
|
1977
|
+
"type": "number",
|
|
1978
|
+
"ontology": "reo:sampleSize"
|
|
1979
|
+
},
|
|
1980
|
+
"slot": {
|
|
1981
|
+
"$ref": "#/definitions/Millimeters",
|
|
1982
|
+
"description": "The length along the roll of one slot of a chain.",
|
|
1983
|
+
"ontology": "reo:slot"
|
|
1984
|
+
},
|
|
1985
|
+
"unit": {
|
|
1986
|
+
"const": "mm",
|
|
1987
|
+
"description": "The unit of measurement.",
|
|
1988
|
+
"type": "string",
|
|
1989
|
+
"ontology": "crm:P91 has unit"
|
|
1990
|
+
},
|
|
1991
|
+
"value": {
|
|
1992
|
+
"$ref": "#/definitions/Quantity%3C%22mm%22%3E",
|
|
1993
|
+
"description": "The measured value.",
|
|
1994
|
+
"ontology": "crm:P90 has value"
|
|
1995
|
+
}
|
|
1996
|
+
},
|
|
1997
|
+
"required": [
|
|
1998
|
+
"unit",
|
|
1999
|
+
"value"
|
|
2000
|
+
],
|
|
2001
|
+
"type": "object"
|
|
2002
|
+
},
|
|
1911
2003
|
"ObjectAssumption<CollationTolerance>": {
|
|
1912
2004
|
"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.",
|
|
1913
2005
|
"properties": {
|
|
@@ -2189,6 +2281,38 @@
|
|
|
2189
2281
|
],
|
|
2190
2282
|
"type": "object"
|
|
2191
2283
|
},
|
|
2284
|
+
"ObjectAssumption<Drive>": {
|
|
2285
|
+
"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.",
|
|
2286
|
+
"properties": {
|
|
2287
|
+
"@annotation": {
|
|
2288
|
+
"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.",
|
|
2289
|
+
"properties": {
|
|
2290
|
+
"belief": {
|
|
2291
|
+
"$ref": "#/definitions/Belief",
|
|
2292
|
+
"description": "The belief held about the annotated statement.",
|
|
2293
|
+
"ontology": "crminf:J4i is subject of"
|
|
2294
|
+
},
|
|
2295
|
+
"@id": {
|
|
2296
|
+
"description": "A unique identifier for this object.",
|
|
2297
|
+
"type": "string"
|
|
2298
|
+
}
|
|
2299
|
+
},
|
|
2300
|
+
"required": [
|
|
2301
|
+
"belief",
|
|
2302
|
+
"@id"
|
|
2303
|
+
],
|
|
2304
|
+
"type": "object"
|
|
2305
|
+
},
|
|
2306
|
+
"@id": {
|
|
2307
|
+
"$ref": "#/definitions/DriveId",
|
|
2308
|
+
"description": "The IRI the type vocabulary gives the drive."
|
|
2309
|
+
}
|
|
2310
|
+
},
|
|
2311
|
+
"required": [
|
|
2312
|
+
"@id"
|
|
2313
|
+
],
|
|
2314
|
+
"type": "object"
|
|
2315
|
+
},
|
|
2192
2316
|
"ObjectAssumption<Instrument>": {
|
|
2193
2317
|
"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.",
|
|
2194
2318
|
"properties": {
|
|
@@ -2238,6 +2362,46 @@
|
|
|
2238
2362
|
],
|
|
2239
2363
|
"type": "object"
|
|
2240
2364
|
},
|
|
2365
|
+
"ObjectAssumption<Measure<\"mm\">>": {
|
|
2366
|
+
"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.",
|
|
2367
|
+
"properties": {
|
|
2368
|
+
"@annotation": {
|
|
2369
|
+
"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.",
|
|
2370
|
+
"properties": {
|
|
2371
|
+
"belief": {
|
|
2372
|
+
"$ref": "#/definitions/Belief",
|
|
2373
|
+
"description": "The belief held about the annotated statement.",
|
|
2374
|
+
"ontology": "crminf:J4i is subject of"
|
|
2375
|
+
},
|
|
2376
|
+
"@id": {
|
|
2377
|
+
"description": "A unique identifier for this object.",
|
|
2378
|
+
"type": "string"
|
|
2379
|
+
}
|
|
2380
|
+
},
|
|
2381
|
+
"required": [
|
|
2382
|
+
"belief",
|
|
2383
|
+
"@id"
|
|
2384
|
+
],
|
|
2385
|
+
"type": "object"
|
|
2386
|
+
},
|
|
2387
|
+
"unit": {
|
|
2388
|
+
"const": "mm",
|
|
2389
|
+
"description": "The unit of measurement.",
|
|
2390
|
+
"type": "string",
|
|
2391
|
+
"ontology": "crm:P91 has unit"
|
|
2392
|
+
},
|
|
2393
|
+
"value": {
|
|
2394
|
+
"$ref": "#/definitions/Quantity%3C%22mm%22%3E",
|
|
2395
|
+
"description": "The measured value.",
|
|
2396
|
+
"ontology": "crm:P90 has value"
|
|
2397
|
+
}
|
|
2398
|
+
},
|
|
2399
|
+
"required": [
|
|
2400
|
+
"unit",
|
|
2401
|
+
"value"
|
|
2402
|
+
],
|
|
2403
|
+
"type": "object"
|
|
2404
|
+
},
|
|
2241
2405
|
"ObjectAssumption<PaperSpeed>": {
|
|
2242
2406
|
"anyOf": [
|
|
2243
2407
|
{
|
|
@@ -2514,6 +2678,77 @@
|
|
|
2514
2678
|
],
|
|
2515
2679
|
"type": "object"
|
|
2516
2680
|
},
|
|
2681
|
+
"Perforator": {
|
|
2682
|
+
"description": "The machine that punched the copy. It stands for this production alone. Whether it is the one another copy was punched on is left to a statement of identity made about it elsewhere, which its id allows.",
|
|
2683
|
+
"properties": {
|
|
2684
|
+
"condition": {
|
|
2685
|
+
"$ref": "#/definitions/PerforatorSetting",
|
|
2686
|
+
"ontology": "crm:P44 has condition"
|
|
2687
|
+
},
|
|
2688
|
+
"drive": {
|
|
2689
|
+
"$ref": "#/definitions/ObjectAssumption%3CDrive%3E",
|
|
2690
|
+
"description": "How its punches were driven, as the rows of its chains show it: in line across the tracks where one ram head drove them all, and staggered where each punch had a driver of its own. It is part of how the machine was built and so no part of its setting.",
|
|
2691
|
+
"ontology": "reo:drive"
|
|
2692
|
+
},
|
|
2693
|
+
"@id": {
|
|
2694
|
+
"description": "A unique identifier for this object.",
|
|
2695
|
+
"type": "string"
|
|
2696
|
+
},
|
|
2697
|
+
"@type": {
|
|
2698
|
+
"const": "Perforator",
|
|
2699
|
+
"description": "The type discriminator for this object.",
|
|
2700
|
+
"type": "string",
|
|
2701
|
+
"ontology": "rdf:type"
|
|
2702
|
+
}
|
|
2703
|
+
},
|
|
2704
|
+
"required": [
|
|
2705
|
+
"@id",
|
|
2706
|
+
"@type"
|
|
2707
|
+
],
|
|
2708
|
+
"type": "object",
|
|
2709
|
+
"ontology": "crm:E22 Human-Made Object"
|
|
2710
|
+
},
|
|
2711
|
+
"PerforatorSetting": {
|
|
2712
|
+
"description": "How the perforator was set when it punched the copy, as far as the perforations show it. No time is stated: how long a machine kept a setting is for a comparison across rolls to find out.",
|
|
2713
|
+
"properties": {
|
|
2714
|
+
"advance": {
|
|
2715
|
+
"$ref": "#/definitions/ObjectAssumption%3CAdvance%3E",
|
|
2716
|
+
"ontology": "reo:advance"
|
|
2717
|
+
},
|
|
2718
|
+
"chainPitch": {
|
|
2719
|
+
"$ref": "#/definitions/ObjectAssumption%3CChainPitch%3E",
|
|
2720
|
+
"ontology": "reo:chainPitch"
|
|
2721
|
+
},
|
|
2722
|
+
"conditionType": {
|
|
2723
|
+
"const": "setting",
|
|
2724
|
+
"description": "The kind of condition, from the list the roll or the kind of feature allows.",
|
|
2725
|
+
"type": "string",
|
|
2726
|
+
"ontology": "crm:P2 has type"
|
|
2727
|
+
},
|
|
2728
|
+
"description": {
|
|
2729
|
+
"description": "A free-text description of the condition, providing details beyond the type classification.",
|
|
2730
|
+
"type": "string",
|
|
2731
|
+
"ontology": "crm:P3 has note"
|
|
2732
|
+
},
|
|
2733
|
+
"punchDiameter": {
|
|
2734
|
+
"$ref": "#/definitions/ObjectAssumption%3CMeasure%3C%22mm%22%3E%3E",
|
|
2735
|
+
"description": "The diameter of the round punch. Taken across the roll, it is the one value of the setting that neither the scale along the roll nor the shrinkage of the paper enters.",
|
|
2736
|
+
"ontology": "reo:punchDiameter"
|
|
2737
|
+
},
|
|
2738
|
+
"@type": {
|
|
2739
|
+
"const": "ConditionState",
|
|
2740
|
+
"description": "The type discriminator for this object.",
|
|
2741
|
+
"type": "string",
|
|
2742
|
+
"ontology": "rdf:type"
|
|
2743
|
+
}
|
|
2744
|
+
},
|
|
2745
|
+
"required": [
|
|
2746
|
+
"conditionType",
|
|
2747
|
+
"@type"
|
|
2748
|
+
],
|
|
2749
|
+
"type": "object",
|
|
2750
|
+
"ontology": "crm:E3 Condition State"
|
|
2751
|
+
},
|
|
2517
2752
|
"Person": {
|
|
2518
2753
|
"$ref": "#/definitions/Agent",
|
|
2519
2754
|
"description": "An agent that is a person."
|
|
@@ -2567,6 +2802,11 @@
|
|
|
2567
2802
|
"description": "The paper the roll copy was cut on.",
|
|
2568
2803
|
"ontology": "crm:P126 employed"
|
|
2569
2804
|
},
|
|
2805
|
+
"perforator": {
|
|
2806
|
+
"$ref": "#/definitions/Perforator",
|
|
2807
|
+
"description": "The perforator the copy was punched on, with the drive and the setting its perforations show.",
|
|
2808
|
+
"ontology": "crm:P16 used specific object"
|
|
2809
|
+
},
|
|
2570
2810
|
"produced": {
|
|
2571
2811
|
"description": "The features the copy came from its punching with: the note and expression perforations, and now and then a mark the perforator left. A reading of a scan finds every hole on the paper at once and states it here, and a feature an editor reads as the work of a later hand belongs in the act that made it, whichever kind of feature it is.",
|
|
2572
2812
|
"items": {
|
|
@@ -2742,7 +2982,7 @@
|
|
|
2742
2982
|
"ontology": "crm:P50 has current keeper"
|
|
2743
2983
|
},
|
|
2744
2984
|
"measurements": {
|
|
2745
|
-
"description": "Physical measurements of this roll copy, including dimensions,
|
|
2985
|
+
"description": "Physical measurements of this roll copy, including dimensions, hole separation, margins, shift corrections, and information about the measuring software. What the perforations tell about the machine that cut them is stated with the production.",
|
|
2746
2986
|
"properties": {
|
|
2747
2987
|
"dimensions": {
|
|
2748
2988
|
"description": "The physical dimensions of the roll.",
|
|
@@ -2781,7 +3021,7 @@
|
|
|
2781
3021
|
"$ref": "#/definitions/Measure%3C%22mm%22%3E"
|
|
2782
3022
|
}
|
|
2783
3023
|
],
|
|
2784
|
-
"description": "The distance
|
|
3024
|
+
"description": "The distance across the roll from the centre of one track to the next, the track pitch or Teilung, in the unit the scan was measured in. It is fixed by the tracker bar the roll was cut for, and is another thing than the chain pitch, which runs along the roll.",
|
|
2785
3025
|
"ontology": "reo:holeSeparation"
|
|
2786
3026
|
},
|
|
2787
3027
|
"margins": {
|
|
@@ -2823,11 +3063,6 @@
|
|
|
2823
3063
|
"type": "object",
|
|
2824
3064
|
"ontology": "crmdig:L23 used software or firmware"
|
|
2825
3065
|
},
|
|
2826
|
-
"punchDiameter": {
|
|
2827
|
-
"$ref": "#/definitions/Measure%3C%22mm%22%3E",
|
|
2828
|
-
"description": "The average diameter of punched holes.",
|
|
2829
|
-
"ontology": "reo:punchDiameter"
|
|
2830
|
-
},
|
|
2831
3066
|
"readerExtension": {
|
|
2832
3067
|
"description": "What a pneumatic reader added to this copy's holes, where it was taken off again. Such a reader reports how long a valve stayed open, which exceeds the perforation that opened it, so its holes are overlong by a constant while its onsets agree. Nothing for a copy read by other means, whose holes are the punched slots themselves. Not exported to RDF.",
|
|
2833
3068
|
"properties": {
|
package/lib/spec/context.json
CHANGED
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"Attachment": "crm:E79_Part_Addition",
|
|
22
22
|
"Removal": "crm:E80_Part_Removal",
|
|
23
23
|
"Alteration": "crm:E12_Production",
|
|
24
|
+
"Perforator": "crm:E22_Human-Made_Object",
|
|
24
25
|
"ConditionState": "crm:E3_Condition_State",
|
|
25
26
|
"note": "reo:Note",
|
|
26
27
|
"expression": "reo:Expression",
|
|
@@ -157,7 +158,6 @@
|
|
|
157
158
|
"dimensions": "reo:dimensions",
|
|
158
159
|
"width": "reo:width",
|
|
159
160
|
"height": "reo:height",
|
|
160
|
-
"punchDiameter": "reo:punchDiameter",
|
|
161
161
|
"holeSeparation": "reo:holeSeparation",
|
|
162
162
|
"scanResolution": "reo:scanResolution",
|
|
163
163
|
"value": "crm:P90_has_value",
|
|
@@ -177,9 +177,23 @@
|
|
|
177
177
|
"speed": {
|
|
178
178
|
"@id": "reo:paperSpeed",
|
|
179
179
|
"@context": { "value": "crm:P90_has_value" }
|
|
180
|
+
},
|
|
181
|
+
"perforator": {
|
|
182
|
+
"@id": "crm:P16_used_specific_object",
|
|
183
|
+
"@context": {
|
|
184
|
+
"punchDiameter": "reo:punchDiameter",
|
|
185
|
+
"chainPitch": "reo:chainPitch",
|
|
186
|
+
"advance": "reo:advance",
|
|
187
|
+
"slot": "reo:slot",
|
|
188
|
+
"bridge": "reo:bridge",
|
|
189
|
+
"n": "reo:sampleSize",
|
|
190
|
+
"strength": "reo:strength",
|
|
191
|
+
"value": "crm:P90_has_value"
|
|
192
|
+
}
|
|
180
193
|
}
|
|
181
194
|
}
|
|
182
195
|
},
|
|
196
|
+
"drive": "reo:drive",
|
|
183
197
|
"company": "crm:P14_carried_out_by",
|
|
184
198
|
"paper": "crm:P126_employed",
|
|
185
199
|
"conditions": "crm:P44_has_condition",
|
|
@@ -237,11 +251,6 @@
|
|
|
237
251
|
"@type": "@vocab",
|
|
238
252
|
"@context": { "@vocab": "https://w3id.org/reo/type/" }
|
|
239
253
|
},
|
|
240
|
-
"pattern": {
|
|
241
|
-
"@id": "reo:pattern",
|
|
242
|
-
"@type": "@vocab",
|
|
243
|
-
"@context": { "@vocab": "https://w3id.org/reo/type/" }
|
|
244
|
-
},
|
|
245
254
|
"technique": {
|
|
246
255
|
"@id": "reo:technique",
|
|
247
256
|
"@type": "@vocab",
|
package/lib/vocabulary.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Concept } from "./Agent.js";
|
|
2
2
|
/**
|
|
3
3
|
* The concepts the type vocabulary declares, whatever kind they are:
|
|
4
|
-
* the reproducing systems
|
|
5
|
-
* them by its IRI alone.
|
|
4
|
+
* the reproducing systems, the procedures and the drives of a
|
|
5
|
+
* perforator. An edition names one of them by its IRI alone.
|
|
6
6
|
*/
|
|
7
7
|
export declare const vocabulary: readonly Concept[];
|
|
8
8
|
/** The concept of that IRI, where the vocabulary declares one. */
|
package/lib/vocabulary.js
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
|
+
import { drives } from "./Perforator.js";
|
|
1
2
|
import { procedures } from "./procedures.js";
|
|
2
3
|
import { systemOf } from "./TrackerBar.js";
|
|
3
4
|
import { trackerBars } from "./systems/index.js";
|
|
4
5
|
/**
|
|
5
6
|
* The concepts the type vocabulary declares, whatever kind they are:
|
|
6
|
-
* the reproducing systems
|
|
7
|
-
* them by its IRI alone.
|
|
7
|
+
* the reproducing systems, the procedures and the drives of a
|
|
8
|
+
* perforator. An edition names one of them by its IRI alone.
|
|
8
9
|
*/
|
|
9
10
|
export const vocabulary = [
|
|
10
11
|
...trackerBars.map(systemOf),
|
|
11
|
-
...procedures
|
|
12
|
+
...procedures,
|
|
13
|
+
...drives
|
|
12
14
|
];
|
|
13
15
|
/** The concept of that IRI, where the vocabulary declares one. */
|
|
14
16
|
export const conceptOf = (id) => id === undefined ? undefined : vocabulary.find(concept => concept.id === id);
|
package/package.json
CHANGED