@graphty/graph-io 0.3.17 → 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.
Files changed (91) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +29 -3
  3. package/dist/chunks/{escape-scjHxjpr.js → escape-D-gZWO26.js} +3 -2
  4. package/dist/chunks/{escape-scjHxjpr.js.map → escape-D-gZWO26.js.map} +1 -1
  5. package/dist/chunks/{importer-Xg07gk7p.js → importer-Br_QeAeE.js} +4 -3
  6. package/dist/chunks/{importer-Xg07gk7p.js.map → importer-Br_QeAeE.js.map} +1 -1
  7. package/dist/chunks/{importer-ruMWWvVs.js → importer-DHagxvDD.js} +4 -3
  8. package/dist/chunks/{importer-ruMWWvVs.js.map → importer-DHagxvDD.js.map} +1 -1
  9. package/dist/chunks/{importer-B6rKRxzv.js → importer-Du5crN9l.js} +509 -25
  10. package/dist/chunks/importer-Du5crN9l.js.map +1 -0
  11. package/dist/chunks/importer-aNJfe0qu.js +1614 -0
  12. package/dist/chunks/importer-aNJfe0qu.js.map +1 -0
  13. package/dist/chunks/{importer-BmOl9gLW.js → importer-d0uQxFp6.js} +4 -3
  14. package/dist/chunks/{importer-BmOl9gLW.js.map → importer-d0uQxFp6.js.map} +1 -1
  15. package/dist/chunks/ontology-BnrJ4I98.js +113 -0
  16. package/dist/chunks/ontology-BnrJ4I98.js.map +1 -0
  17. package/dist/chunks/{records-DSpbTE5s.js → records-Bk9jgodz.js} +2 -2
  18. package/dist/chunks/{records-DSpbTE5s.js.map → records-Bk9jgodz.js.map} +1 -1
  19. package/dist/chunks/{writer-DHHfHn11.js → report-BOk0p5y8.js} +97 -919
  20. package/dist/chunks/report-BOk0p5y8.js.map +1 -0
  21. package/dist/chunks/writer-GAdltGmC.js +827 -0
  22. package/dist/chunks/writer-GAdltGmC.js.map +1 -0
  23. package/dist/csv.js +4 -3
  24. package/dist/csv.js.map +1 -1
  25. package/dist/dot.js +1 -1
  26. package/dist/gexf.js +3 -2
  27. package/dist/gexf.js.map +1 -1
  28. package/dist/gml.js +3 -2
  29. package/dist/gml.js.map +1 -1
  30. package/dist/graph-io.js +160 -141
  31. package/dist/graph-io.js.map +1 -1
  32. package/dist/graphml.js +1 -1
  33. package/dist/json.js +1 -1
  34. package/dist/neo4j.js +4 -3
  35. package/dist/neo4j.js.map +1 -1
  36. package/dist/obo.d.ts +1 -0
  37. package/dist/obo.js +6 -0
  38. package/dist/obo.js.map +1 -0
  39. package/dist/pajek.js +1 -1
  40. package/dist/src/common/ontology.d.ts +59 -0
  41. package/dist/src/common/ontology.d.ts.map +1 -0
  42. package/dist/src/common/ontology.js +147 -0
  43. package/dist/src/common/ontology.js.map +1 -0
  44. package/dist/src/formats/json/dialect.d.ts +8 -6
  45. package/dist/src/formats/json/dialect.d.ts.map +1 -1
  46. package/dist/src/formats/json/dialect.js +26 -3
  47. package/dist/src/formats/json/dialect.js.map +1 -1
  48. package/dist/src/formats/json/importer.d.ts +324 -7
  49. package/dist/src/formats/json/importer.d.ts.map +1 -1
  50. package/dist/src/formats/json/importer.js +153 -22
  51. package/dist/src/formats/json/importer.js.map +1 -1
  52. package/dist/src/formats/json/obographs.d.ts +21 -0
  53. package/dist/src/formats/json/obographs.d.ts.map +1 -0
  54. package/dist/src/formats/json/obographs.js +476 -0
  55. package/dist/src/formats/json/obographs.js.map +1 -0
  56. package/dist/src/formats/obo/importer.d.ts +90 -0
  57. package/dist/src/formats/obo/importer.d.ts.map +1 -0
  58. package/dist/src/formats/obo/importer.js +1248 -0
  59. package/dist/src/formats/obo/importer.js.map +1 -0
  60. package/dist/src/formats/obo/index.d.ts +7 -0
  61. package/dist/src/formats/obo/index.d.ts.map +1 -0
  62. package/dist/src/formats/obo/index.js +7 -0
  63. package/dist/src/formats/obo/index.js.map +1 -0
  64. package/dist/src/formats/obo/syntax.d.ts +121 -0
  65. package/dist/src/formats/obo/syntax.d.ts.map +1 -0
  66. package/dist/src/formats/obo/syntax.js +424 -0
  67. package/dist/src/formats/obo/syntax.js.map +1 -0
  68. package/dist/src/index.d.ts +1 -0
  69. package/dist/src/index.d.ts.map +1 -1
  70. package/dist/src/index.js +1 -0
  71. package/dist/src/index.js.map +1 -1
  72. package/dist/src/registry.d.ts.map +1 -1
  73. package/dist/src/registry.js +3 -1
  74. package/dist/src/registry.js.map +1 -1
  75. package/dist/src/sniff.d.ts +1 -1
  76. package/dist/src/sniff.d.ts.map +1 -1
  77. package/dist/src/sniff.js +23 -3
  78. package/dist/src/sniff.js.map +1 -1
  79. package/package.json +6 -1
  80. package/src/common/ontology.ts +169 -0
  81. package/src/formats/json/dialect.ts +37 -7
  82. package/src/formats/json/importer.ts +204 -27
  83. package/src/formats/json/obographs.ts +563 -0
  84. package/src/formats/obo/importer.ts +1695 -0
  85. package/src/formats/obo/index.ts +7 -0
  86. package/src/formats/obo/syntax.ts +466 -0
  87. package/src/index.ts +1 -0
  88. package/src/registry.ts +3 -1
  89. package/src/sniff.ts +35 -5
  90. package/dist/chunks/importer-B6rKRxzv.js.map +0 -1
  91. package/dist/chunks/writer-DHHfHn11.js.map +0 -1
package/dist/obo.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./src/formats/obo/index.js";
package/dist/obo.js ADDED
@@ -0,0 +1,6 @@
1
+ import { O, o } from "./chunks/importer-aNJfe0qu.js";
2
+ export {
3
+ O as OBO_ISSUE,
4
+ o as oboImporter
5
+ };
6
+ //# sourceMappingURL=obo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obo.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
package/dist/pajek.js CHANGED
@@ -1,4 +1,4 @@
1
- import { P, a, p, b } from "./chunks/importer-BmOl9gLW.js";
1
+ import { P, a, p, b } from "./chunks/importer-d0uQxFp6.js";
2
2
  export {
3
3
  P as PAJEK_ISSUE,
4
4
  a as PAJEK_LOSS,
@@ -0,0 +1,59 @@
1
+ /**
2
+ * What the OBO importer and the JSON importer's `obographs` dialect share (design section 1.0, the
3
+ * `ontology.ts` building block): the OBO column vocabulary (names, dtypes, roles), so the `.obo` and
4
+ * the `.json` of one ontology give the same columns, and the OBO 1.4 rule for turning the IRIs
5
+ * OBO Graphs writes back into the identifiers the `.obo` file writes (section 4.6).
6
+ */
7
+ import { type ColumnDecl } from "@graphty/graph-format";
8
+ /** The dtypes the OBO vocabulary uses. */
9
+ type OboDtype = "string" | "dict" | "bool" | "list" | "json";
10
+ /** One column of the OBO vocabulary. */
11
+ interface OboColumnSpec {
12
+ /** The dtype. */
13
+ readonly dtype: OboDtype;
14
+ /** The role, when the column carries one. */
15
+ readonly role?: "label" | "kind" | undefined;
16
+ }
17
+ /**
18
+ * The node columns of the OBO vocabulary, keyed by column name (design section 4.2). The names are
19
+ * the OBO tag names, so a Gene Ontology user finds `namespace`, `def` and `is_obsolete` under the
20
+ * names the GO documentation uses.
21
+ */
22
+ export declare const OBO_NODE_COLUMNS: Readonly<Record<string, OboColumnSpec>>;
23
+ /** The node column that marks a node made for an undeclared reference (design section 4.2). */
24
+ export declare const PLACEHOLDER_COLUMN = "graphty.placeholder";
25
+ /**
26
+ * The declaration of an OBO vocabulary column.
27
+ * @param domain - node or edge
28
+ * @param name - the column name (a key of OBO_NODE_COLUMNS / OBO_EDGE_COLUMNS, or the placeholder column)
29
+ * @returns the declaration, nullable, with origin `{ format: "obo", id: name }`
30
+ */
31
+ export declare function oboColumnDecl(domain: "node" | "edge", name: string): ColumnDecl;
32
+ /**
33
+ * An IRI as the identifier the `.obo` file writes (the OBO 1.4 mapping, section 5.9, read
34
+ * backwards): `http://purl.obolibrary.org/obo/GO_0008150` is `GO:0008150` (the prefix is the text
35
+ * before the first underscore), and `http://purl.obolibrary.org/obo/go#regulates` (how the OWL
36
+ * translation writes an unprefixed OBO id: subsets, relations, synonym types) is `regulates`.
37
+ * Every other IRI, and an OBO PURL that fits neither form (`.../obo/T/Female`), is kept.
38
+ * @param iri - the IRI
39
+ * @returns the CURIE or local id, or the IRI unchanged
40
+ */
41
+ export declare function compactOboIri(iri: string): string;
42
+ /** The OBO synonym scopes. */
43
+ export declare const SYNONYM_SCOPES: ReadonlySet<string>;
44
+ /**
45
+ * The OBO synonym scope of an OBO Graphs synonym predicate (`hasExactSynonym`, with or without the
46
+ * oboInOwl namespace).
47
+ * @param pred - the predicate
48
+ * @returns the scope, or null for a predicate that is not one of the four
49
+ */
50
+ export declare function synonymScopeOf(pred: string): string | null;
51
+ /**
52
+ * The OBO tag a `basicPropertyValues` predicate of OBO Graphs came from (the OBO-to-OWL mapping of
53
+ * the tags that are annotations), so the `.json` of an ontology fills the same columns as its
54
+ * `.obo`. `shorthand` is the relation's short name; every predicate not listed is a
55
+ * `property_value`.
56
+ */
57
+ export declare const OBOGRAPHS_PREDICATE_TAGS: ReadonlyMap<string, string>;
58
+ export {};
59
+ //# sourceMappingURL=ontology.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ontology.d.ts","sourceRoot":"","sources":["../../../src/common/ontology.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,0CAA0C;AAC1C,KAAK,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE7D,wCAAwC;AACxC,UAAU,aAAa;IACnB,iBAAiB;IACjB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;CAChD;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAiDnE,CAAC;AASH,+FAA+F;AAC/F,eAAO,MAAM,kBAAkB,wBAAwB,CAAC;AAExD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAa/E;AAQD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAejD;AAED,8BAA8B;AAC9B,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CAAoD,CAAC;AAEpG;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI1D;AAED;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAQ/D,CAAC"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * What the OBO importer and the JSON importer's `obographs` dialect share (design section 1.0, the
3
+ * `ontology.ts` building block): the OBO column vocabulary (names, dtypes, roles), so the `.obo` and
4
+ * the `.json` of one ontology give the same columns, and the OBO 1.4 rule for turning the IRIs
5
+ * OBO Graphs writes back into the identifiers the `.obo` file writes (section 4.6).
6
+ */
7
+ /**
8
+ * The node columns of the OBO vocabulary, keyed by column name (design section 4.2). The names are
9
+ * the OBO tag names, so a Gene Ontology user finds `namespace`, `def` and `is_obsolete` under the
10
+ * names the GO documentation uses.
11
+ */
12
+ export const OBO_NODE_COLUMNS = Object.freeze({
13
+ type: { dtype: "dict" },
14
+ name: { dtype: "string", role: "label" },
15
+ namespace: { dtype: "dict" },
16
+ def: { dtype: "string" },
17
+ "def.xrefs": { dtype: "list" },
18
+ comment: { dtype: "string" },
19
+ synonym: { dtype: "json" },
20
+ xref: { dtype: "list" },
21
+ "xref.descriptions": { dtype: "json" },
22
+ alt_id: { dtype: "list" },
23
+ subset: { dtype: "list" },
24
+ replaced_by: { dtype: "list" },
25
+ consider: { dtype: "list" },
26
+ is_obsolete: { dtype: "bool" },
27
+ is_anonymous: { dtype: "bool" },
28
+ builtin: { dtype: "bool" },
29
+ created_by: { dtype: "string" },
30
+ creation_date: { dtype: "string" },
31
+ intersection_of: { dtype: "json" },
32
+ union_of: { dtype: "list" },
33
+ equivalent_to: { dtype: "list" },
34
+ disjoint_from: { dtype: "list" },
35
+ property_value: { dtype: "json" },
36
+ // Typedef frames, under typedefs: "nodes"
37
+ domain: { dtype: "string" },
38
+ range: { dtype: "string" },
39
+ inverse_of: { dtype: "string" },
40
+ transitive_over: { dtype: "list" },
41
+ disjoint_over: { dtype: "list" },
42
+ holds_over_chain: { dtype: "json" },
43
+ equivalent_to_chain: { dtype: "json" },
44
+ expand_assertion_to: { dtype: "json" },
45
+ expand_expression_to: { dtype: "json" },
46
+ is_cyclic: { dtype: "bool" },
47
+ is_reflexive: { dtype: "bool" },
48
+ is_symmetric: { dtype: "bool" },
49
+ is_anti_symmetric: { dtype: "bool" },
50
+ is_asymmetric: { dtype: "bool" },
51
+ is_transitive: { dtype: "bool" },
52
+ is_functional: { dtype: "bool" },
53
+ is_inverse_functional: { dtype: "bool" },
54
+ is_metadata_tag: { dtype: "bool" },
55
+ is_class_level: { dtype: "bool" },
56
+ // OBO Graphs only
57
+ propertyType: { dtype: "dict" },
58
+ // what has no column of its own
59
+ "obo.qualifiers": { dtype: "json" },
60
+ "obo.unrecognized": { dtype: "json" },
61
+ });
62
+ /** The edge columns of the OBO vocabulary. */
63
+ const OBO_EDGE_COLUMNS = Object.freeze({
64
+ relation: { dtype: "dict", role: "kind" },
65
+ qualifiers: { dtype: "json" },
66
+ meta: { dtype: "json" },
67
+ });
68
+ /** The node column that marks a node made for an undeclared reference (design section 4.2). */
69
+ export const PLACEHOLDER_COLUMN = "graphty.placeholder";
70
+ /**
71
+ * The declaration of an OBO vocabulary column.
72
+ * @param domain - node or edge
73
+ * @param name - the column name (a key of OBO_NODE_COLUMNS / OBO_EDGE_COLUMNS, or the placeholder column)
74
+ * @returns the declaration, nullable, with origin `{ format: "obo", id: name }`
75
+ */
76
+ export function oboColumnDecl(domain, name) {
77
+ if (name === PLACEHOLDER_COLUMN) {
78
+ return { name, dtype: "bool", nullable: true, origin: { format: "graphty", id: "placeholder" } };
79
+ }
80
+ const spec = (domain === "node" ? OBO_NODE_COLUMNS : OBO_EDGE_COLUMNS)[name];
81
+ const decl = { name, dtype: spec.dtype, nullable: true, origin: { format: "obo", id: name } };
82
+ if (spec.dtype === "list") {
83
+ decl.itemDtype = "string";
84
+ }
85
+ if (spec.role !== undefined) {
86
+ decl.role = spec.role;
87
+ }
88
+ return decl;
89
+ }
90
+ /** The OBO PURL base every OBO Foundry IRI starts with. */
91
+ const OBO_PURL = "http://purl.obolibrary.org/obo/";
92
+ /** The oboInOwl namespace of the OBO-to-OWL mapping's annotation properties. */
93
+ const OBO_IN_OWL = "http://www.geneontology.org/formats/oboInOwl#";
94
+ /**
95
+ * An IRI as the identifier the `.obo` file writes (the OBO 1.4 mapping, section 5.9, read
96
+ * backwards): `http://purl.obolibrary.org/obo/GO_0008150` is `GO:0008150` (the prefix is the text
97
+ * before the first underscore), and `http://purl.obolibrary.org/obo/go#regulates` (how the OWL
98
+ * translation writes an unprefixed OBO id: subsets, relations, synonym types) is `regulates`.
99
+ * Every other IRI, and an OBO PURL that fits neither form (`.../obo/T/Female`), is kept.
100
+ * @param iri - the IRI
101
+ * @returns the CURIE or local id, or the IRI unchanged
102
+ */
103
+ export function compactOboIri(iri) {
104
+ if (!iri.startsWith(OBO_PURL)) {
105
+ return iri;
106
+ }
107
+ const rest = iri.slice(OBO_PURL.length);
108
+ const hash = rest.indexOf("#");
109
+ if (hash > 0) {
110
+ const local = rest.slice(hash + 1);
111
+ return local.length > 0 && !rest.slice(0, hash).includes("/") ? local : iri;
112
+ }
113
+ const underscore = rest.indexOf("_");
114
+ if (underscore <= 0 || rest.includes("/") || underscore === rest.length - 1) {
115
+ return iri;
116
+ }
117
+ return `${rest.slice(0, underscore)}:${rest.slice(underscore + 1)}`;
118
+ }
119
+ /** The OBO synonym scopes. */
120
+ export const SYNONYM_SCOPES = new Set(["EXACT", "BROAD", "NARROW", "RELATED"]);
121
+ /**
122
+ * The OBO synonym scope of an OBO Graphs synonym predicate (`hasExactSynonym`, with or without the
123
+ * oboInOwl namespace).
124
+ * @param pred - the predicate
125
+ * @returns the scope, or null for a predicate that is not one of the four
126
+ */
127
+ export function synonymScopeOf(pred) {
128
+ const local = pred.startsWith(OBO_IN_OWL) ? pred.slice(OBO_IN_OWL.length) : pred;
129
+ const match = /^has(Exact|Broad|Narrow|Related)Synonym$/.exec(local);
130
+ return match === null ? null : match[1].toUpperCase();
131
+ }
132
+ /**
133
+ * The OBO tag a `basicPropertyValues` predicate of OBO Graphs came from (the OBO-to-OWL mapping of
134
+ * the tags that are annotations), so the `.json` of an ontology fills the same columns as its
135
+ * `.obo`. `shorthand` is the relation's short name; every predicate not listed is a
136
+ * `property_value`.
137
+ */
138
+ export const OBOGRAPHS_PREDICATE_TAGS = new Map([
139
+ [`${OBO_IN_OWL}hasOBONamespace`, "namespace"],
140
+ [`${OBO_IN_OWL}hasAlternativeId`, "alt_id"],
141
+ [`${OBO_IN_OWL}created_by`, "created_by"],
142
+ [`${OBO_IN_OWL}creation_date`, "creation_date"],
143
+ [`${OBO_PURL}IAO_0100001`, "replaced_by"],
144
+ [`${OBO_IN_OWL}consider`, "consider"],
145
+ [`${OBO_IN_OWL}shorthand`, "shorthand"],
146
+ ]);
147
+ //# sourceMappingURL=ontology.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ontology.js","sourceRoot":"","sources":["../../../src/common/ontology.ts"],"names":[],"mappings":"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"}
@@ -19,11 +19,12 @@ export type JsonDialect = "node-link" | "d3" | "jgf" | "cytoscape" | "graphology
19
19
  /** Every dialect name, for option checking and messages. */
20
20
  export declare const JSON_DIALECTS: readonly JsonDialect[];
21
21
  /**
22
- * The dialects the importer reads: every JsonDialect plus two it only reads, NetworkX
23
- * adjacency_data (`nodes` plus one neighbour list per node under `adjacency`) and tree_data (a
24
- * nested `id` / `children` record). The exporter writes neither; write node-link instead.
22
+ * The dialects the importer reads: every JsonDialect plus three it only reads, NetworkX
23
+ * adjacency_data (`nodes` plus one neighbour list per node under `adjacency`), tree_data (a
24
+ * nested `id` / `children` record) and OBO Graphs (`graphs[]` of `sub` / `pred` / `obj` edges, the
25
+ * JSON form of the Gene Ontology and the OBO Foundry ontologies). The exporter writes none of them.
25
26
  */
26
- export type JsonImportDialect = JsonDialect | "adjacency" | "tree";
27
+ export type JsonImportDialect = JsonDialect | "adjacency" | "tree" | "obographs";
27
28
  /** Every dialect the importer reads, for option checking and messages. */
28
29
  export declare const JSON_IMPORT_DIALECTS: readonly JsonImportDialect[];
29
30
  /** The key under `meta.extra` that holds the shape record (design section 8.5). */
@@ -83,8 +84,9 @@ export declare function isJsonDialect(value: unknown): value is JsonDialect;
83
84
  export declare function isJsonImportDialect(value: unknown): value is JsonImportDialect;
84
85
  /**
85
86
  * The dialect of a parsed JSON document, by the shape rules of design section 8.2 (Cytoscape:
86
- * `elements` or a top-level array of `{ data }` elements; JGF: `graph.nodes` / `graph.edges` or
87
- * `graphs[]`; graphology: `options.type` / `options.multi`, `key` nodes without `id`, edges with
87
+ * `elements` or a top-level array of `{ data }` elements; OBO Graphs: `graphs[]` whose first graph
88
+ * has an edge with `sub` (or `subj`) and `obj` or a `pred`, or a node with `lbl`, `meta` or an OWL
89
+ * `type`; JGF: `graph.nodes` / `graph.edges` or any other `graphs[]`; graphology: `options.type` / `options.multi`, `key` nodes without `id`, edges with
88
90
  * `undirected` or an `attributes` record; vis: edges with `from` / `to`; d3: `links` without
89
91
  * `directed` / `multigraph` / `graph`; NetworkX adjacency_data: `nodes` and `adjacency` without
90
92
  * `links` / `edges`; NetworkX tree_data: `children` without `nodes` / `links` / `edges`; else
@@ -1 +1 @@
1
- {"version":3,"file":"dialect.d.ts","sourceRoot":"","sources":["../../../../src/formats/json/dialect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dialect.d.ts","sourceRoot":"","sources":["../../../../src/formats/json/dialect.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,7 @@ export const JSON_IMPORT_DIALECTS = Object.freeze([
27
27
  ...JSON_DIALECTS,
28
28
  "adjacency",
29
29
  "tree",
30
+ "obographs",
30
31
  ]);
31
32
  /** The key under `meta.extra` that holds the shape record (design section 8.5). */
32
33
  export const META_KEY = "json";
@@ -66,8 +67,9 @@ export function isJsonImportDialect(value) {
66
67
  }
67
68
  /**
68
69
  * The dialect of a parsed JSON document, by the shape rules of design section 8.2 (Cytoscape:
69
- * `elements` or a top-level array of `{ data }` elements; JGF: `graph.nodes` / `graph.edges` or
70
- * `graphs[]`; graphology: `options.type` / `options.multi`, `key` nodes without `id`, edges with
70
+ * `elements` or a top-level array of `{ data }` elements; OBO Graphs: `graphs[]` whose first graph
71
+ * has an edge with `sub` (or `subj`) and `obj` or a `pred`, or a node with `lbl`, `meta` or an OWL
72
+ * `type`; JGF: `graph.nodes` / `graph.edges` or any other `graphs[]`; graphology: `options.type` / `options.multi`, `key` nodes without `id`, edges with
71
73
  * `undirected` or an `attributes` record; vis: edges with `from` / `to`; d3: `links` without
72
74
  * `directed` / `multigraph` / `graph`; NetworkX adjacency_data: `nodes` and `adjacency` without
73
75
  * `links` / `edges`; NetworkX tree_data: `children` without `nodes` / `links` / `edges`; else
@@ -91,7 +93,7 @@ export function sniffJsonDialect(root) {
91
93
  return "jgf";
92
94
  }
93
95
  if (Array.isArray(root.graphs)) {
94
- return "jgf";
96
+ return isOboGraph(firstJsonObject(root.graphs)) ? "obographs" : "jgf";
95
97
  }
96
98
  if (!hasKey(root, "edges") && !hasKey(root, "links")) {
97
99
  if (hasKey(root, "nodes") && hasKey(root, "adjacency")) {
@@ -120,6 +122,25 @@ export function sniffJsonDialect(root) {
120
122
  const bare = !hasKey(root, "directed") && !hasKey(root, "multigraph") && !hasKey(root, "graph");
121
123
  return bare && hasKey(root, "links") ? "d3" : "node-link";
122
124
  }
125
+ /** The node types of OBO Graphs (the OWL entity kinds). */
126
+ const OBOGRAPHS_NODE_TYPES = new Set(["CLASS", "INDIVIDUAL", "PROPERTY"]);
127
+ /**
128
+ * Whether a graph of a `graphs[]` document is an OBO Graphs graph rather than JGF: anywhere in its
129
+ * nodes or edges, an edge with `sub` (or the outdated `subj`) and `obj`, or a `pred`, or a node
130
+ * with `lbl`, `meta` or a `type` of CLASS / INDIVIDUAL / PROPERTY (design 1.6: looking only at the
131
+ * first node and edge misses graphs with no edges and graphs whose first node has no `lbl`).
132
+ * @param graph - the first graph, or null
133
+ * @returns true for OBO Graphs
134
+ */
135
+ function isOboGraph(graph) {
136
+ if (graph === null) {
137
+ return false;
138
+ }
139
+ const isEdge = (e) => isJsonObject(e) && ((hasKey(e, "obj") && (hasKey(e, "sub") || hasKey(e, "subj"))) || hasKey(e, "pred"));
140
+ const isNode = (n) => isJsonObject(n) && (hasKey(n, "lbl") || hasKey(n, "meta") || OBOGRAPHS_NODE_TYPES.has(n.type));
141
+ return ((Array.isArray(graph.edges) && graph.edges.some(isEdge)) ||
142
+ (Array.isArray(graph.nodes) && graph.nodes.some(isNode)));
143
+ }
123
144
  /**
124
145
  * The first object of an array, or null.
125
146
  * @param value - maybe an array
@@ -170,6 +191,8 @@ export const DIALECT_DEFAULT_DIRECTED = Object.freeze({
170
191
  // networkx adjacency_data declares `directed`; tree_graph always builds a DiGraph
171
192
  adjacency: false,
172
193
  tree: true,
194
+ // OBO Graphs edges point from the subject (child) to the object (parent)
195
+ obographs: true,
173
196
  });
174
197
  /**
175
198
  * The dtypes a JSON dialect keeps as declared: JSON declares no types, so a value reads back as
@@ -1 +1 @@
1
- {"version":3,"file":"dialect.js","sourceRoot":"","sources":["../../../../src/formats/json/dialect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dialect.js","sourceRoot":"","sources":["../../../../src/formats/json/dialect.ts"],"names":[],"mappings":"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"}