@tiangong-lca/cli 0.0.10 → 0.0.12

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 (56) hide show
  1. package/README.md +18 -4
  2. package/assets/tidas-schemas/tidas_contacts.json +312 -0
  3. package/assets/tidas-schemas/tidas_contacts_category.json +126 -0
  4. package/assets/tidas-schemas/tidas_data_types.json +359 -0
  5. package/assets/tidas-schemas/tidas_flowproperties.json +303 -0
  6. package/assets/tidas-schemas/tidas_flowproperties_category.json +61 -0
  7. package/assets/tidas-schemas/tidas_flows.json +809 -0
  8. package/assets/tidas-schemas/tidas_flows_elementary_category.json +720 -0
  9. package/assets/tidas-schemas/tidas_flows_product_category.json +59623 -0
  10. package/assets/tidas-schemas/tidas_lciamethods.json +1326 -0
  11. package/assets/tidas-schemas/tidas_lciamethods_category.json +685 -0
  12. package/assets/tidas-schemas/tidas_lifecyclemodels.json +1374 -0
  13. package/assets/tidas-schemas/tidas_locations_category.json +2593 -0
  14. package/assets/tidas-schemas/tidas_processes.json +1646 -0
  15. package/assets/tidas-schemas/tidas_processes_category.json +10795 -0
  16. package/assets/tidas-schemas/tidas_sources.json +228 -0
  17. package/assets/tidas-schemas/tidas_sources_category.json +100 -0
  18. package/assets/tidas-schemas/tidas_unitgroups.json +338 -0
  19. package/assets/tidas-schemas/tidas_unitgroups_category.json +61 -0
  20. package/dist/src/cli.js +948 -8
  21. package/dist/src/cli.js.map +1 -1
  22. package/dist/src/lib/dataset-classification.js +947 -0
  23. package/dist/src/lib/dataset-classification.js.map +1 -0
  24. package/dist/src/lib/dataset-command.js +11 -0
  25. package/dist/src/lib/dataset-command.js.map +1 -1
  26. package/dist/src/lib/dataset-contract.js +2 -0
  27. package/dist/src/lib/dataset-contract.js.map +1 -1
  28. package/dist/src/lib/dataset-curation-queue.js +768 -0
  29. package/dist/src/lib/dataset-curation-queue.js.map +1 -0
  30. package/dist/src/lib/dataset-import-lca.js +18 -0
  31. package/dist/src/lib/dataset-import-lca.js.map +1 -1
  32. package/dist/src/lib/dataset-local.js +94 -1
  33. package/dist/src/lib/dataset-local.js.map +1 -1
  34. package/dist/src/lib/dataset-maintenance-clear-account.js +506 -0
  35. package/dist/src/lib/dataset-maintenance-clear-account.js.map +1 -0
  36. package/dist/src/lib/dataset-patch.js +797 -0
  37. package/dist/src/lib/dataset-patch.js.map +1 -0
  38. package/dist/src/lib/dataset-remote-verify.js +188 -3
  39. package/dist/src/lib/dataset-remote-verify.js.map +1 -1
  40. package/dist/src/lib/dataset-save-draft-run.js +725 -0
  41. package/dist/src/lib/dataset-save-draft-run.js.map +1 -0
  42. package/dist/src/lib/dataset-validate.js +32 -2
  43. package/dist/src/lib/dataset-validate.js.map +1 -1
  44. package/dist/src/lib/flow-publish-version.js +7 -2
  45. package/dist/src/lib/flow-publish-version.js.map +1 -1
  46. package/dist/src/lib/flow-qa.js +8 -0
  47. package/dist/src/lib/flow-qa.js.map +1 -1
  48. package/dist/src/lib/identity-preflight.js +895 -117
  49. package/dist/src/lib/identity-preflight.js.map +1 -1
  50. package/dist/src/lib/lifecyclemodel-qa.js +159 -34
  51. package/dist/src/lib/lifecyclemodel-qa.js.map +1 -1
  52. package/dist/src/lib/process-required-fields.js +62 -12
  53. package/dist/src/lib/process-required-fields.js.map +1 -1
  54. package/dist/src/lib/supabase-client.js +19 -8
  55. package/dist/src/lib/supabase-client.js.map +1 -1
  56. package/package.json +2 -1
package/README.md CHANGED
@@ -17,8 +17,8 @@ checkPaths:
17
17
  - bin/**
18
18
  - src/cli.ts
19
19
  - src/main.ts
20
- lastReviewedAt: 2026-06-01
21
- lastReviewedCommit: 24f96578290267865df3ee1244a96723129bc376
20
+ lastReviewedAt: 2026-06-04
21
+ lastReviewedCommit: 44d7a7450d1050ec2c4a76ebf97394698a89800c
22
22
  ---
23
23
 
24
24
  # TianGong LCA CLI
@@ -156,6 +156,8 @@ Key outputs under `--out-dir`:
156
156
 
157
157
  `--candidate-input` is repeatable and accepts JSON, JSONL, or a directory scanned recursively for JSON/JSONL candidate rows. Embedded `candidates` from the request and local-scan candidates are evaluated together. Add `--remote-candidates` when the preflight should also call `process_hybrid_search` or `flow_hybrid_search`; `--remote-query` overrides the target-derived search text and `--remote-limit` caps returned candidate rows. Remote candidate search uses the normal Supabase session env: `TIANGONG_LCA_API_BASE_URL`, `TIANGONG_LCA_API_KEY`, `TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY`, and optional `TIANGONG_LCA_REGION`.
158
158
 
159
+ When remote search is enabled, the CLI sends a compact fielded `query` string plus supported edge-search options to `process_hybrid_search` or `flow_hybrid_search`: `filter`, `match_count`, `page_size`, `data_source`, `match_threshold`, `full_text_weight`, `extracted_text_weight`, `semantic_weight`, and `rrf_k`. Request-level `remote_candidate_search.profile_hints` are not sent to the Edge Function. They are applied locally before scoring candidates so Foundry can provide source-derived facts such as flow type, flow property, reference unit, elementary categories, geography, reference-flow names, technology route, and system boundary without polluting the full-text/semantic query.
160
+
159
161
  Exact process exchange fingerprints with matching identity context block duplicate creation, while weaker inventory-only matches still route to manual review. Flow preflight also blocks alias-equivalent flows when type, reference property, unit, and category/CAS evidence match.
160
162
 
161
163
  ## Build Plan Gate
@@ -169,7 +171,7 @@ tiangong-lca flow build-plan validate --input ./flow-build-plan.json --out-dir .
169
171
  tiangong-lca flow build-plan materialize --input ./flow-build-plan.json --out-dir ./flow-build-plan --json
170
172
  ```
171
173
 
172
- The minimum plan contract requires an automatic identity decision, EvidenceManifest sources and field bindings, name plan, and the relevant process reference-flow or flow-property fields. Process materialization carries name, quantitative reference, exchange, source evidence, modelling, administrative, and annual supply/production fields from the plan into `processDataSet`; when annual volume is not explicit, it falls back to reference-flow `meanAmount` and then `resultingAmount`. Flow materialization carries name, flow type, reference property, source evidence, administrative, and classification fields into `flowDataSet`. `--report-only` keeps exit code `0` while still reporting blockers.
174
+ The minimum plan contract requires an automatic identity decision, EvidenceManifest sources and field bindings, name plan, and the relevant process reference-flow or flow-property fields. Process materialization carries name, quantitative reference, exchange, source evidence, modelling, administrative, and annual supply/production fields from the plan into `processDataSet`; when annual volume source evidence is not explicit, Foundry-facing required-field completion uses the deterministic `9999 missing-data-sentinel/year` value so the schema-required field stays searchable for later database-side curation. Flow materialization carries name, flow type, reference property, source evidence, administrative, and classification fields into `flowDataSet`. `--report-only` keeps exit code `0` while still reporting blockers.
173
175
 
174
176
  Key outputs under `--out-dir`:
175
177
 
@@ -263,9 +265,15 @@ tiangong-lca process resume-build --run-dir /abs/path/to/process-run --json
263
265
  tiangong-lca process publish-build --run-dir /abs/path/to/process-run --json
264
266
  tiangong-lca process batch-build --input ./examples/process-batch-build.request.json --out-dir /abs/path/to/process-batch --json
265
267
  tiangong-lca dataset validate --input ./rows.jsonl --type auto --out-dir /abs/path/to/dataset-validate --json
268
+ tiangong-lca dataset classification audit --type location --input ./rows/processes.jsonl --out-dir /abs/path/to/location-audit --json
269
+ tiangong-lca dataset classification apply --type location --input ./rows/processes.jsonl --decisions ./location-decisions.jsonl --out ./rows/processes.located.jsonl --out-dir /abs/path/to/location-apply --json
270
+ tiangong-lca dataset curation-queue build --processes ./rows/processes.jsonl --flows ./rows/flows.jsonl --support ./rows/sources.jsonl --out-dir /abs/path/to/curation-queue --json
271
+ tiangong-lca dataset curation-queue next --queue-dir /abs/path/to/curation-queue --type support --json
272
+ tiangong-lca dataset curation-queue verify --queue-dir /abs/path/to/curation-queue --type process --json
266
273
  tiangong-lca dataset evidence-search plan --query "中国2026年电力结构数据" --out-dir /abs/path/to/evidence-search --json
267
274
  tiangong-lca dataset evidence-search run --input ./evidence-search.request.json --results ./search-results.json --out-dir /abs/path/to/evidence-search --json
268
275
  tiangong-lca dataset references rewrite --input ./rows.jsonl --from flow:<old-id>@<old-version> --to flow:<new-id>@<new-version> --out-dir /abs/path/to/dataset-rewrite --json
276
+ tiangong-lca dataset maintenance plan --scope ./maintenance-scope.json --operation redo-import --out-dir /abs/path/to/dataset-maintenance
269
277
  tiangong-lca lifecyclemodel auto-build --input ./examples/lifecyclemodel-auto-build.request.json --out-dir /abs/path/to/lifecyclemodel-run --json
270
278
  tiangong-lca lifecyclemodel validate-build --run-dir /abs/path/to/lifecyclemodel-run --json
271
279
  tiangong-lca lifecyclemodel publish-build --run-dir /abs/path/to/lifecyclemodel-run --json
@@ -286,7 +294,7 @@ For `publish run`, relative `out_dir` values from either the request body or `--
286
294
 
287
295
  For `qa process`, `--rows-file` accepts either raw process rows as JSON/JSONL or the full JSON report emitted by `tiangong-lca process list --json`, as long as it contains a `rows` array.
288
296
 
289
- For `process identity-preflight` and `flow identity-preflight`, canonical TIDAS wrappers are schema-checked when present. Loose target objects are accepted for early planning and produce `schema_validation.status: "not_applicable"` until materialization. Candidate rows can be embedded in the request, loaded from repeatable `--candidate-input` local files/directories, or fetched through explicit `--remote-candidates` hybrid search; `identity-candidate-sources.json` records scanned files, remote endpoints, queries, filters, and row counts.
297
+ For `process identity-preflight` and `flow identity-preflight`, canonical TIDAS wrappers are schema-checked when present. Loose target objects are accepted for early planning and produce `schema_validation.status: "not_applicable"` until materialization. Candidate rows can be embedded in the request, loaded from repeatable `--candidate-input` local files/directories, or fetched through explicit `--remote-candidates` hybrid search; `identity-candidate-sources.json` records scanned files, remote endpoints, queries, filters, edge-search options, and row counts. The remote Edge Function receives only search-safe query/options fields; local-only `profile_hints` stay in the preflight target profile and candidate scoring evidence.
290
298
 
291
299
  For `process build-plan` and `flow build-plan`, canonical payloads embedded in the plan are schema-checked during `materialize`. Plan-only materialization now creates deterministic canonical `processDataSet` / `flowDataSet` wrappers from the build plan and validates them with the TIDAS SDK before reporting `passed`.
292
300
 
@@ -302,8 +310,14 @@ For `lifecyclemodel save-draft`, canonical lifecyclemodel payloads are validated
302
310
 
303
311
  For `dataset evidence-search`, `plan` creates the field-level query matrix and search budget. `run` accepts normalized external search results from browser/web-search tools or a generic JSON provider endpoint, then writes `outputs/evidence-search-plan.json`, `outputs/evidence-search-results.jsonl`, `outputs/evidence-search-report.json`, and `outputs/evidence-search-declaration.json` when evidence is absent or only partial. The CLI records scope and normalization; Codex/skills still own semantic judgement and source selection.
304
312
 
313
+ For `dataset validate`, `--type auto` supports mixed support scopes containing contact/source/unitgroup/flowproperty rows as well as flow/process/lifecyclemodel rows. For `dataset classification`, `children` and `path` navigate the bundled TIDAS category schemas copied from `tidas-tools`. `audit --type location` scans local rows for schema-derived location-code fields, plus TIDAS LCIA geography and lifecyclemodel connection location fields, whose values are not in `tidas_locations_category.json`; `apply --type location` applies structured decisions to a specific `target_path` when a row has multiple location fields.
314
+
315
+ For `dataset curation-queue build/next/verify`, the CLI owns entity-level Foundry import queue state. `build` writes `outputs/curation-queue-manifest.json`, `outputs/curation-queue-tasks.jsonl`, `outputs/curation-queue-locks.json`, `outputs/curation-queue-blockers.jsonl`, and per-entity `input.jsonl`, `closure.json`, and `entity-run-plan.json`. `next` returns one runnable support/flow/process task based on checkpoint state. `verify` passes only when scoped checkpoints are complete and build blockers are absent. AI authoring must return structured patches or build plans, and remote writes remain gated by deterministic apply, schema/QA, prewrite verify, and readback.
316
+
305
317
  For `dataset references rewrite`, `--commit` executes the state-aware save-draft path for patched process and lifecyclemodel rows; without `--commit`, the command only writes local rewrite artifacts.
306
318
 
319
+ For `dataset maintenance plan/apply/verify`, the planned command family owns RLS-scoped delete/redo workflows for bad imports. The contract requires a frozen scope manifest, current-user visible snapshot, protected rows list, reference impact report, dry-run report, explicit commit report, and readback verification. Foundry and skills may orchestrate it, but they must not add private Supabase delete logic.
320
+
307
321
  ## More Docs
308
322
 
309
323
  - `docs/IMPLEMENTATION_GUIDE_CN.md`: maintainer-facing command contract and implementation notes
@@ -0,0 +1,312 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "contactDataSet": {
6
+ "type": "object",
7
+ "properties": {
8
+ "@xmlns": {
9
+ "type": "string",
10
+ "const": "http://lca.jrc.it/ILCD/Contact"
11
+ },
12
+ "@xmlns:common": {
13
+ "type": "string",
14
+ "const": "http://lca.jrc.it/ILCD/Common"
15
+ },
16
+ "@xmlns:xsi": {
17
+ "type": "string",
18
+ "const": "http://www.w3.org/2001/XMLSchema-instance"
19
+ },
20
+ "@version": {
21
+ "type": "string",
22
+ "const": "1.1",
23
+ "description": "Indicates, which version of the ILCD format is used"
24
+ },
25
+ "@xsi:schemaLocation": {
26
+ "type": "string",
27
+ "const": "http://lca.jrc.it/ILCD/Contact ../../schemas/ILCD_ContactDataSet.xsd"
28
+ },
29
+ "contactInformation": {
30
+ "type": "object",
31
+ "properties": {
32
+ "dataSetInformation": {
33
+ "type": "object",
34
+ "properties": {
35
+ "common:UUID": {
36
+ "$ref": "tidas_data_types.json#/$defs/UUID",
37
+ "description": "Automatically generated Universally Unique Identifier of this data set. Together with the 'Data set version', the UUID uniquely identifies each data set."
38
+ },
39
+ "common:shortName": {
40
+ "$ref": "tidas_data_types.json#/$defs/StringMultiLang",
41
+ "description": "Short name for the contact, that is used for display e.g. of links to this data set (especially in case the full name of the contact is rather long, e.g. 'FAO' for 'Food and Agriculture Organization')."
42
+ },
43
+ "common:name": {
44
+ "$ref": "tidas_data_types.json#/$defs/StringMultiLang",
45
+ "description": "Name of the person, working group, organisation, or database network, which is represented by this contact data set."
46
+ },
47
+ "classificationInformation": {
48
+ "type": "object",
49
+ "description": "Hierarchical classification of the contact foreseen to be used to structure the contact content of the database. (Note: This entry is NOT required for the identification of the contact data set. It should nevertheless be avoided to use identical names for contacts in the same class.",
50
+ "properties": {
51
+ "common:classification": {
52
+ "type": "object",
53
+ "description": "Optional statistical or other classification of the data set. Typically also used for structuring LCA databases.",
54
+ "properties": {
55
+ "common:class": {
56
+ "anyOf": [
57
+ {
58
+ "type": "array",
59
+ "items": [
60
+ {
61
+ "type": "object",
62
+ "properties": {
63
+ "@level": {
64
+ "$ref": "tidas_data_types.json#/$defs/LevelType",
65
+ "const": "0"
66
+ },
67
+ "@classId": {
68
+ "type": "string"
69
+ },
70
+ "#text": {
71
+ "type": "string"
72
+ }
73
+ },
74
+ "required": [
75
+ "@level",
76
+ "@classId",
77
+ "#text"
78
+ ],
79
+ "dependencies": {
80
+ "@level": {
81
+ "$ref": "./tidas_contacts_category.json#/$defs/Contact"
82
+ }
83
+ }
84
+ },
85
+ {
86
+ "type": "object",
87
+ "properties": {
88
+ "@level": {
89
+ "$ref": "tidas_data_types.json#/$defs/LevelType",
90
+ "const": "1"
91
+ },
92
+ "@classId": {
93
+ "type": "string"
94
+ },
95
+ "#text": {
96
+ "type": "string"
97
+ }
98
+ },
99
+ "required": [
100
+ "@level",
101
+ "@classId",
102
+ "#text"
103
+ ],
104
+ "dependencies": {
105
+ "@level": {
106
+ "$ref": "./tidas_contacts_category.json#/$defs/Contact"
107
+ }
108
+ }
109
+ }
110
+ ],
111
+ "uniqueItems": true,
112
+ "allOf": [
113
+ {
114
+ "maxContains": 1,
115
+ "minContains": 0,
116
+ "contains": {
117
+ "properties": {
118
+ "@level": {
119
+ "const": "0"
120
+ }
121
+ }
122
+ }
123
+ },
124
+ {
125
+ "maxContains": 1,
126
+ "minContains": 0,
127
+ "contains": {
128
+ "properties": {
129
+ "@level": {
130
+ "const": "1"
131
+ }
132
+ }
133
+ }
134
+ }
135
+ ]
136
+ },
137
+ {
138
+ "type": "object",
139
+ "properties": {
140
+ "@level": {
141
+ "$ref": "tidas_data_types.json#/$defs/LevelType",
142
+ "const": "0"
143
+ },
144
+ "@classId": {
145
+ "type": "string"
146
+ },
147
+ "#text": {
148
+ "type": "string"
149
+ }
150
+ },
151
+ "required": [
152
+ "@level",
153
+ "@classId",
154
+ "#text"
155
+ ],
156
+ "dependencies": {
157
+ "@level": {
158
+ "$ref": "./tidas_contacts_category.json#/$defs/Contact"
159
+ }
160
+ }
161
+ }
162
+ ]
163
+ }
164
+ },
165
+ "required": [
166
+ "common:class"
167
+ ]
168
+ },
169
+ "common:other": {
170
+ "$ref": "tidas_data_types.json#/$defs/CommonOther"
171
+ }
172
+ },
173
+ "required": [
174
+ "common:classification"
175
+ ]
176
+ },
177
+ "contactAddress": {
178
+ "$ref": "tidas_data_types.json#/$defs/STMultiLang",
179
+ "description": "Mail address of the contact; specific for the person, working group, or department. [Note: A general contact point to the organisation is to be given in 'General contact point'.]"
180
+ },
181
+ "email": {
182
+ "$ref": "tidas_data_types.json#/$defs/String",
183
+ "format": "email"
184
+ },
185
+ "telephone": {
186
+ "$ref": "tidas_data_types.json#/$defs/String"
187
+ },
188
+ "telefax": {
189
+ "$ref": "tidas_data_types.json#/$defs/String"
190
+ },
191
+ "WWWAddress": {
192
+ "$ref": "tidas_data_types.json#/$defs/ST",
193
+ "description": "Web-address of the person, working group, organisation or database network."
194
+ },
195
+ "centralContactPoint": {
196
+ "$ref": "tidas_data_types.json#/$defs/STMultiLang",
197
+ "description": "Alternative address / contact details for the contact. Provides contact information in case e.g. the person or group represented by this contact has left the organisation or changed office/telephone. This alternative contact point can hence contain also a central telephone number, e-mail, www-address etc. of the organisation."
198
+ },
199
+ "contactDescriptionOrComment": {
200
+ "$ref": "tidas_data_types.json#/$defs/STMultiLang",
201
+ "description": "Free text for additional description of the organisation or person of the contact, such as organisational profile, person responsibilities, etc."
202
+ },
203
+ "referenceToContact": {
204
+ "$ref": "tidas_data_types.json#/$defs/GlobalReferenceType",
205
+ "description": "\"Contact data set\"s of working groups, organisations or database networks to which EITHER this person or entity OR this database, data set format, or compliance system belongs. [Note: This does not necessarily imply a legally binding relationship, but may also be a voluntary membership.]"
206
+ },
207
+ "referenceToLogo": {
208
+ "$ref": "tidas_data_types.json#/$defs/GlobalReferenceType",
209
+ "description": "\"Source data set\" of the logo of the organisation or source to be used in reports etc."
210
+ },
211
+ "common:other": {
212
+ "$ref": "tidas_data_types.json#/$defs/CommonOther"
213
+ }
214
+ },
215
+ "required": [
216
+ "common:UUID",
217
+ "common:shortName",
218
+ "common:name",
219
+ "classificationInformation"
220
+ ]
221
+ },
222
+ "common:other": {
223
+ "$ref": "tidas_data_types.json#/$defs/CommonOther"
224
+ }
225
+ },
226
+ "required": [
227
+ "dataSetInformation"
228
+ ]
229
+ },
230
+ "administrativeInformation": {
231
+ "type": "object",
232
+ "properties": {
233
+ "dataEntryBy": {
234
+ "type": "object",
235
+ "properties": {
236
+ "common:timeStamp": {
237
+ "$ref": "tidas_data_types.json#/$defs/dateTime",
238
+ "description": "Date and time stamp of data set generation, typically an automated entry ('last saved')."
239
+ },
240
+ "common:referenceToDataSetFormat": {
241
+ "$ref": "tidas_data_types.json#/$defs/GlobalReferenceType",
242
+ "description": "\"Source data set\" of the used version of the ILCD format. If additional data format fields have been integrated into the data set file, using the \"namespace\" option, the used format namespace(s) are to be given. This is the case if the data sets carries additional information as specified by other, particular LCA formats, e.g. of other database networks or LCA softwares."
243
+ },
244
+ "common:other": {
245
+ "$ref": "tidas_data_types.json#/$defs/CommonOther"
246
+ }
247
+ },
248
+ "required": [
249
+ "common:timeStamp",
250
+ "common:referenceToDataSetFormat"
251
+ ]
252
+ },
253
+ "publicationAndOwnership": {
254
+ "type": "object",
255
+ "properties": {
256
+ "common:dataSetVersion": {
257
+ "type": "string",
258
+ "description": "Version number of data set. First two digits refer to major updates, the second two digits to minor revisions and error corrections etc. The third three digits are intended for automatic and internal counting of versions during data set development. Together with the data set's UUID, the 'Data set version' uniquely identifies each data set."
259
+ },
260
+ "common:referenceToPrecedingDataSetVersion": {
261
+ "$ref": "tidas_data_types.json#/$defs/GlobalReferenceType",
262
+ "description": "Last preceding data set, which was replaced by this version. In TIDAS, this reference includes the preceding data set URI, UUID, and version number."
263
+ },
264
+ "common:permanentDataSetURI": {
265
+ "type": "string",
266
+ "format": "uri",
267
+ "description": "URI (i.e. an internet address) of the original of this data set. [Note: This equally globally unique identifier supports users and software tools to identify and retrieve the original version of a data set via the internet or to check for available updates. The URI must not represent an existing WWW address, but it should be unique and point to the data access point, e.g. by combining the data owner's www path with the data set's UUID, e.g. http://www.mycompany.com/lca/processes/50f12420-8855-12db-b606-0900210c9a66.]"
268
+ },
269
+ "common:referenceToOwnershipOfDataSet": {
270
+ "$ref": "tidas_data_types.json#/$defs/GlobalReferenceType",
271
+ "description": "\"Contact data set\" of the person or entity who owns this data set. (Note: this is not necessarily the publisher of the data set.)"
272
+ },
273
+ "common:other": {
274
+ "$ref": "tidas_data_types.json#/$defs/CommonOther"
275
+ }
276
+ },
277
+ "required": [
278
+ "common:dataSetVersion",
279
+ "common:referenceToOwnershipOfDataSet"
280
+ ]
281
+ },
282
+ "common:other": {
283
+ "$ref": "tidas_data_types.json#/$defs/CommonOther"
284
+ }
285
+ },
286
+ "required": [
287
+ "dataEntryBy",
288
+ "publicationAndOwnership"
289
+ ]
290
+ },
291
+ "common:other": {
292
+ "$ref": "tidas_data_types.json#/$defs/CommonOther"
293
+ }
294
+ },
295
+ "required": [
296
+ "@xmlns:common",
297
+ "@xmlns",
298
+ "@xmlns:xsi",
299
+ "@version",
300
+ "@xsi:schemaLocation",
301
+ "contactInformation",
302
+ "administrativeInformation"
303
+ ]
304
+ },
305
+ "common:other": {
306
+ "$ref": "tidas_data_types.json#/$defs/CommonOther"
307
+ }
308
+ },
309
+ "required": [
310
+ "contactDataSet"
311
+ ]
312
+ }
@@ -0,0 +1,126 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$defs": {
4
+ "Contact": {
5
+ "oneOf": [
6
+ {
7
+ "properties": {
8
+ "@level": {
9
+ "const": "0"
10
+ },
11
+ "@classId": {
12
+ "const": "1"
13
+ },
14
+ "#text": {
15
+ "const": "Group of organisations, project"
16
+ }
17
+ }
18
+ },
19
+ {
20
+ "properties": {
21
+ "@level": {
22
+ "const": "0"
23
+ },
24
+ "@classId": {
25
+ "const": "2"
26
+ },
27
+ "#text": {
28
+ "const": "Organisations"
29
+ }
30
+ }
31
+ },
32
+ {
33
+ "properties": {
34
+ "@level": {
35
+ "const": "1"
36
+ },
37
+ "@classId": {
38
+ "const": "2.1"
39
+ },
40
+ "#text": {
41
+ "const": "Private companies"
42
+ }
43
+ }
44
+ },
45
+ {
46
+ "properties": {
47
+ "@level": {
48
+ "const": "1"
49
+ },
50
+ "@classId": {
51
+ "const": "2.2"
52
+ },
53
+ "#text": {
54
+ "const": "Governmental organisations"
55
+ }
56
+ }
57
+ },
58
+ {
59
+ "properties": {
60
+ "@level": {
61
+ "const": "1"
62
+ },
63
+ "@classId": {
64
+ "const": "2.3"
65
+ },
66
+ "#text": {
67
+ "const": "Non-governmental organisations"
68
+ }
69
+ }
70
+ },
71
+ {
72
+ "properties": {
73
+ "@level": {
74
+ "const": "1"
75
+ },
76
+ "@classId": {
77
+ "const": "2.4"
78
+ },
79
+ "#text": {
80
+ "const": "Other organisations"
81
+ }
82
+ }
83
+ },
84
+ {
85
+ "properties": {
86
+ "@level": {
87
+ "const": "0"
88
+ },
89
+ "@classId": {
90
+ "const": "3"
91
+ },
92
+ "#text": {
93
+ "const": "Working groups within organisation"
94
+ }
95
+ }
96
+ },
97
+ {
98
+ "properties": {
99
+ "@level": {
100
+ "const": "0"
101
+ },
102
+ "@classId": {
103
+ "const": "4"
104
+ },
105
+ "#text": {
106
+ "const": "Persons"
107
+ }
108
+ }
109
+ },
110
+ {
111
+ "properties": {
112
+ "@level": {
113
+ "const": "0"
114
+ },
115
+ "@classId": {
116
+ "const": "5"
117
+ },
118
+ "#text": {
119
+ "const": "Other"
120
+ }
121
+ }
122
+ }
123
+ ]
124
+ }
125
+ }
126
+ }