@graphty/graph-io 0.3.16 → 0.3.18
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/LICENSE +1 -1
- package/README.md +29 -3
- package/dist/chunks/{escape-D1f9-cwf.js → escape-D-gZWO26.js} +3 -2
- package/dist/chunks/{escape-D1f9-cwf.js.map → escape-D-gZWO26.js.map} +1 -1
- package/dist/chunks/{importer-D7ZcGCeb.js → importer-Br_QeAeE.js} +4 -3
- package/dist/chunks/{importer-D7ZcGCeb.js.map → importer-Br_QeAeE.js.map} +1 -1
- package/dist/chunks/{importer-CXEiicAN.js → importer-DHagxvDD.js} +4 -3
- package/dist/chunks/{importer-CXEiicAN.js.map → importer-DHagxvDD.js.map} +1 -1
- package/dist/chunks/{importer-C7mnGdr_.js → importer-Du5crN9l.js} +510 -26
- package/dist/chunks/importer-Du5crN9l.js.map +1 -0
- package/dist/chunks/importer-aNJfe0qu.js +1614 -0
- package/dist/chunks/importer-aNJfe0qu.js.map +1 -0
- package/dist/chunks/{importer-B8lsjFWx.js → importer-d0uQxFp6.js} +4 -3
- package/dist/chunks/{importer-B8lsjFWx.js.map → importer-d0uQxFp6.js.map} +1 -1
- package/dist/chunks/ontology-BnrJ4I98.js +113 -0
- package/dist/chunks/ontology-BnrJ4I98.js.map +1 -0
- package/dist/chunks/{records-IHsCfv7s.js → records-Bk9jgodz.js} +2 -2
- package/dist/chunks/{records-IHsCfv7s.js.map → records-Bk9jgodz.js.map} +1 -1
- package/dist/chunks/{writer-BtWpUaiH.js → report-BOk0p5y8.js} +181 -912
- package/dist/chunks/report-BOk0p5y8.js.map +1 -0
- package/dist/chunks/writer-GAdltGmC.js +827 -0
- package/dist/chunks/writer-GAdltGmC.js.map +1 -0
- package/dist/csv.js +4 -3
- package/dist/csv.js.map +1 -1
- package/dist/dot.js +1 -1
- package/dist/gexf.js +3 -2
- package/dist/gexf.js.map +1 -1
- package/dist/gml.js +3 -2
- package/dist/gml.js.map +1 -1
- package/dist/graph-io.js +191 -134
- package/dist/graph-io.js.map +1 -1
- package/dist/graphml.js +1 -1
- package/dist/json.js +1 -1
- package/dist/neo4j.js +4 -3
- package/dist/neo4j.js.map +1 -1
- package/dist/obo.d.ts +1 -0
- package/dist/obo.js +6 -0
- package/dist/obo.js.map +1 -0
- package/dist/pajek.js +1 -1
- package/dist/src/common/codes.d.ts +43 -0
- package/dist/src/common/codes.d.ts.map +1 -1
- package/dist/src/common/codes.js +43 -0
- package/dist/src/common/codes.js.map +1 -1
- package/dist/src/common/input.d.ts +9 -0
- package/dist/src/common/input.d.ts.map +1 -1
- package/dist/src/common/input.js +16 -0
- package/dist/src/common/input.js.map +1 -1
- package/dist/src/common/ontology.d.ts +59 -0
- package/dist/src/common/ontology.d.ts.map +1 -0
- package/dist/src/common/ontology.js +147 -0
- package/dist/src/common/ontology.js.map +1 -0
- package/dist/src/common/options.d.ts +12 -1
- package/dist/src/common/options.d.ts.map +1 -1
- package/dist/src/common/options.js +51 -1
- package/dist/src/common/options.js.map +1 -1
- package/dist/src/formats/json/dialect.d.ts +8 -6
- package/dist/src/formats/json/dialect.d.ts.map +1 -1
- package/dist/src/formats/json/dialect.js +26 -3
- package/dist/src/formats/json/dialect.js.map +1 -1
- package/dist/src/formats/json/importer.d.ts +324 -7
- package/dist/src/formats/json/importer.d.ts.map +1 -1
- package/dist/src/formats/json/importer.js +154 -23
- package/dist/src/formats/json/importer.js.map +1 -1
- package/dist/src/formats/json/obographs.d.ts +21 -0
- package/dist/src/formats/json/obographs.d.ts.map +1 -0
- package/dist/src/formats/json/obographs.js +476 -0
- package/dist/src/formats/json/obographs.js.map +1 -0
- package/dist/src/formats/obo/importer.d.ts +90 -0
- package/dist/src/formats/obo/importer.d.ts.map +1 -0
- package/dist/src/formats/obo/importer.js +1248 -0
- package/dist/src/formats/obo/importer.js.map +1 -0
- package/dist/src/formats/obo/index.d.ts +7 -0
- package/dist/src/formats/obo/index.d.ts.map +1 -0
- package/dist/src/formats/obo/index.js +7 -0
- package/dist/src/formats/obo/index.js.map +1 -0
- package/dist/src/formats/obo/syntax.d.ts +121 -0
- package/dist/src/formats/obo/syntax.d.ts.map +1 -0
- package/dist/src/formats/obo/syntax.js +424 -0
- package/dist/src/formats/obo/syntax.js.map +1 -0
- package/dist/src/index.d.ts +5 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/registry.d.ts +21 -3
- package/dist/src/registry.d.ts.map +1 -1
- package/dist/src/registry.js +32 -1
- package/dist/src/registry.js.map +1 -1
- package/dist/src/sniff.d.ts +1 -1
- package/dist/src/sniff.d.ts.map +1 -1
- package/dist/src/sniff.js +23 -3
- package/dist/src/sniff.js.map +1 -1
- package/dist/src/types.d.ts +31 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/package.json +6 -1
- package/src/common/codes.ts +58 -0
- package/src/common/input.ts +16 -0
- package/src/common/ontology.ts +169 -0
- package/src/common/options.ts +78 -2
- package/src/formats/json/dialect.ts +37 -7
- package/src/formats/json/importer.ts +206 -28
- package/src/formats/json/obographs.ts +563 -0
- package/src/formats/obo/importer.ts +1695 -0
- package/src/formats/obo/index.ts +7 -0
- package/src/formats/obo/syntax.ts +466 -0
- package/src/index.ts +6 -0
- package/src/registry.ts +38 -3
- package/src/sniff.ts +35 -5
- package/src/types.ts +40 -1
- package/dist/chunks/importer-C7mnGdr_.js.map +0 -1
- package/dist/chunks/writer-BtWpUaiH.js.map +0 -1
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `obographs` dialect of the JSON importer (design sections 1.6 and 4.6): OBO Graphs JSON,
|
|
3
|
+
* the form in which the Gene Ontology and every OBO Foundry ontology publish a ready-made graph
|
|
4
|
+
* (`{ "graphs": [{ "nodes": [...], "edges": [{ "sub", "pred", "obj" }] }] }`).
|
|
5
|
+
*
|
|
6
|
+
* Nodes and their `meta` fill the OBO column vocabulary of src/common/ontology.ts, the same
|
|
7
|
+
* columns the OBO importer gives the `.obo` file of the same ontology; ids are compacted from IRIs
|
|
8
|
+
* to the identifiers the `.obo` writes (`oboIds: "curie"`, the default), and a relation is named by
|
|
9
|
+
* its shorthand (`part_of`, not `http://purl.obolibrary.org/obo/BFO_0000050`). PROPERTY nodes and
|
|
10
|
+
* the edges between properties are metadata unless `typedefs: "nodes"`, as `[Typedef]` frames are.
|
|
11
|
+
* The axiom arrays and the graph and document metadata are kept verbatim in
|
|
12
|
+
* `meta.extra.obographs`.
|
|
13
|
+
*/
|
|
14
|
+
import { INVALID_INDEX } from "@graphty/graph-format";
|
|
15
|
+
import { declareResolved } from "../../common/attributes.js";
|
|
16
|
+
import { compactOboIri, OBO_NODE_COLUMNS, oboColumnDecl, OBOGRAPHS_PREDICATE_TAGS, PLACEHOLDER_COLUMN, synonymScopeOf, } from "../../common/ontology.js";
|
|
17
|
+
import { hasKey, isJsonObject } from "./dialect.js";
|
|
18
|
+
import { chosenGraph, JSON_ISSUE } from "./importer.js";
|
|
19
|
+
/** The node keys the schema defines; any other key goes to `obo.unrecognized`. */
|
|
20
|
+
const NODE_KEYS = new Set(["id", "lbl", "type", "propertyType", "meta"]);
|
|
21
|
+
/** The `meta` keys mapped onto columns; any other key goes to `obo.unrecognized` as `meta.<key>`. */
|
|
22
|
+
const META_KEYS = new Set([
|
|
23
|
+
"definition",
|
|
24
|
+
"comments",
|
|
25
|
+
"subsets",
|
|
26
|
+
"xrefs",
|
|
27
|
+
"synonyms",
|
|
28
|
+
"basicPropertyValues",
|
|
29
|
+
"deprecated",
|
|
30
|
+
]);
|
|
31
|
+
/** The OBO frame type of an OBO Graphs node type. */
|
|
32
|
+
const FRAME_TYPES = Object.freeze({
|
|
33
|
+
CLASS: "Term",
|
|
34
|
+
INDIVIDUAL: "Instance",
|
|
35
|
+
PROPERTY: "Typedef",
|
|
36
|
+
});
|
|
37
|
+
/** The OBO name of the predicates OBO Graphs writes without an IRI. */
|
|
38
|
+
const BUILTIN_PREDICATES = Object.freeze({
|
|
39
|
+
is_a: "is_a",
|
|
40
|
+
subPropertyOf: "is_a",
|
|
41
|
+
type: "instance_of",
|
|
42
|
+
inverseOf: "inverse_of",
|
|
43
|
+
});
|
|
44
|
+
/** Predicates that relate two properties (metadata under typedefs "metadata"). */
|
|
45
|
+
const PROPERTY_PREDICATES = new Set(["subPropertyOf", "inverseOf"]);
|
|
46
|
+
/** Writes the OBO vocabulary columns, declaring each on first use. */
|
|
47
|
+
class ColumnWriter {
|
|
48
|
+
/**
|
|
49
|
+
* Create a writer.
|
|
50
|
+
* @param ctx - the import context
|
|
51
|
+
*/
|
|
52
|
+
constructor(ctx) {
|
|
53
|
+
this.handles = new Map();
|
|
54
|
+
this.ctx = ctx;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Write a node cell of the vocabulary.
|
|
58
|
+
* @param name - the column
|
|
59
|
+
* @param row - the node index
|
|
60
|
+
* @param value - the value
|
|
61
|
+
*/
|
|
62
|
+
node(name, row, value) {
|
|
63
|
+
this.ctx.sink.setNodeValue(this.handle("node", name), row, value);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Write an edge cell of the vocabulary.
|
|
67
|
+
* @param name - the column
|
|
68
|
+
* @param row - the edge index
|
|
69
|
+
* @param value - the value
|
|
70
|
+
*/
|
|
71
|
+
edge(name, row, value) {
|
|
72
|
+
this.ctx.sink.setEdgeValue(this.handle("edge", name), row, value);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The handle of a column, declared on first use.
|
|
76
|
+
* @param domain - node or edge
|
|
77
|
+
* @param name - the column
|
|
78
|
+
* @returns the handle
|
|
79
|
+
*/
|
|
80
|
+
handle(domain, name) {
|
|
81
|
+
const key = `${domain}:${name}`;
|
|
82
|
+
const cached = this.handles.get(key);
|
|
83
|
+
if (cached !== undefined) {
|
|
84
|
+
return cached;
|
|
85
|
+
}
|
|
86
|
+
const { handle } = declareResolved(this.ctx.sink, domain, oboColumnDecl(domain, name), this.ctx.report);
|
|
87
|
+
this.handles.set(key, handle);
|
|
88
|
+
return handle;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* The id rule and the property table of one graph: PROPERTY nodes are found first, so an edge's
|
|
93
|
+
* predicate is named by the shorthand of the property it names wherever that property stands.
|
|
94
|
+
* @param nodes - the graph's node records
|
|
95
|
+
* @param oboIds - "curie" or "iri"
|
|
96
|
+
* @returns the vocabulary
|
|
97
|
+
*/
|
|
98
|
+
function vocabularyOf(nodes, oboIds) {
|
|
99
|
+
const shorthands = new Map();
|
|
100
|
+
const propertyIds = new Set();
|
|
101
|
+
for (const node of nodes) {
|
|
102
|
+
if (!isJsonObject(node) || typeof node.id !== "string" || node.type !== "PROPERTY") {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
propertyIds.add(node.id);
|
|
106
|
+
const shorthand = basicValues(node.meta).find((pv) => OBOGRAPHS_PREDICATE_TAGS.get(pv.pred) === "shorthand");
|
|
107
|
+
if (shorthand !== undefined) {
|
|
108
|
+
shorthands.set(node.id, shorthand.val);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
const compact = (iri) => (oboIds === "curie" ? compactOboIri(iri) : iri);
|
|
112
|
+
return {
|
|
113
|
+
id: (iri) => (oboIds === "curie" ? (shorthands.get(iri) ?? compactOboIri(iri)) : iri),
|
|
114
|
+
relation: (pred) => BUILTIN_PREDICATES[pred] ?? shorthands.get(pred) ?? compact(pred),
|
|
115
|
+
isProperty: (iri) => propertyIds.has(iri),
|
|
116
|
+
properties: {},
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* The well-formed `basicPropertyValues` of a node's meta.
|
|
121
|
+
* @param meta - the node's meta, or anything
|
|
122
|
+
* @returns the entries with a string pred and val
|
|
123
|
+
*/
|
|
124
|
+
function basicValues(meta) {
|
|
125
|
+
if (!isJsonObject(meta) || !Array.isArray(meta.basicPropertyValues)) {
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
return meta.basicPropertyValues.filter((pv) => isJsonObject(pv) && typeof pv.pred === "string" && typeof pv.val === "string");
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* The strings of an array, or of an array of `{ val }` records.
|
|
132
|
+
* @param value - the array, or anything
|
|
133
|
+
* @returns the strings
|
|
134
|
+
*/
|
|
135
|
+
function strings(value) {
|
|
136
|
+
if (!Array.isArray(value)) {
|
|
137
|
+
return [];
|
|
138
|
+
}
|
|
139
|
+
return value.flatMap((item) => {
|
|
140
|
+
if (typeof item === "string") {
|
|
141
|
+
return [item];
|
|
142
|
+
}
|
|
143
|
+
return isJsonObject(item) && typeof item.val === "string" ? [item.val] : [];
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Read the chosen graph of an OBO Graphs document into the sink.
|
|
148
|
+
* @param ctx - the import context
|
|
149
|
+
* @param root - the document
|
|
150
|
+
*/
|
|
151
|
+
export function importObographs(ctx, root) {
|
|
152
|
+
const graph = chosenGraph(ctx, root, "OBO Graphs");
|
|
153
|
+
const nodes = sectionOf(ctx, graph, "nodes");
|
|
154
|
+
const edges = sectionOf(ctx, graph, "edges");
|
|
155
|
+
const vocabulary = vocabularyOf(nodes, ctx.json.oboIds);
|
|
156
|
+
const columns = new ColumnWriter(ctx);
|
|
157
|
+
ctx.reportNodeIdFrom("obographs", "the node ids");
|
|
158
|
+
ctx.setHeader(true);
|
|
159
|
+
ctx.sink.reserve(nodes.length, edges.length);
|
|
160
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
161
|
+
readNode(ctx, columns, vocabulary, nodes[i], `nodes[${i}]`);
|
|
162
|
+
}
|
|
163
|
+
const propertyEdges = readEdges(ctx, columns, vocabulary, edges);
|
|
164
|
+
const graphMeta = {};
|
|
165
|
+
for (const key of Object.keys(graph)) {
|
|
166
|
+
if (key !== "nodes" && key !== "edges") {
|
|
167
|
+
graphMeta[key] = graph[key];
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const document = {};
|
|
171
|
+
for (const key of Object.keys(root)) {
|
|
172
|
+
if (key !== "graphs") {
|
|
173
|
+
document[key] = root[key];
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
const label = typeof graph.lbl === "string" ? graph.lbl : null;
|
|
177
|
+
const name = label ?? (typeof graph.id === "string" ? graph.id : null);
|
|
178
|
+
ctx.sink.setMeta({
|
|
179
|
+
sourceFormat: "json",
|
|
180
|
+
name,
|
|
181
|
+
extra: {
|
|
182
|
+
json: { dialect: "obographs" },
|
|
183
|
+
obographs: {
|
|
184
|
+
ids: ctx.json.oboIds,
|
|
185
|
+
graph: graphMeta,
|
|
186
|
+
document,
|
|
187
|
+
properties: vocabulary.properties,
|
|
188
|
+
propertyEdges,
|
|
189
|
+
},
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* A `nodes` or `edges` section: an array, absent (empty), or a fatal E_JSON_SHAPE.
|
|
195
|
+
* @param ctx - the context
|
|
196
|
+
* @param graph - the graph
|
|
197
|
+
* @param key - the section
|
|
198
|
+
* @returns the elements
|
|
199
|
+
*/
|
|
200
|
+
function sectionOf(ctx, graph, key) {
|
|
201
|
+
const value = graph[key];
|
|
202
|
+
if (value === undefined || value === null) {
|
|
203
|
+
return [];
|
|
204
|
+
}
|
|
205
|
+
if (!Array.isArray(value)) {
|
|
206
|
+
return ctx.report.fail(JSON_ISSUE.SHAPE, `an OBO Graphs graph's ${key} must be an array`, { element: key });
|
|
207
|
+
}
|
|
208
|
+
return value;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Read one node: a PROPERTY into the metadata (typedefs "metadata"), anything else into the sink
|
|
212
|
+
* with its OBO columns.
|
|
213
|
+
* @param ctx - the context
|
|
214
|
+
* @param columns - the column writer
|
|
215
|
+
* @param vocabulary - the graph's vocabulary
|
|
216
|
+
* @param record - the node record
|
|
217
|
+
* @param element - its name in messages
|
|
218
|
+
*/
|
|
219
|
+
function readNode(ctx, columns, vocabulary, record, element) {
|
|
220
|
+
if (!isJsonObject(record)) {
|
|
221
|
+
ctx.badElement("node", element);
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
if (typeof record.id !== "string") {
|
|
225
|
+
if (record.id === undefined) {
|
|
226
|
+
ctx.coerceId(undefined, element);
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
badValue(ctx, `${element}.id must be a string; the node is skipped`);
|
|
230
|
+
}
|
|
231
|
+
ctx.countSkipped("node");
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
if (record.type === "PROPERTY" && ctx.json.typedefs === "metadata") {
|
|
235
|
+
const shorthand = vocabulary.id(record.id) === record.id ? undefined : vocabulary.id(record.id);
|
|
236
|
+
const entry = {};
|
|
237
|
+
for (const [key, value] of Object.entries({
|
|
238
|
+
lbl: record.lbl,
|
|
239
|
+
propertyType: record.propertyType,
|
|
240
|
+
shorthand,
|
|
241
|
+
meta: record.meta,
|
|
242
|
+
})) {
|
|
243
|
+
if (value !== undefined) {
|
|
244
|
+
entry[key] = value;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
vocabulary.properties[record.id] = entry;
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
const id = ctx.coerceId(vocabulary.id(record.id), element);
|
|
251
|
+
const row = id === null ? -1 : ctx.pushNode(id, element);
|
|
252
|
+
if (row < 0) {
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
try {
|
|
256
|
+
writeNode(ctx, columns, vocabulary, record, row, element);
|
|
257
|
+
}
|
|
258
|
+
catch (err) {
|
|
259
|
+
ctx.report.recordError(err, { element: record.id });
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Write a node's fields and meta onto the OBO columns.
|
|
264
|
+
* @param ctx - the context
|
|
265
|
+
* @param columns - the column writer
|
|
266
|
+
* @param vocabulary - the graph's vocabulary
|
|
267
|
+
* @param record - the node record
|
|
268
|
+
* @param row - the node index
|
|
269
|
+
* @param element - its name in messages
|
|
270
|
+
*/
|
|
271
|
+
function writeNode(ctx, columns, vocabulary, record, row, element) {
|
|
272
|
+
const unrecognized = {};
|
|
273
|
+
const text = (key, column) => {
|
|
274
|
+
const value = record[key];
|
|
275
|
+
if (typeof value === "string") {
|
|
276
|
+
columns.node(column, row, column === "type" ? (FRAME_TYPES[value] ?? value) : value);
|
|
277
|
+
}
|
|
278
|
+
else if (value !== undefined && value !== null) {
|
|
279
|
+
badValue(ctx, `${element}.${key} must be a string`);
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
text("type", "type");
|
|
283
|
+
text("lbl", "name");
|
|
284
|
+
text("propertyType", "propertyType");
|
|
285
|
+
for (const key of Object.keys(record)) {
|
|
286
|
+
if (!NODE_KEYS.has(key)) {
|
|
287
|
+
unrecognized[key] = record[key];
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
const { meta } = record;
|
|
291
|
+
if (isJsonObject(meta)) {
|
|
292
|
+
writeMeta(columns, vocabulary, meta, row, unrecognized);
|
|
293
|
+
}
|
|
294
|
+
else if (meta !== undefined && meta !== null) {
|
|
295
|
+
badValue(ctx, `${element}.meta must be an object`);
|
|
296
|
+
}
|
|
297
|
+
if (Object.keys(unrecognized).length > 0) {
|
|
298
|
+
columns.node("obo.unrecognized", row, unrecognized);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Write a node's `meta` onto the OBO columns (design 4.6): definition, comments, subsets, xrefs,
|
|
303
|
+
* synonyms, deprecated, and the basicPropertyValues mapped back to the OBO tag they came from.
|
|
304
|
+
* @param columns - the column writer
|
|
305
|
+
* @param vocabulary - the graph's vocabulary
|
|
306
|
+
* @param meta - the meta record
|
|
307
|
+
* @param row - the node index
|
|
308
|
+
* @param unrecognized - where keys without a column go
|
|
309
|
+
*/
|
|
310
|
+
function writeMeta(columns, vocabulary, meta, row, unrecognized) {
|
|
311
|
+
const { definition } = meta;
|
|
312
|
+
if (isJsonObject(definition) && typeof definition.val === "string") {
|
|
313
|
+
columns.node("def", row, definition.val);
|
|
314
|
+
columns.node("def.xrefs", row, strings(definition.xrefs));
|
|
315
|
+
}
|
|
316
|
+
const comments = strings(meta.comments);
|
|
317
|
+
if (comments.length > 0) {
|
|
318
|
+
columns.node("comment", row, comments.join("\n"));
|
|
319
|
+
}
|
|
320
|
+
const subsets = strings(meta.subsets).map((s) => vocabulary.id(s));
|
|
321
|
+
if (subsets.length > 0) {
|
|
322
|
+
columns.node("subset", row, subsets);
|
|
323
|
+
}
|
|
324
|
+
const xrefs = strings(meta.xrefs);
|
|
325
|
+
if (xrefs.length > 0) {
|
|
326
|
+
columns.node("xref", row, xrefs);
|
|
327
|
+
}
|
|
328
|
+
if (Array.isArray(meta.synonyms) && meta.synonyms.length > 0) {
|
|
329
|
+
columns.node("synonym", row, meta.synonyms.filter(isJsonObject).map((s) => ({
|
|
330
|
+
text: typeof s.val === "string" ? s.val : null,
|
|
331
|
+
scope: typeof s.pred === "string" ? synonymScopeOf(s.pred) : null,
|
|
332
|
+
type: typeof s.synonymType === "string" ? vocabulary.id(s.synonymType) : null,
|
|
333
|
+
xrefs: strings(s.xrefs),
|
|
334
|
+
})));
|
|
335
|
+
}
|
|
336
|
+
if (typeof meta.deprecated === "boolean") {
|
|
337
|
+
columns.node("is_obsolete", row, meta.deprecated);
|
|
338
|
+
}
|
|
339
|
+
writePropertyValues(columns, vocabulary, basicValues(meta), row);
|
|
340
|
+
for (const key of Object.keys(meta)) {
|
|
341
|
+
if (!META_KEYS.has(key)) {
|
|
342
|
+
unrecognized[`meta.${key}`] = meta[key];
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Write the basicPropertyValues: the ones an OBO tag maps to onto that tag's column (lists for
|
|
348
|
+
* alt_id, replaced_by, consider), the rest into `property_value`.
|
|
349
|
+
* @param columns - the column writer
|
|
350
|
+
* @param vocabulary - the graph's vocabulary
|
|
351
|
+
* @param values - the entries
|
|
352
|
+
* @param row - the node index
|
|
353
|
+
*/
|
|
354
|
+
function writePropertyValues(columns, vocabulary, values, row) {
|
|
355
|
+
const lists = new Map();
|
|
356
|
+
const others = [];
|
|
357
|
+
for (const { pred, val } of values) {
|
|
358
|
+
const tag = OBOGRAPHS_PREDICATE_TAGS.get(pred);
|
|
359
|
+
if (tag === "shorthand") {
|
|
360
|
+
continue;
|
|
361
|
+
}
|
|
362
|
+
if (tag === undefined) {
|
|
363
|
+
others.push({ relation: vocabulary.id(pred), value: val, datatype: null });
|
|
364
|
+
}
|
|
365
|
+
else if (OBO_NODE_COLUMNS[tag].dtype === "list") {
|
|
366
|
+
const list = lists.get(tag) ?? [];
|
|
367
|
+
list.push(tag === "alt_id" ? val : vocabulary.id(val));
|
|
368
|
+
lists.set(tag, list);
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
columns.node(tag, row, val);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
for (const [tag, list] of lists) {
|
|
375
|
+
columns.node(tag, row, list);
|
|
376
|
+
}
|
|
377
|
+
if (others.length > 0) {
|
|
378
|
+
columns.node("property_value", row, others);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Report a field of the wrong JSON type (the field is left unset, the element kept).
|
|
383
|
+
* @param ctx - the context
|
|
384
|
+
* @param message - what is wrong
|
|
385
|
+
*/
|
|
386
|
+
function badValue(ctx, message) {
|
|
387
|
+
ctx.report.error("validation-error", JSON_ISSUE.BAD_VALUE, message);
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Read the edges: the ones between properties into the metadata (typedefs "metadata"), the rest
|
|
391
|
+
* into the sink, making a placeholder node for an endpoint missing from `nodes`.
|
|
392
|
+
* @param ctx - the context
|
|
393
|
+
* @param columns - the column writer
|
|
394
|
+
* @param vocabulary - the graph's vocabulary
|
|
395
|
+
* @param edges - the edge records
|
|
396
|
+
* @returns the property edges kept as metadata
|
|
397
|
+
*/
|
|
398
|
+
function readEdges(ctx, columns, vocabulary, edges) {
|
|
399
|
+
const { report, sink } = ctx;
|
|
400
|
+
const propertyEdges = [];
|
|
401
|
+
const dangling = [];
|
|
402
|
+
let dropped = 0;
|
|
403
|
+
const endpoint = (raw, element) => {
|
|
404
|
+
const id = ctx.coerceId(vocabulary.id(raw), element);
|
|
405
|
+
if (id === null || sink.indexOf(id) !== INVALID_INDEX) {
|
|
406
|
+
return id;
|
|
407
|
+
}
|
|
408
|
+
dangling.push(raw);
|
|
409
|
+
if (!ctx.options.addMissingNodes) {
|
|
410
|
+
return null;
|
|
411
|
+
}
|
|
412
|
+
const row = ctx.pushNode(id, element);
|
|
413
|
+
if (row >= 0) {
|
|
414
|
+
columns.node(PLACEHOLDER_COLUMN, row, true);
|
|
415
|
+
}
|
|
416
|
+
return id;
|
|
417
|
+
};
|
|
418
|
+
for (let i = 0; i < edges.length; i++) {
|
|
419
|
+
const element = `edges[${i}]`;
|
|
420
|
+
const record = edges[i];
|
|
421
|
+
if (!isJsonObject(record)) {
|
|
422
|
+
ctx.badElement("edge", element);
|
|
423
|
+
continue;
|
|
424
|
+
}
|
|
425
|
+
const subKey = hasKey(record, "sub") ? "sub" : "subj";
|
|
426
|
+
if (subKey === "subj" && hasKey(record, "subj")) {
|
|
427
|
+
report.warnOnce("coercion", JSON_ISSUE.OBOGRAPHS_SUBJ, `${element} uses the outdated key subj; read as sub`, {
|
|
428
|
+
element,
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
const sub = record[subKey];
|
|
432
|
+
const { obj, pred } = record;
|
|
433
|
+
if (typeof sub !== "string" || typeof obj !== "string") {
|
|
434
|
+
ctx.missingEndpoint(element, typeof sub === "string" ? "obj" : "sub");
|
|
435
|
+
continue;
|
|
436
|
+
}
|
|
437
|
+
const between = (typeof pred === "string" && PROPERTY_PREDICATES.has(pred)) ||
|
|
438
|
+
vocabulary.isProperty(sub) ||
|
|
439
|
+
vocabulary.isProperty(obj);
|
|
440
|
+
if (between && ctx.json.typedefs === "metadata") {
|
|
441
|
+
propertyEdges.push(record);
|
|
442
|
+
continue;
|
|
443
|
+
}
|
|
444
|
+
try {
|
|
445
|
+
const u = endpoint(sub, `${element}.sub`);
|
|
446
|
+
const v = endpoint(obj, `${element}.obj`);
|
|
447
|
+
if (u === null || v === null) {
|
|
448
|
+
dropped++;
|
|
449
|
+
ctx.countSkipped("edge");
|
|
450
|
+
continue;
|
|
451
|
+
}
|
|
452
|
+
const edge = ctx.pushEdge(u, v, "directed", undefined, element);
|
|
453
|
+
if (typeof pred === "string") {
|
|
454
|
+
columns.edge("relation", edge, vocabulary.relation(pred));
|
|
455
|
+
}
|
|
456
|
+
else {
|
|
457
|
+
badValue(ctx, `${element} has no pred; its relation is unset`);
|
|
458
|
+
}
|
|
459
|
+
if (isJsonObject(record.meta)) {
|
|
460
|
+
columns.edge("meta", edge, record.meta);
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
catch (err) {
|
|
464
|
+
ctx.skip(err, "edge", element);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
if (dangling.length > 0) {
|
|
468
|
+
const shown = [...new Set(dangling)].slice(0, 5).join(", ");
|
|
469
|
+
const action = ctx.options.addMissingNodes
|
|
470
|
+
? "each became a placeholder node (graphty.placeholder)"
|
|
471
|
+
: `${dropped} edge(s) to them were dropped (addMissingNodes false)`;
|
|
472
|
+
report.warning("validation-error", JSON_ISSUE.DANGLING_REFERENCE, `${new Set(dangling).size} edge endpoint(s) missing from nodes: ${shown}; ${action}`, { element: dangling[0] });
|
|
473
|
+
}
|
|
474
|
+
return propertyEdges;
|
|
475
|
+
}
|
|
476
|
+
//# sourceMappingURL=obographs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obographs.js","sourceRoot":"","sources":["../../../../src/formats/json/obographs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The OBO importer (design section 4; research-obo.md): the line-oriented OBO flat file format of
|
|
3
|
+
* the Gene Ontology and the OBO Foundry, versions 1.0, 1.2 and 1.4 read as their union (real files
|
|
4
|
+
* do not say which they follow: the GO writes `format-version: 1.2` and uses 1.4 tags), streamed
|
|
5
|
+
* through the common LineReader.
|
|
6
|
+
*
|
|
7
|
+
* `[Term]` and `[Instance]` frames are nodes; `is_a`, `relationship` and `instance_of` clauses are
|
|
8
|
+
* directed edges from the frame to the target, with the relation in a `relation` dict column (role
|
|
9
|
+
* `kind`) and the trailing qualifier block in a `qualifiers` json column. `[Typedef]` frames are
|
|
10
|
+
* metadata (`meta.extra.obo.typedefs`) unless `typedefs: "nodes"`. Every other tag fills the
|
|
11
|
+
* column of its name (src/common/ontology.ts); an unknown tag is kept in `obo.unrecognized`.
|
|
12
|
+
* Frames that share an id are merged (spec 4.1.1): list clauses take the union, a single-valued
|
|
13
|
+
* clause keeps the first. A target no frame declares becomes a placeholder node (the guide's
|
|
14
|
+
* recommended reading; ontologies point into their imports this way) unless `addMissingNodes` is
|
|
15
|
+
* false.
|
|
16
|
+
*
|
|
17
|
+
* ponytail: the frames are held until the end of the file (merging needs every frame of an id,
|
|
18
|
+
* dangling detection the whole id set), so memory is about twice the snapshot's; a two-pass reader
|
|
19
|
+
* would lift that for files beyond a few hundred megabytes.
|
|
20
|
+
*/
|
|
21
|
+
import { type GraphImporter } from "../../types.js";
|
|
22
|
+
/** The format-specific options of the OBO importer. */
|
|
23
|
+
export interface OboImportOptions {
|
|
24
|
+
/** "keep" (default): obsolete terms are nodes with `is_obsolete` true; "drop": they and their edges are left out. */
|
|
25
|
+
obsolete?: "keep" | "drop" | undefined;
|
|
26
|
+
/** "metadata" (default): `[Typedef]` frames go to `meta.extra.obo.typedefs`; "nodes": they are nodes too, with their `is_a` edges. */
|
|
27
|
+
typedefs?: "metadata" | "nodes" | undefined;
|
|
28
|
+
}
|
|
29
|
+
/** Issue codes of the OBO importer (design section 4.3). */
|
|
30
|
+
export declare const OBO_ISSUE: Readonly<{
|
|
31
|
+
/** The input is empty or whitespace (fatal). */
|
|
32
|
+
EMPTY_INPUT: "E_EMPTY_INPUT";
|
|
33
|
+
/** The input holds invalid UTF-8 (fatal). */
|
|
34
|
+
INVALID_UTF8: "E_INVALID_UTF8";
|
|
35
|
+
/** Invalid bytes in the encoding a BOM or the encoding option chose (fatal). */
|
|
36
|
+
INVALID_ENCODING: "E_INVALID_ENCODING";
|
|
37
|
+
/** Bytes that are not UTF-8 were read as windows-1252. */
|
|
38
|
+
ENCODING_FALLBACK: "W_ENCODING_FALLBACK";
|
|
39
|
+
/** A declared encoding the platform cannot decode was ignored. */
|
|
40
|
+
UNKNOWN_ENCODING: "W_UNKNOWN_ENCODING";
|
|
41
|
+
/** A frame without an `id` clause; the frame is skipped. */
|
|
42
|
+
MISSING_ID: "E_MISSING_ID";
|
|
43
|
+
/** A clause whose value cannot be read (a boolean other than true / false, a relationship with one or three values); the clause is skipped. */
|
|
44
|
+
BAD_VALUE: "E_BAD_VALUE";
|
|
45
|
+
/** Two frames with one id were merged (spec 4.1.1). */
|
|
46
|
+
DUPLICATE_NODE: "W_DUPLICATE_NODE";
|
|
47
|
+
/** A single-valued tag given twice for one id (a cardinality violation); the first is kept. */
|
|
48
|
+
DUPLICATE_ATTRIBUTE: "W_DUPLICATE_ATTRIBUTE";
|
|
49
|
+
/** An unknown tag (kept in `obo.unrecognized`) or frame type (skipped), once per name. */
|
|
50
|
+
UNKNOWN_ELEMENT: "W_UNKNOWN_ELEMENT";
|
|
51
|
+
/** A target no frame declares: a placeholder node was made, or the edge dropped under addMissingNodes false. */
|
|
52
|
+
DANGLING_REFERENCE: "W_DANGLING_REFERENCE";
|
|
53
|
+
/** A line without a colon, an unterminated quote, a def without its xref list, a qualifier block that does not parse, an unescaped brace. */
|
|
54
|
+
SYNTAX: "W_OBO_SYNTAX";
|
|
55
|
+
/** The frame's `id` is not its first clause; it is used anyway. */
|
|
56
|
+
ID_NOT_FIRST: "W_OBO_ID_NOT_FIRST";
|
|
57
|
+
/** A synonym without a scope in a file that does not say 1.2, or with a scope that is not one of the four. */
|
|
58
|
+
SYNONYM_SCOPE: "W_OBO_SYNONYM_SCOPE";
|
|
59
|
+
/** A relation, subset or synonym type that nothing declares. */
|
|
60
|
+
UNDECLARED: "W_OBO_UNDECLARED";
|
|
61
|
+
/** One id for a Term and a Typedef (or an Instance); the Term (the first node frame) is the node. */
|
|
62
|
+
ID_KIND_CLASH: "W_OBO_ID_KIND_CLASH";
|
|
63
|
+
/** Fewer than two `intersection_of` or `union_of` clauses on a frame. */
|
|
64
|
+
CARDINALITY: "W_OBO_CARDINALITY";
|
|
65
|
+
/** An obsolete term with is_a / relationship, or replaced_by / consider on a term that is not obsolete. */
|
|
66
|
+
OBSOLETION: "W_OBO_OBSOLETION";
|
|
67
|
+
/** An OBO 1.0 / 1.2 tag read as its 1.4 meaning (exact_synonym, xref_analog, use_term, typeref, version). */
|
|
68
|
+
DEPRECATED_TAG: "W_OBO_DEPRECATED_TAG";
|
|
69
|
+
/** A backslash line continuation (deprecated in 1.4). */
|
|
70
|
+
DEPRECATED_SYNTAX: "W_OBO_DEPRECATED_SYNTAX";
|
|
71
|
+
/** A header clause kept in `meta.extra.obo.header` whose meaning is not applied (import, id-mapping, the treat-xrefs macros, owl-axioms). */
|
|
72
|
+
HEADER_NOT_APPLIED: "W_OBO_HEADER_NOT_APPLIED";
|
|
73
|
+
/** Obsolete terms and their edges left out under obsolete: "drop". */
|
|
74
|
+
OBSOLETE_DROPPED: "W_OBO_OBSOLETE_DROPPED";
|
|
75
|
+
/** Two distinct id texts became one number under ids "number". */
|
|
76
|
+
ID_MERGED: "W_ID_MERGED";
|
|
77
|
+
/** A vocabulary column renamed `<name>#obo` because the sink already holds the name. */
|
|
78
|
+
COLUMN_RENAMED: "W_COLUMN_RENAMED";
|
|
79
|
+
/** A vocabulary column declared without its role because the sink already holds it. */
|
|
80
|
+
ROLE_TAKEN: "W_ROLE_TAKEN";
|
|
81
|
+
/** A common option the format has no use for (defaultDirected, weightFrom, nodeIdFrom, ...). */
|
|
82
|
+
OPTION_IGNORED: "W_OPTION_IGNORED";
|
|
83
|
+
/** A builder-policy option the caller passed that the caller's sink does not use. */
|
|
84
|
+
SINK_OPTION: "W_SINK_OPTION";
|
|
85
|
+
}>;
|
|
86
|
+
/**
|
|
87
|
+
* The OBO importer plugin (design section 4).
|
|
88
|
+
*/
|
|
89
|
+
export declare const oboImporter: GraphImporter<OboImportOptions>;
|
|
90
|
+
//# sourceMappingURL=importer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../../../../src/formats/obo/importer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAsCH,OAAO,EAA4B,KAAK,aAAa,EAAuC,MAAM,gBAAgB,CAAC;AAgBnH,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAC7B,qHAAqH;IACrH,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACvC,sIAAsI;IACtI,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;CAC/C;AAED,4DAA4D;AAC5D,eAAO,MAAM,SAAS;IAClB,gDAAgD;;IAEhD,6CAA6C;;IAE7C,gFAAgF;;IAEhF,0DAA0D;;IAE1D,kEAAkE;;IAElE,4DAA4D;;IAE5D,+IAA+I;;IAE/I,uDAAuD;;IAEvD,+FAA+F;;IAE/F,0FAA0F;;IAE1F,gHAAgH;;IAEhH,6IAA6I;;IAE7I,mEAAmE;;IAEnE,8GAA8G;;IAE9G,gEAAgE;;IAEhE,qGAAqG;;IAErG,yEAAyE;;IAEzE,2GAA2G;;IAE3G,6GAA6G;;IAE7G,yDAAyD;;IAEzD,6IAA6I;;IAE7I,sEAAsE;;IAEtE,kEAAkE;;IAElE,wFAAwF;;IAExF,uFAAuF;;IAEvF,gGAAgG;;IAEhG,qFAAqF;;EAEvF,CAAC;AAu8CH;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC,gBAAgB,CA2EtD,CAAC"}
|