@documentation-robotics/cli 0.1.13 → 0.3.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/README.md +74 -2
- package/dist/analysis/relationship-classifier.js +2 -9
- package/dist/analysis/relationship-classifier.js.map +2 -2
- package/dist/analyzers/call-graph-utils.js +2 -2
- package/dist/analyzers/call-graph-utils.js.map +2 -2
- package/dist/analyzers/cards/build.js +171 -0
- package/dist/analyzers/cards/build.js.map +7 -0
- package/dist/analyzers/cards/classify.js +42 -0
- package/dist/analyzers/cards/classify.js.map +7 -0
- package/dist/analyzers/cards/edge-index.js +44 -0
- package/dist/analyzers/cards/edge-index.js.map +7 -0
- package/dist/analyzers/cards/facts.js +46 -0
- package/dist/analyzers/cards/facts.js.map +7 -0
- package/dist/analyzers/cards/graph.js +42 -0
- package/dist/analyzers/cards/graph.js.map +7 -0
- package/dist/analyzers/cards/index.js +8 -0
- package/dist/analyzers/cards/index.js.map +7 -0
- package/dist/analyzers/cards/tier0.js +18 -0
- package/dist/analyzers/cards/tier0.js.map +7 -0
- package/dist/analyzers/cards/types.js +1 -0
- package/dist/analyzers/cards/types.js.map +7 -0
- package/dist/analyzers/cbm-analyzer.js +195 -171
- package/dist/analyzers/cbm-analyzer.js.map +2 -2
- package/dist/analyzers/cbm-responses.js +336 -0
- package/dist/analyzers/cbm-responses.js.map +7 -0
- package/dist/analyzers/edge-relationships.js +45 -0
- package/dist/analyzers/edge-relationships.js.map +7 -0
- package/dist/analyzers/mapping-loader.js +9 -0
- package/dist/analyzers/mapping-loader.js.map +2 -2
- package/dist/analyzers/tier0-rules.js +153 -0
- package/dist/analyzers/tier0-rules.js.map +7 -0
- package/dist/analyzers/types.js.map +1 -1
- package/dist/analyzers/verify-engine.js +22 -19
- package/dist/analyzers/verify-engine.js.map +2 -2
- package/dist/audit/relationships/ai/prompts.js +10 -10
- package/dist/audit/relationships/ai/prompts.js.map +2 -2
- package/dist/audit/relationships/analysis/layer-templates.js +52 -52
- package/dist/audit/relationships/analysis/layer-templates.js.map +1 -1
- package/dist/cli.js +112 -28
- package/dist/cli.js.map +3 -3
- package/dist/coding-agents/agents/claude-code.js +3 -1
- package/dist/coding-agents/agents/claude-code.js.map +2 -2
- package/dist/coding-agents/claude-code-client.js +2 -1
- package/dist/coding-agents/claude-code-client.js.map +2 -2
- package/dist/coding-agents/copilot-client.js +17 -12
- package/dist/coding-agents/copilot-client.js.map +2 -2
- package/dist/coding-agents/default-permissions.js +152 -0
- package/dist/coding-agents/default-permissions.js.map +7 -0
- package/dist/coding-agents/drbot-mcp.js +167 -0
- package/dist/coding-agents/drbot-mcp.js.map +7 -0
- package/dist/commands/add.js +12 -7
- package/dist/commands/add.js.map +2 -2
- package/dist/commands/analyzer.js +134 -23
- package/dist/commands/analyzer.js.map +2 -2
- package/dist/commands/audit.js +6 -6
- package/dist/commands/audit.js.map +2 -2
- package/dist/commands/changeset-verify.js +55 -0
- package/dist/commands/changeset-verify.js.map +7 -0
- package/dist/commands/changeset.js +261 -147
- package/dist/commands/changeset.js.map +2 -2
- package/dist/commands/delete.js +52 -19
- package/dist/commands/delete.js.map +3 -3
- package/dist/commands/element.js +3 -2
- package/dist/commands/element.js.map +2 -2
- package/dist/commands/farm.js +773 -0
- package/dist/commands/farm.js.map +7 -0
- package/dist/commands/init.js +11 -1
- package/dist/commands/init.js.map +2 -2
- package/dist/commands/mcp.js +122 -0
- package/dist/commands/mcp.js.map +7 -0
- package/dist/commands/relationship.js +251 -47
- package/dist/commands/relationship.js.map +2 -2
- package/dist/commands/reports.js +1 -1
- package/dist/commands/reports.js.map +2 -2
- package/dist/commands/update.js +56 -24
- package/dist/commands/update.js.map +2 -2
- package/dist/commands/upgrade.js +99 -11
- package/dist/commands/upgrade.js.map +3 -3
- package/dist/commands/validate.js +41 -3
- package/dist/commands/validate.js.map +2 -2
- package/dist/commands/version.js +2 -2
- package/dist/commands/version.js.map +2 -2
- package/dist/commands/visualize.js +4 -3
- package/dist/commands/visualize.js.map +2 -2
- package/dist/config.js +83 -0
- package/dist/config.js.map +7 -0
- package/dist/core/annotation-store.js +138 -0
- package/dist/core/annotation-store.js.map +7 -0
- package/dist/core/catalog-migration.js +33 -0
- package/dist/core/catalog-migration.js.map +7 -0
- package/dist/core/changeset-analysis.js +421 -0
- package/dist/core/changeset-analysis.js.map +7 -0
- package/dist/core/changeset-base-index.js +153 -0
- package/dist/core/changeset-base-index.js.map +7 -0
- package/dist/core/changeset-brief-delta.js +102 -0
- package/dist/core/changeset-brief-delta.js.map +7 -0
- package/dist/core/changeset-graph.js +281 -0
- package/dist/core/changeset-graph.js.map +7 -0
- package/dist/core/changeset-only-guard.js +32 -0
- package/dist/core/changeset-only-guard.js.map +7 -0
- package/dist/core/changeset-summary.js +68 -0
- package/dist/core/changeset-summary.js.map +7 -0
- package/dist/core/changeset-validator.js +66 -20
- package/dist/core/changeset-validator.js.map +2 -2
- package/dist/core/changeset-verify.js +518 -0
- package/dist/core/changeset-verify.js.map +7 -0
- package/dist/core/changeset.js +56 -9
- package/dist/core/changeset.js.map +2 -2
- package/dist/core/element-type-migration.js +145 -0
- package/dist/core/element-type-migration.js.map +7 -0
- package/dist/core/farm-manifest.js +140 -0
- package/dist/core/farm-manifest.js.map +7 -0
- package/dist/core/farm-sync-engine.js +346 -0
- package/dist/core/farm-sync-engine.js.map +7 -0
- package/dist/core/farm-sync-state.js +167 -0
- package/dist/core/farm-sync-state.js.map +7 -0
- package/dist/core/manifest.js +6 -3
- package/dist/core/manifest.js.map +2 -2
- package/dist/core/migration-registry.js +84 -1
- package/dist/core/migration-registry.js.map +2 -2
- package/dist/core/model-upgrade.js +102 -0
- package/dist/core/model-upgrade.js.map +7 -0
- package/dist/core/model.js +257 -44
- package/dist/core/model.js.map +3 -3
- package/dist/core/mutation-handler.js +71 -6
- package/dist/core/mutation-handler.js.map +2 -2
- package/dist/core/relationship-migration-table.js +6639 -0
- package/dist/core/relationship-migration-table.js.map +7 -0
- package/dist/core/relationship-migration.js +272 -0
- package/dist/core/relationship-migration.js.map +7 -0
- package/dist/core/relationship-prune.js +49 -0
- package/dist/core/relationship-prune.js.map +7 -0
- package/dist/core/relationship-staging.js +68 -0
- package/dist/core/relationship-staging.js.map +7 -0
- package/dist/core/relationships.js +26 -4
- package/dist/core/relationships.js.map +2 -2
- package/dist/core/report-data-model.js +7 -13
- package/dist/core/report-data-model.js.map +2 -2
- package/dist/core/staged-changeset-storage.js +64 -17
- package/dist/core/staged-changeset-storage.js.map +2 -2
- package/dist/core/staged-source-reference.js +28 -0
- package/dist/core/staged-source-reference.js.map +7 -0
- package/dist/core/staging-area.js +83 -18
- package/dist/core/staging-area.js.map +2 -2
- package/dist/core/virtual-projection.js +14 -5
- package/dist/core/virtual-projection.js.map +2 -2
- package/dist/export/archimate-exporter.js +1 -0
- package/dist/export/archimate-exporter.js.map +2 -2
- package/dist/generated/compiled-validators.js +2 -2
- package/dist/generated/compiled-validators.js.map +2 -2
- package/dist/generated/layer-registry.js +16 -16
- package/dist/generated/layer-registry.js.map +2 -2
- package/dist/generated/node-types.js +186 -168
- package/dist/generated/node-types.js.map +2 -2
- package/dist/generated/relationship-index.js +2209 -7727
- package/dist/generated/relationship-index.js.map +2 -2
- package/dist/integrations/claude_code/agents/dr-architect.md +16 -3
- package/dist/integrations/claude_code/agents/dr-extractor.md +1 -1
- package/dist/integrations/claude_code/commands/dr-analyzer.md +565 -0
- package/dist/integrations/claude_code/commands/dr-map.md +13 -0
- package/dist/integrations/claude_code/commands/dr-plan.md +40 -0
- package/dist/integrations/claude_code/commands/dr-relate.md +106 -96
- package/dist/integrations/claude_code/commands/dr-verify.md +45 -2
- package/dist/integrations/claude_code/docs/END_TO_END_WALKTHROUGH.md +14 -0
- package/dist/integrations/claude_code/docs/MCP_SERVER.md +79 -0
- package/dist/integrations/claude_code/docs/QUICK_START.md +37 -8
- package/dist/integrations/claude_code/docs/README.md +52 -1
- package/dist/integrations/claude_code/skills/dr_01_motivation_layer/SKILL.md +93 -72
- package/dist/integrations/claude_code/skills/dr_02_business_layer/SKILL.md +163 -126
- package/dist/integrations/claude_code/skills/dr_03_product_layer/SKILL.md +161 -126
- package/dist/integrations/claude_code/skills/dr_04_security_layer/SKILL.md +153 -133
- package/dist/integrations/claude_code/skills/dr_05_application_layer/SKILL.md +129 -100
- package/dist/integrations/claude_code/skills/dr_06_technology_layer/SKILL.md +111 -94
- package/dist/integrations/claude_code/skills/dr_07_api_layer/SKILL.md +143 -157
- package/dist/integrations/claude_code/skills/dr_08_data_model_layer/SKILL.md +117 -33
- package/dist/integrations/claude_code/skills/dr_09_dataset_layer/SKILL.md +74 -25
- package/dist/integrations/claude_code/skills/dr_10_ux_layer/SKILL.md +88 -12
- package/dist/integrations/claude_code/skills/dr_11_navigation_layer/SKILL.md +83 -24
- package/dist/integrations/claude_code/skills/dr_12_apm_layer/SKILL.md +57 -12
- package/dist/integrations/claude_code/skills/dr_13_testing_layer/SKILL.md +92 -15
- package/dist/integrations/claude_code/skills/dr_change_planning/SKILL.md +119 -0
- package/dist/integrations/claude_code/skills/dr_changeset_reviewer/SKILL.md +3 -0
- package/dist/integrations/claude_code/skills/dr_engineering_guide/SKILL.md +1 -1
- package/dist/integrations/github_copilot/agents/dr-architect.md +1 -1
- package/dist/integrations/github_copilot/skills/dr_01_motivation_layer/SKILL.md +182 -102
- package/dist/integrations/github_copilot/skills/dr_02_business_layer/SKILL.md +266 -148
- package/dist/integrations/github_copilot/skills/dr_03_product_layer/SKILL.md +547 -86
- package/dist/integrations/github_copilot/skills/dr_04_security_layer/SKILL.md +164 -169
- package/dist/integrations/github_copilot/skills/dr_05_application_layer/SKILL.md +420 -150
- package/dist/integrations/github_copilot/skills/dr_06_technology_layer/SKILL.md +331 -138
- package/dist/integrations/github_copilot/skills/dr_07_api_layer/SKILL.md +265 -201
- package/dist/integrations/github_copilot/skills/dr_08_data_model_layer/SKILL.md +181 -58
- package/dist/integrations/github_copilot/skills/dr_09_dataset_layer/SKILL.md +209 -57
- package/dist/integrations/github_copilot/skills/dr_10_ux_layer/SKILL.md +277 -112
- package/dist/integrations/github_copilot/skills/dr_11_navigation_layer/SKILL.md +219 -70
- package/dist/integrations/github_copilot/skills/dr_12_apm_layer/SKILL.md +189 -105
- package/dist/integrations/github_copilot/skills/dr_13_testing_layer/SKILL.md +222 -102
- package/dist/integrations/github_copilot/skills/dr_change_planning/SKILL.md +119 -0
- package/dist/integrations/github_copilot/skills/dr_changeset_reviewer/SKILL.md +3 -0
- package/dist/integrations/hash-utils.js.map +2 -2
- package/dist/mcp/api-key-manager.js +111 -0
- package/dist/mcp/api-key-manager.js.map +7 -0
- package/dist/mcp/changeset-only.js +34 -0
- package/dist/mcp/changeset-only.js.map +7 -0
- package/dist/mcp/http-transport.js +176 -0
- package/dist/mcp/http-transport.js.map +7 -0
- package/dist/mcp/resource-registry.js +97 -0
- package/dist/mcp/resource-registry.js.map +7 -0
- package/dist/mcp/tool-registry.js +60 -0
- package/dist/mcp/tool-registry.js.map +7 -0
- package/dist/mcp/tools/annotation-create.js +39 -0
- package/dist/mcp/tools/annotation-create.js.map +7 -0
- package/dist/mcp/tools/annotation-delete.js +29 -0
- package/dist/mcp/tools/annotation-delete.js.map +7 -0
- package/dist/mcp/tools/annotation-get.js +29 -0
- package/dist/mcp/tools/annotation-get.js.map +7 -0
- package/dist/mcp/tools/annotation-list.js +24 -0
- package/dist/mcp/tools/annotation-list.js.map +7 -0
- package/dist/mcp/tools/annotation-reply.js +34 -0
- package/dist/mcp/tools/annotation-reply.js.map +7 -0
- package/dist/mcp/tools/annotation-shared.js +10 -0
- package/dist/mcp/tools/annotation-shared.js.map +7 -0
- package/dist/mcp/tools/annotation-update.js +39 -0
- package/dist/mcp/tools/annotation-update.js.map +7 -0
- package/dist/mcp/tools/changeset-analysis-tools.js +78 -0
- package/dist/mcp/tools/changeset-analysis-tools.js.map +7 -0
- package/dist/mcp/tools/changeset-editing.js +184 -0
- package/dist/mcp/tools/changeset-editing.js.map +7 -0
- package/dist/mcp/tools/changeset-lifecycle.js +83 -0
- package/dist/mcp/tools/changeset-lifecycle.js.map +7 -0
- package/dist/mcp/tools/changeset-list.js +33 -0
- package/dist/mcp/tools/changeset-list.js.map +7 -0
- package/dist/mcp/tools/changeset-shared.js +31 -0
- package/dist/mcp/tools/changeset-shared.js.map +7 -0
- package/dist/mcp/tools/changeset-show.js +55 -0
- package/dist/mcp/tools/changeset-show.js.map +7 -0
- package/dist/mcp/tools/changeset-verify.js +43 -0
- package/dist/mcp/tools/changeset-verify.js.map +7 -0
- package/dist/mcp/tools/chat-launch.js +50 -0
- package/dist/mcp/tools/chat-launch.js.map +7 -0
- package/dist/mcp/tools/chat-status.js +26 -0
- package/dist/mcp/tools/chat-status.js.map +7 -0
- package/dist/mcp/tools/index.js +65 -0
- package/dist/mcp/tools/index.js.map +7 -0
- package/dist/mcp/tools/model-add.js +107 -0
- package/dist/mcp/tools/model-add.js.map +7 -0
- package/dist/mcp/tools/model-delete.js +99 -0
- package/dist/mcp/tools/model-delete.js.map +7 -0
- package/dist/mcp/tools/model-export.js +72 -0
- package/dist/mcp/tools/model-export.js.map +7 -0
- package/dist/mcp/tools/model-info.js +51 -0
- package/dist/mcp/tools/model-info.js.map +7 -0
- package/dist/mcp/tools/model-list.js +53 -0
- package/dist/mcp/tools/model-list.js.map +7 -0
- package/dist/mcp/tools/model-reload.js +34 -0
- package/dist/mcp/tools/model-reload.js.map +7 -0
- package/dist/mcp/tools/model-search.js +102 -0
- package/dist/mcp/tools/model-search.js.map +7 -0
- package/dist/mcp/tools/model-show.js +68 -0
- package/dist/mcp/tools/model-show.js.map +7 -0
- package/dist/mcp/tools/model-stats.js +22 -0
- package/dist/mcp/tools/model-stats.js.map +7 -0
- package/dist/mcp/tools/model-trace.js +118 -0
- package/dist/mcp/tools/model-trace.js.map +7 -0
- package/dist/mcp/tools/model-update.js +121 -0
- package/dist/mcp/tools/model-update.js.map +7 -0
- package/dist/mcp/tools/model-validate.js +78 -0
- package/dist/mcp/tools/model-validate.js.map +7 -0
- package/dist/mcp/tools/relationship-tools.js +98 -0
- package/dist/mcp/tools/relationship-tools.js.map +7 -0
- package/dist/mcp/tools/shared.js +126 -0
- package/dist/mcp/tools/shared.js.map +7 -0
- package/dist/mcp/tools/spec-type.js +90 -0
- package/dist/mcp/tools/spec-type.js.map +7 -0
- package/dist/reports/model-layer-report-generator.js +5 -3
- package/dist/reports/model-layer-report-generator.js.map +2 -2
- package/dist/reports/model-readme-generator.js +116 -0
- package/dist/reports/model-readme-generator.js.map +7 -0
- package/dist/reports/model-report-data.js +37 -1
- package/dist/reports/model-report-data.js.map +2 -2
- package/dist/reports/model-report-orchestrator.js +29 -6
- package/dist/reports/model-report-orchestrator.js.map +2 -2
- package/dist/reports/model-report-utils.js +9 -0
- package/dist/reports/model-report-utils.js.map +7 -0
- package/dist/schemas/bundled/analyzers/cbm.json +1186 -68
- package/dist/schemas/bundled/analyzers/manifest.json +2 -2
- package/dist/schemas/bundled/api.json +1029 -1658
- package/dist/schemas/bundled/apm.json +499 -734
- package/dist/schemas/bundled/application.json +745 -370
- package/dist/schemas/bundled/base.json +3 -220
- package/dist/schemas/bundled/business.json +452 -366
- package/dist/schemas/bundled/data-model.json +403 -383
- package/dist/schemas/bundled/data-store.json +334 -558
- package/dist/schemas/bundled/manifest.json +18 -18
- package/dist/schemas/bundled/motivation.json +349 -368
- package/dist/schemas/bundled/navigation.json +415 -731
- package/dist/schemas/bundled/product.json +325 -159
- package/dist/schemas/bundled/security.json +864 -1232
- package/dist/schemas/bundled/technology.json +574 -703
- package/dist/schemas/bundled/testing.json +718 -1643
- package/dist/schemas/bundled/ux.json +739 -1352
- package/dist/server/schemas.js +8 -0
- package/dist/server/schemas.js.map +2 -2
- package/dist/server/server.js +234 -31
- package/dist/server/server.js.map +2 -2
- package/dist/server-entry.js +2 -1
- package/dist/server-entry.js.map +2 -2
- package/dist/telemetry/config.js +2 -40
- package/dist/telemetry/config.js.map +2 -2
- package/dist/telemetry/index.js +1 -1
- package/dist/types/index.js.map +2 -2
- package/dist/utils/ansi-suppressor.js +23 -0
- package/dist/utils/ansi-suppressor.js.map +7 -0
- package/dist/utils/attribute-patch.js +41 -0
- package/dist/utils/attribute-patch.js.map +7 -0
- package/dist/utils/color-utils.js +34 -0
- package/dist/utils/color-utils.js.map +7 -0
- package/dist/utils/element-reference-shape.js +15 -1
- package/dist/utils/element-reference-shape.js.map +3 -3
- package/dist/utils/error-hints.js +29 -0
- package/dist/utils/error-hints.js.map +7 -0
- package/dist/utils/errors.js +75 -10
- package/dist/utils/errors.js.map +2 -2
- package/dist/utils/globals.js +17 -1
- package/dist/utils/globals.js.map +2 -2
- package/dist/utils/project-paths.js +50 -3
- package/dist/utils/project-paths.js.map +2 -2
- package/dist/utils/reference-path-parser.js +49 -0
- package/dist/utils/reference-path-parser.js.map +7 -0
- package/dist/utils/source-reference.js +17 -10
- package/dist/utils/source-reference.js.map +2 -2
- package/dist/utils/spec-version.js +10 -2
- package/dist/utils/spec-version.js.map +2 -2
- package/dist/validators/composed-reference-validator.js +240 -0
- package/dist/validators/composed-reference-validator.js.map +7 -0
- package/dist/validators/reference-validator.js +57 -13
- package/dist/validators/reference-validator.js.map +3 -3
- package/dist/validators/relationship-schema-validator.js +33 -5
- package/dist/validators/relationship-schema-validator.js.map +3 -3
- package/dist/validators/schema-validator.js +27 -9
- package/dist/validators/schema-validator.js.map +2 -2
- package/dist/validators/types.js.map +1 -1
- package/dist/viewer/README.md +6 -6
- package/dist/viewer/assets/main-CxzcuU_o.js +84 -0
- package/dist/viewer/assets/main-j-7ULYpm.css +1 -0
- package/dist/viewer/index.html +2 -2
- package/dist/viewer/manifest.json +10 -10
- package/dist/viewer/version.json +1 -1
- package/package.json +7 -3
- package/dist/viewer/assets/main-B7AOQXXX.js +0 -81
- package/dist/viewer/assets/main-vdrFrG7q.css +0 -1
|
@@ -1,22 +1,32 @@
|
|
|
1
1
|
{
|
|
2
|
-
"specVersion": "0.
|
|
2
|
+
"specVersion": "0.11.0",
|
|
3
3
|
"layer": {
|
|
4
4
|
"id": "data-model",
|
|
5
5
|
"number": 8,
|
|
6
6
|
"name": "Data Model Layer",
|
|
7
|
-
"description": "
|
|
7
|
+
"description": "Defines the logical data model: object schemas and their properties, enumerations, validation rules and the relationships between entities, independent of any particular storage technology (JSON Schema Draft 7). Entity classes, ORM models, DTO and record types, and type definitions that describe domain data are evidence for elements here; how that data is persisted belongs to the data-store layer. Modelling rules: data-model elements are passive structure; they are realized, accessed, referenced and mapped, and never serve, trigger or perform behaviour. A subschema written in place is part of what declares it (composes): a schema document composes its root schema and the definitions declared in it, an object schema composes its properties, an array schema its inline item schema, a composition its inline branches, and a property the value constraints it carries. A type declared elsewhere and reached by $ref or by name is referenced (references): a property references the object schema or definition its value takes, an array or composition references a named definition, and a Reference references the definition, object schema or document it points at. Subtyping is specializes. An entity class, an ORM model whatever the framework, or a type whose shape is published as a schema is an object schema; an in-code structure that only carries data between parts of the program is an application data object, which an object schema may realize. Object schemas and definitions realize the application data objects and business objects they give form to (a direct link to the business object is a shortcut through the data object), and map to their counterparts in other layers (maps-to): API schemas, request bodies, responses and parameters, and data-store collections. Behaviour reaches data by accessing it: application functions, components and events access object schemas and definitions, and business behaviour accesses the business objects they realize; a schema does not reference the behaviour that uses it. Schemas satisfy the requirements and constraints that govern the data but do not realize goals. The model is independent of technology: it does not depend on system software or use technology services, and the file that holds a schema document maps to a technology artifact.",
|
|
8
8
|
"inspired_by": {
|
|
9
9
|
"standard": "JSON Schema Draft 7",
|
|
10
10
|
"version": "Draft 7",
|
|
11
11
|
"url": "https://json-schema.org/draft-07/"
|
|
12
12
|
},
|
|
13
|
-
"node_types": [
|
|
13
|
+
"node_types": [
|
|
14
|
+
"data-model.arrayschema",
|
|
15
|
+
"data-model.jsonschema",
|
|
16
|
+
"data-model.numericschema",
|
|
17
|
+
"data-model.objectschema",
|
|
18
|
+
"data-model.reference",
|
|
19
|
+
"data-model.schemacomposition",
|
|
20
|
+
"data-model.schemadefinition",
|
|
21
|
+
"data-model.schemaproperty",
|
|
22
|
+
"data-model.stringschema"
|
|
23
|
+
]
|
|
14
24
|
},
|
|
15
25
|
"nodeSchemas": {
|
|
16
26
|
"arrayschema": {
|
|
17
27
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
18
28
|
"title": "ArraySchema",
|
|
19
|
-
"description": "
|
|
29
|
+
"description": "A JSON Schema subschema with type 'array' that constrains an ordered list of values: the schema each element must satisfy, how many elements are allowed, whether they must be distinct, and whether at least one element must match a given subschema. Use SchemaProperty instead when you are modelling the named field that holds the list (its name, title, description, readOnly) rather than the constraints on the list value itself. Use ObjectSchema instead when the collection is keyed by name rather than ordered by position, such as a Map<String, T>, dict or record type, which becomes an object with additionalProperties or patternProperties. Use SchemaDefinition instead when the list type is declared once under 'definitions' with a title and reused through $ref. Model the array constraints inside it as an arrayschema. Use SchemaComposition instead when the constraint is a boolean combination (allOf/anyOf/oneOf/not) of subschemas, for example a union of element types, rather than array keywords directly.",
|
|
20
30
|
"allOf": [
|
|
21
31
|
{
|
|
22
32
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -36,34 +46,52 @@
|
|
|
36
46
|
"type": "object",
|
|
37
47
|
"properties": {
|
|
38
48
|
"type": {
|
|
39
|
-
"const": "array"
|
|
49
|
+
"const": "array",
|
|
50
|
+
"description": "The JSON Schema type keyword, which for this element must be the literal string 'array'. Always set it so the schema validates only array instances."
|
|
40
51
|
},
|
|
41
52
|
"items": {
|
|
42
|
-
"type": "string"
|
|
53
|
+
"type": "string",
|
|
54
|
+
"description": "The subschema, inline or as a $ref to a definition, that every array element must validate against. Set it whenever the element type is known, for example the T in List<T>. This schema stores the subschema or $ref as a single string."
|
|
43
55
|
},
|
|
44
56
|
"minItems": {
|
|
45
|
-
"type": "integer"
|
|
57
|
+
"type": "integer",
|
|
58
|
+
"description": "A non-negative integer giving the inclusive minimum number of elements. Set it when the list must not be empty (1) or needs a floor, for example from @Size(min) or @NotEmpty."
|
|
46
59
|
},
|
|
47
60
|
"maxItems": {
|
|
48
|
-
"type": "integer"
|
|
61
|
+
"type": "integer",
|
|
62
|
+
"description": "A non-negative integer giving the inclusive maximum number of elements. Set it when code or configuration enforces an upper bound on list length, for example @Size(max) or a page-size limit."
|
|
49
63
|
},
|
|
50
64
|
"uniqueItems": {
|
|
51
|
-
"type": "boolean"
|
|
65
|
+
"type": "boolean",
|
|
66
|
+
"description": "When true, all elements must be pairwise distinct by JSON equality. Set it when the source type has set semantics or the code rejects duplicates."
|
|
52
67
|
},
|
|
53
68
|
"contains": {
|
|
54
|
-
"type": "string"
|
|
69
|
+
"type": "string",
|
|
70
|
+
"description": "A subschema (inline or $ref) that at least one element must validate against. Set it only when the code requires the list to include a matching element, such as at least one primary address. This schema stores the subschema or $ref as a single string."
|
|
55
71
|
}
|
|
56
72
|
},
|
|
57
73
|
"required": [],
|
|
58
74
|
"additionalProperties": false
|
|
59
75
|
}
|
|
60
76
|
},
|
|
77
|
+
"x-dr-standard": "JSON Schema Draft 7 Validation (draft-handrews-json-schema-validation-01) §6.4 Validation Keywords for Arrays (items, additionalItems, maxItems, minItems, uniqueItems, contains)",
|
|
78
|
+
"x-dr-evidence": [
|
|
79
|
+
"A DTO, entity or record field typed as a collection, such as List<T>, T[], Array<T>, Set<T>, Sequence[T] or repeated in protobuf, where Set or frozenset types imply uniqueItems.",
|
|
80
|
+
"Cardinality validators on a collection field, such as Bean Validation @Size(min, max) or @NotEmpty on a List, Pydantic conlist or Field(min_length=..., max_length=...), or Zod z.array(...).min().max().nonempty().",
|
|
81
|
+
"A JSON Schema or OpenAPI fragment containing \"type\": \"array\" together with an \"items\" keyword, often with minItems, maxItems or uniqueItems."
|
|
82
|
+
],
|
|
83
|
+
"x-dr-distinguish": {
|
|
84
|
+
"data-model.schemaproperty": "you are modelling the named field that holds the list (its name, title, description, readOnly) rather than the constraints on the list value itself.",
|
|
85
|
+
"data-model.objectschema": "the collection is keyed by name rather than ordered by position, such as a Map<String, T>, dict or record type, which becomes an object with additionalProperties or patternProperties.",
|
|
86
|
+
"data-model.schemadefinition": "the list type is declared once under 'definitions' with a title and reused through $ref. Model the array constraints inside it as an arrayschema.",
|
|
87
|
+
"data-model.schemacomposition": "the constraint is a boolean combination (allOf/anyOf/oneOf/not) of subschemas, for example a union of element types, rather than array keywords directly."
|
|
88
|
+
},
|
|
61
89
|
"$id": "urn:dr:spec:node:data-model.arrayschema"
|
|
62
90
|
},
|
|
63
91
|
"jsonschema": {
|
|
64
92
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
65
93
|
"title": "JSONSchema",
|
|
66
|
-
"description": "
|
|
94
|
+
"description": "A top-level schema document that is the unit of identity and $ref resolution in the data model: it declares a dialect via $schema and a base URI via $id, and contains the root type constraint plus any named subschemas under definitions. Only the outermost schema of a file or registered document qualifies; nested subschemas do not. Use SchemaDefinition instead when the schema is a named, reusable subschema nested under a document's definitions keyword rather than the document itself. Use ObjectSchema instead when you are modelling the object-level constraints (properties, required, additionalProperties) of a schema rather than the document that carries $schema/$id. Use Reference instead when the element is only a $ref pointer to another schema, not a self-contained document with its own $id. Use SchemaComposition instead when the element combines subschemas with allOf/anyOf/oneOf/not rather than being an identified root document.",
|
|
67
95
|
"allOf": [
|
|
68
96
|
{
|
|
69
97
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -83,13 +111,16 @@
|
|
|
83
111
|
"type": "object",
|
|
84
112
|
"properties": {
|
|
85
113
|
"$schema": {
|
|
86
|
-
"type": "string"
|
|
114
|
+
"type": "string",
|
|
115
|
+
"description": "URI of the JSON Schema dialect/meta-schema the document conforms to (e.g. 'http://json-schema.org/draft-07/schema#'); set on every root document so validators apply Draft 7 semantics."
|
|
87
116
|
},
|
|
88
117
|
"$id": {
|
|
89
|
-
"type": "string"
|
|
118
|
+
"type": "string",
|
|
119
|
+
"description": "Absolute URI that identifies the document and serves as the base URI for resolving relative $ref values (e.g. 'https://example.com/schemas/order.json'); set to a stable, unique URI per document."
|
|
90
120
|
},
|
|
91
121
|
"title": {
|
|
92
|
-
"type": "string"
|
|
122
|
+
"type": "string",
|
|
123
|
+
"description": "Short human-readable name for the schema document, typically the domain entity it describes (e.g. 'Order'); set when the document needs a display label in tooling or generated docs."
|
|
93
124
|
},
|
|
94
125
|
"type": {
|
|
95
126
|
"type": "string",
|
|
@@ -113,12 +144,24 @@
|
|
|
113
144
|
"additionalProperties": false
|
|
114
145
|
}
|
|
115
146
|
},
|
|
147
|
+
"x-dr-standard": "JSON Schema Draft 7 (draft-handrews-json-schema-01) §4.3.3 Root Schema and Subschemas, §7 The $schema Keyword, §8.2 The $id Keyword",
|
|
148
|
+
"x-dr-evidence": [
|
|
149
|
+
"a *.schema.json or *.json file whose top-level object contains \"$schema\": \"http://json-schema.org/draft-07/schema#\" and an \"$id\" URI",
|
|
150
|
+
"a schema registered with a validator by URI, e.g. ajv.addSchema(schema, 'https://example.com/order.json') or compile() called on a loaded file",
|
|
151
|
+
"a build step or decorator that emits a whole schema document per model, e.g. pydantic Model.model_json_schema() or zod-to-json-schema output written to a schemas/ directory"
|
|
152
|
+
],
|
|
153
|
+
"x-dr-distinguish": {
|
|
154
|
+
"data-model.schemadefinition": "the schema is a named, reusable subschema nested under a document's definitions keyword rather than the document itself",
|
|
155
|
+
"data-model.objectschema": "you are modelling the object-level constraints (properties, required, additionalProperties) of a schema rather than the document that carries $schema/$id",
|
|
156
|
+
"data-model.reference": "the element is only a $ref pointer to another schema, not a self-contained document with its own $id",
|
|
157
|
+
"data-model.schemacomposition": "the element combines subschemas with allOf/anyOf/oneOf/not rather than being an identified root document"
|
|
158
|
+
},
|
|
116
159
|
"$id": "urn:dr:spec:node:data-model.jsonschema"
|
|
117
160
|
},
|
|
118
161
|
"numericschema": {
|
|
119
162
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
120
163
|
"title": "NumericSchema",
|
|
121
|
-
"description": "
|
|
164
|
+
"description": "A schema constraining JSON number or integer values through validation keywords: inclusive or exclusive lower and upper bounds, or a divisibility step (multipleOf). It describes the value space of a numeric datum, independent of the field that carries it or how the value is stored. Use SchemaProperty instead when the element is a named field of an object (e.g. Order.quantity) carrying its own title, default, readOnly or description; the numeric constraints it applies may be modelled as a NumericSchema that the property composes. Use SchemaDefinition instead when the numeric type is a named, reusable definition under 'definitions' (e.g. a 'Percentage' type referenced via $ref), especially one restricted to an enum of fixed values rather than a range. Use StringSchema instead when the value is serialized as a string even though it looks numeric, e.g. a decimal-as-string money amount, a zero-padded code or a phone number constrained by pattern or length. Use SchemaComposition instead when the numeric constraint is formed by combining subschemas with allOf/anyOf/oneOf/not, e.g. 'positive OR null', rather than by a single set of bounds.",
|
|
122
165
|
"allOf": [
|
|
123
166
|
{
|
|
124
167
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -143,31 +186,48 @@
|
|
|
143
186
|
"description": "JSON Schema Draft 7 numeric type: 'number' for any numeric value, 'integer' for whole numbers only"
|
|
144
187
|
},
|
|
145
188
|
"minimum": {
|
|
146
|
-
"type": "number"
|
|
189
|
+
"type": "number",
|
|
190
|
+
"description": "Inclusive lower bound: valid instances must be greater than or equal to this number, in the same units as the value. Set it when the domain forbids smaller values, e.g. 0 for quantities."
|
|
147
191
|
},
|
|
148
192
|
"maximum": {
|
|
149
|
-
"type": "number"
|
|
193
|
+
"type": "number",
|
|
194
|
+
"description": "Inclusive upper bound: valid instances must be less than or equal to this number, in the same units as the value. Set it when the domain caps the value, e.g. 100 for a percentage."
|
|
150
195
|
},
|
|
151
196
|
"exclusiveMinimum": {
|
|
152
|
-
"type": "number"
|
|
197
|
+
"type": "number",
|
|
198
|
+
"description": "Exclusive lower bound given as a number (Draft 7 semantics): valid instances must be strictly greater than this value. Set it instead of minimum when the boundary itself is invalid, e.g. 0 for a strictly positive price."
|
|
153
199
|
},
|
|
154
200
|
"exclusiveMaximum": {
|
|
155
|
-
"type": "number"
|
|
201
|
+
"type": "number",
|
|
202
|
+
"description": "Exclusive upper bound given as a number (Draft 7 semantics): valid instances must be strictly less than this value. Set it instead of maximum when the boundary itself is invalid, e.g. 1 for a probability strictly below one."
|
|
156
203
|
},
|
|
157
204
|
"multipleOf": {
|
|
158
|
-
"type": "number"
|
|
205
|
+
"type": "number",
|
|
206
|
+
"description": "Strictly positive number that every valid instance must divide into evenly, expressing a step or precision such as 0.01 for cents or 5 for five-minute intervals. Set it only when the domain imposes such a granularity."
|
|
159
207
|
}
|
|
160
208
|
},
|
|
161
209
|
"required": ["type"],
|
|
162
210
|
"additionalProperties": false
|
|
163
211
|
}
|
|
164
212
|
},
|
|
213
|
+
"x-dr-standard": "JSON Schema Draft 7 Validation §6.2 Validation Keywords for Numeric Instances (multipleOf, maximum, exclusiveMaximum, minimum, exclusiveMinimum), with type 'number'/'integer' (§6.1.1)",
|
|
214
|
+
"x-dr-evidence": [
|
|
215
|
+
"a JSON Schema or OpenAPI fragment with \"type\": \"integer\" or \"number\" plus minimum, maximum, exclusiveMinimum or multipleOf keywords",
|
|
216
|
+
"a numeric field annotated with range validators, e.g. Java @Min/@Max/@DecimalMin/@Positive, Pydantic Field(ge=0, le=100) or conint(gt=0), or Zod z.number().int().min(1)",
|
|
217
|
+
"a declared numeric value type or constrained alias with range checks in its constructor or validator, e.g. a Percentage or Quantity class that rejects values outside 0..100 or non-integers"
|
|
218
|
+
],
|
|
219
|
+
"x-dr-distinguish": {
|
|
220
|
+
"data-model.schemaproperty": "the element is a named field of an object (e.g. Order.quantity) carrying its own title, default, readOnly or description; the numeric constraints it applies may be modelled as a NumericSchema that the property references.",
|
|
221
|
+
"data-model.schemadefinition": "the numeric type is a named, reusable definition under 'definitions' (e.g. a 'Percentage' type referenced via $ref), especially one restricted to an enum of fixed values rather than a range.",
|
|
222
|
+
"data-model.stringschema": "the value is serialized as a string even though it looks numeric, e.g. a decimal-as-string money amount, a zero-padded code or a phone number constrained by pattern or length.",
|
|
223
|
+
"data-model.schemacomposition": "the numeric constraint is formed by combining subschemas with allOf/anyOf/oneOf/not, e.g. 'positive OR null', rather than by a single set of bounds."
|
|
224
|
+
},
|
|
165
225
|
"$id": "urn:dr:spec:node:data-model.numericschema"
|
|
166
226
|
},
|
|
167
227
|
"objectschema": {
|
|
168
228
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
169
229
|
"title": "ObjectSchema",
|
|
170
|
-
"description": "
|
|
230
|
+
"description": "A schema node of type 'object' that constrains JSON object instances by declaring a set of named, typed properties, which of those properties must be present, and rules for undeclared or dynamically named keys. In code it corresponds to a structured domain record whose shape is part of the data model (an entity class, an ORM model whatever the framework, or a DTO, record or interface whose shape is published as a schema), not to an individual field or to a primitive type alias. Use application DataObject instead when the structure only carries data between parts of the program and is neither persisted as an entity nor published as a schema; an object schema may realize such a data object. Use SchemaProperty instead when the symbol is a single field, column or attribute inside a structure rather than the structure that owns the fields. Use JSONSchema instead when the element is the root schema document or file, identified by $schema and $id and holding definitions, rather than one object shape described within it. Use SchemaDefinition instead when the named reusable type is a primitive alias or enumeration (e.g. a TypeScript enum, a branded string type, a Python Enum) with no named fields of its own. Use SchemaComposition instead when the type is defined only by combining other schemas (union, intersection, discriminated oneOf, negation) rather than by declaring its own properties; plain class inheritance stays an objectschema with a specializes relationship.",
|
|
171
231
|
"allOf": [
|
|
172
232
|
{
|
|
173
233
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -187,7 +247,8 @@
|
|
|
187
247
|
"type": "object",
|
|
188
248
|
"properties": {
|
|
189
249
|
"type": {
|
|
190
|
-
"type": "string"
|
|
250
|
+
"type": "string",
|
|
251
|
+
"description": "The JSON Schema type keyword, which is always the string 'object' for this element; set it on every instance."
|
|
191
252
|
},
|
|
192
253
|
"properties": {
|
|
193
254
|
"type": "object",
|
|
@@ -202,28 +263,47 @@
|
|
|
202
263
|
"description": "Schema applied to all property names of the object instance for name validation"
|
|
203
264
|
},
|
|
204
265
|
"required": {
|
|
205
|
-
"type": "
|
|
266
|
+
"type": "array",
|
|
267
|
+
"items": {
|
|
268
|
+
"type": "string"
|
|
269
|
+
},
|
|
270
|
+
"description": "Array of property names (strings) that must be present in a valid instance; populate it from fields that are non-optional in code, such as TypeScript fields without '?', Pydantic fields without defaults, or NOT NULL columns."
|
|
206
271
|
},
|
|
207
272
|
"additionalProperties": {
|
|
208
|
-
"type": "string"
|
|
273
|
+
"type": "string",
|
|
274
|
+
"description": "Either a boolean or a subschema (inline or $ref) governing keys not listed in properties or patternProperties; set false for closed models (e.g. Pydantic extra='forbid', TypeScript exact types) and a value schema for map-like types such as Record<string, T>. This schema stores the value as a single string."
|
|
209
275
|
},
|
|
210
276
|
"minProperties": {
|
|
211
|
-
"type": "integer"
|
|
277
|
+
"type": "integer",
|
|
278
|
+
"description": "Non-negative integer giving the minimum number of keys a valid instance must contain; set it only when code or a validator explicitly enforces a lower bound on key count."
|
|
212
279
|
},
|
|
213
280
|
"maxProperties": {
|
|
214
|
-
"type": "integer"
|
|
281
|
+
"type": "integer",
|
|
282
|
+
"description": "Non-negative integer giving the maximum number of keys a valid instance may contain; set it only when code or a validator explicitly enforces an upper bound on key count."
|
|
215
283
|
}
|
|
216
284
|
},
|
|
217
285
|
"required": ["type"],
|
|
218
286
|
"additionalProperties": false
|
|
219
287
|
}
|
|
220
288
|
},
|
|
289
|
+
"x-dr-standard": "JSON Schema Draft 7 Validation (draft-handrews-json-schema-validation-01) §6.5 Validation Keywords for Objects",
|
|
290
|
+
"x-dr-evidence": [
|
|
291
|
+
"A class annotated @Entity/@Table, a Django models.Model subclass, or a SQLAlchemy declarative class whose attributes declare domain fields",
|
|
292
|
+
"A TypeScript interface or type literal, Pydantic BaseModel, Python @dataclass, Java record, or Go struct with named typed fields used as a DTO or request/response payload",
|
|
293
|
+
"A JSON Schema or OpenAPI components.schemas entry with \"type\": \"object\" and a \"properties\" map, or a z.object()/Joi.object()/yup.object() validator declaration"
|
|
294
|
+
],
|
|
295
|
+
"x-dr-distinguish": {
|
|
296
|
+
"data-model.schemaproperty": "the symbol is a single field, column or attribute inside a structure rather than the structure that owns the fields",
|
|
297
|
+
"data-model.jsonschema": "the element is the root schema document or file, identified by $schema and $id and holding definitions, rather than one object shape described within it",
|
|
298
|
+
"data-model.schemadefinition": "the named reusable type is a primitive alias or enumeration (e.g. a TypeScript enum, a branded string type, a Python Enum) with no named fields of its own",
|
|
299
|
+
"data-model.schemacomposition": "the type is defined only by combining other schemas (union, intersection, discriminated oneOf, negation) rather than by declaring its own properties; plain class inheritance stays an objectschema with an extends relationship"
|
|
300
|
+
},
|
|
221
301
|
"$id": "urn:dr:spec:node:data-model.objectschema"
|
|
222
302
|
},
|
|
223
303
|
"reference": {
|
|
224
304
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
225
305
|
"title": "Reference",
|
|
226
|
-
"description": "A
|
|
306
|
+
"description": "A schema node whose only effective content is a $ref keyword holding a URI or JSON Pointer fragment (e.g. '#/definitions/Address') that delegates validation of an instance to another schema, adding no constraints of its own. A usage site that points at a type declared elsewhere, not the declaration of that type. Use SchemaDefinition instead when the element is the named, reusable type being pointed at (the target under 'definitions'), rather than the pointer to it. Use SchemaProperty instead when the element is a named property of an object schema that also carries its own type, description, default or other constraints, even if it uses $ref to obtain its type. Use SchemaComposition instead when the $ref must be combined with further constraints or alternatives, which in Draft 7 requires wrapping it in allOf/anyOf/oneOf. Use JSONSchema instead when the element is the whole root schema document with $schema and $id, not a pointer into or toward one.",
|
|
227
307
|
"allOf": [
|
|
228
308
|
{
|
|
229
309
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -250,12 +330,24 @@
|
|
|
250
330
|
"additionalProperties": false
|
|
251
331
|
}
|
|
252
332
|
},
|
|
333
|
+
"x-dr-standard": "JSON Schema Draft 7 (draft-handrews-json-schema-01) §8.3 Schema References With \"$ref\"",
|
|
334
|
+
"x-dr-evidence": [
|
|
335
|
+
"A literal \"$ref\": \"#/definitions/...\" or \"$ref\": \"other.schema.json#/...\" entry in a JSON/YAML schema or an OpenAPI components file",
|
|
336
|
+
"A field in a DTO, Pydantic model or TypeScript interface typed by another separately declared model class (e.g. 'billing: Address'), which schema generators emit as a $ref",
|
|
337
|
+
"Schema-generator configuration or decorators that hoist nested types into shared definitions, such as Pydantic's ref_template, zod-to-json-schema $refStrategy, or @ApiProperty({ type: () => Address })"
|
|
338
|
+
],
|
|
339
|
+
"x-dr-distinguish": {
|
|
340
|
+
"data-model.schemadefinition": "the element is the named, reusable type being pointed at (the target under 'definitions'), rather than the pointer to it",
|
|
341
|
+
"data-model.schemaproperty": "the element is a named property of an object schema that also carries its own type, description, default or other constraints, even if it uses $ref to obtain its type",
|
|
342
|
+
"data-model.schemacomposition": "the $ref must be combined with further constraints or alternatives, which in Draft 7 requires wrapping it in allOf/anyOf/oneOf",
|
|
343
|
+
"data-model.jsonschema": "the element is the whole root schema document with $schema and $id, not a pointer into or toward one"
|
|
344
|
+
},
|
|
253
345
|
"$id": "urn:dr:spec:node:data-model.reference"
|
|
254
346
|
},
|
|
255
347
|
"schemacomposition": {
|
|
256
348
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
257
349
|
"title": "SchemaComposition",
|
|
258
|
-
"description": "
|
|
350
|
+
"description": "A schema node whose validation outcome is computed by applying boolean logic (allOf, anyOf, oneOf, not) to the outcomes of one or more subschemas, rather than by constraining the instance's type, properties, items, length or bounds directly. In code it corresponds to union, intersection, discriminated-variant or negation types built from other data types. Use Reference instead when the node is a single $ref pointer to another schema with no boolean combination; a lone $ref wrapped in a one-element allOf only to attach sibling constraints is still a composition. Use ObjectSchema instead when the structure comes from declared properties, required and additionalProperties on one object, not from merging or choosing among separate subschemas (e.g. a class extending a base is modelled as one object unless the base is a distinct schema combined via allOf). Use SchemaDefinition instead when the subject is the named, reusable entry under definitions itself; a definition whose body is an anyOf/oneOf is a schemadefinition, and the composition is referenced from where it is used. Use StringSchema instead when a set of allowed string literals is expressed with enum or const on one string schema rather than as oneOf over separate subschemas.",
|
|
259
351
|
"allOf": [
|
|
260
352
|
{
|
|
261
353
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -303,12 +395,24 @@
|
|
|
303
395
|
"additionalProperties": false
|
|
304
396
|
}
|
|
305
397
|
},
|
|
398
|
+
"x-dr-standard": "JSON Schema Draft 7 (draft-handrews-json-schema-validation-01) §6.7 Keywords for Applying Subschemas With Boolean Logic (allOf, anyOf, oneOf, not)",
|
|
399
|
+
"x-dr-evidence": [
|
|
400
|
+
"A TypeScript union or intersection type alias (type Payment = Card | BankTransfer; type Admin = User & Permissions), or a Python Union[...]/Annotated discriminated union field in a Pydantic model",
|
|
401
|
+
"Serialization polymorphism annotations such as Jackson @JsonTypeInfo/@JsonSubTypes, a Pydantic Field(discriminator=...), or OpenAPI/JSON Schema files containing allOf, anyOf, oneOf or not keys",
|
|
402
|
+
"Validator-library combinators that join other schemas: zod z.union/z.discriminatedUnion/z.intersection/.and(), Joi alternatives().try(), or io-ts t.union/t.intersection"
|
|
403
|
+
],
|
|
404
|
+
"x-dr-distinguish": {
|
|
405
|
+
"data-model.reference": "the node is a single $ref pointer to another schema with no boolean combination; a lone $ref wrapped in a one-element allOf only to attach sibling constraints is still a composition.",
|
|
406
|
+
"data-model.objectschema": "the structure comes from declared properties, required and additionalProperties on one object, not from merging or choosing among separate subschemas (e.g. a class extending a base is modelled as one object unless the base is a distinct schema combined via allOf).",
|
|
407
|
+
"data-model.schemadefinition": "the subject is the named, reusable entry under definitions itself; a definition whose body is an anyOf/oneOf is a schemadefinition that aggregates a composition.",
|
|
408
|
+
"data-model.stringschema": "a set of allowed string literals is expressed with enum or const on one string schema rather than as oneOf over separate subschemas."
|
|
409
|
+
},
|
|
306
410
|
"$id": "urn:dr:spec:node:data-model.schemacomposition"
|
|
307
411
|
},
|
|
308
412
|
"schemadefinition": {
|
|
309
413
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
310
414
|
"title": "SchemaDefinition",
|
|
311
|
-
"description": "A reusable
|
|
415
|
+
"description": "A named, reusable subschema declared under a JSON Schema document's 'definitions' keyword and addressable as '$ref: #/definitions/{name}'. It describes one domain data type, such as an entity, value object, DTO or enumeration, that other schemas or properties reuse by name rather than declaring inline. Use ObjectSchema instead when you are modelling the structural constraints of an object (its properties, required list, additionalProperties) rather than the named, reusable type entry that carries them. Use SchemaProperty instead when the schema is a single field declared inline within a parent schema's properties and is not reused by name elsewhere. Use JSONSchema instead when the element is the root schema document with its own $schema and $id, not an entry within its definitions. Use Reference instead when the element is only the $ref pointer that points at a definition, not the definition itself.",
|
|
312
416
|
"allOf": [
|
|
313
417
|
{
|
|
314
418
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -328,7 +432,8 @@
|
|
|
328
432
|
"type": "object",
|
|
329
433
|
"properties": {
|
|
330
434
|
"title": {
|
|
331
|
-
"type": "string"
|
|
435
|
+
"type": "string",
|
|
436
|
+
"description": "Human-readable name of the definition, normally matching its key under 'definitions' or the source class or type name (e.g. 'CustomerAddress'). Always set it, because it is the label other elements use to identify the reusable type."
|
|
332
437
|
},
|
|
333
438
|
"type": {
|
|
334
439
|
"type": "string",
|
|
@@ -370,12 +475,24 @@
|
|
|
370
475
|
"additionalProperties": false
|
|
371
476
|
}
|
|
372
477
|
},
|
|
478
|
+
"x-dr-standard": "JSON Schema Draft 7 (draft-handrews-json-schema-validation-01) §9 Schema Re-Use With \"definitions\"",
|
|
479
|
+
"x-dr-evidence": [
|
|
480
|
+
"an entry under \"definitions\" (or \"$defs\", or OpenAPI \"components.schemas\") in a .schema.json or spec file that is targeted by one or more \"$ref\": \"#/definitions/...\" pointers",
|
|
481
|
+
"an exported entity, DTO or record class, a TypeScript interface or type alias, or a Pydantic/zod model that other types import and use as a field type",
|
|
482
|
+
"an exported enum type (e.g. a Java enum, TypeScript enum or Python Enum subclass) whose values represent a fixed domain vocabulary used by several models"
|
|
483
|
+
],
|
|
484
|
+
"x-dr-distinguish": {
|
|
485
|
+
"data-model.objectschema": "you are modelling the structural constraints of an object (its properties, required list, additionalProperties) rather than the named, reusable type entry that carries them",
|
|
486
|
+
"data-model.schemaproperty": "the schema is a single field declared inline within a parent schema's properties and is not reused by name elsewhere",
|
|
487
|
+
"data-model.jsonschema": "the element is the root schema document with its own $schema and $id, not an entry within its definitions",
|
|
488
|
+
"data-model.reference": "the element is only the $ref pointer that points at a definition, not the definition itself"
|
|
489
|
+
},
|
|
373
490
|
"$id": "urn:dr:spec:node:data-model.schemadefinition"
|
|
374
491
|
},
|
|
375
492
|
"schemaproperty": {
|
|
376
493
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
377
494
|
"title": "SchemaProperty",
|
|
378
|
-
"description": "
|
|
495
|
+
"description": "A single named field of an object schema, such as one attribute of a domain entity, DTO or record type, together with the subschema that governs its value: type, value restrictions (enum, const, format, default) and annotations (title, description, readOnly, writeOnly, examples). It corresponds to one entry under an ObjectSchema's 'properties' keyword and has no meaning apart from its owning object. Use ObjectSchema instead when the element is the whole entity, class or record that owns several fields, rather than one field of it. Use SchemaDefinition instead when the schema is a named, reusable type declared under 'definitions' (for example a shared enum or value type referenced by several fields) rather than a field belonging to one owning object. Use StringSchema instead when you are modelling the string constraints of the value (minLength, maxLength, pattern, format) apart from the field, which the property then composes; a reusable named string type is a SchemaDefinition. Use NumericSchema instead when you are modelling the numeric bounds or multipleOf rule of the value apart from the field, which the property then composes.",
|
|
379
496
|
"allOf": [
|
|
380
497
|
{
|
|
381
498
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -408,28 +525,36 @@
|
|
|
408
525
|
"description": "JSON Schema Draft 7 primitive type"
|
|
409
526
|
},
|
|
410
527
|
"title": {
|
|
411
|
-
"type": "string"
|
|
528
|
+
"type": "string",
|
|
529
|
+
"description": "A short human-readable label for the property, used for example as a form label or table header; set it when the field's code name is not suitable for display."
|
|
412
530
|
},
|
|
413
531
|
"format": {
|
|
414
|
-
"type": "string"
|
|
532
|
+
"type": "string",
|
|
533
|
+
"description": "A JSON Schema Draft 7 semantic format hint for string values, such as date-time, email or uuid; set it when the field's value follows a recognised format, for example a UUID-typed id or a timestamp column."
|
|
415
534
|
},
|
|
416
535
|
"default": {
|
|
417
|
-
"type": "string"
|
|
536
|
+
"type": "string",
|
|
537
|
+
"description": "The value assumed when an instance omits the property, written as a JSON literal; set it when the code, ORM column or DTO declares a default."
|
|
418
538
|
},
|
|
419
539
|
"enum": {
|
|
420
|
-
"type": "string"
|
|
540
|
+
"type": "string",
|
|
541
|
+
"description": "The fixed set of allowed values, written as a JSON array serialized into this single string; set it when the field is restricted to an enumeration, such as a language enum type, a union of literals or a CHECK-constrained column."
|
|
421
542
|
},
|
|
422
543
|
"const": {
|
|
423
|
-
"type": "string"
|
|
544
|
+
"type": "string",
|
|
545
|
+
"description": "The single value the property must always hold, written as a JSON literal; set it for discriminator or type-tag fields that have a fixed value within this object."
|
|
424
546
|
},
|
|
425
547
|
"readOnly": {
|
|
426
|
-
"type": "boolean"
|
|
548
|
+
"type": "boolean",
|
|
549
|
+
"description": "Set to true when the value is assigned by the owning system and must not be supplied by clients, such as generated ids, audit timestamps or computed fields."
|
|
427
550
|
},
|
|
428
551
|
"writeOnly": {
|
|
429
|
-
"type": "boolean"
|
|
552
|
+
"type": "boolean",
|
|
553
|
+
"description": "Set to true when the value may be submitted but is never returned in representations, such as passwords, secrets or one-time tokens."
|
|
430
554
|
},
|
|
431
555
|
"examples": {
|
|
432
|
-
"type": "string"
|
|
556
|
+
"type": "string",
|
|
557
|
+
"description": "Sample valid values for the property, written as a JSON array serialized into this single string; set it to document typical content for consumers and test generation."
|
|
433
558
|
},
|
|
434
559
|
"description": {
|
|
435
560
|
"type": "string",
|
|
@@ -444,12 +569,24 @@
|
|
|
444
569
|
"additionalProperties": false
|
|
445
570
|
}
|
|
446
571
|
},
|
|
572
|
+
"x-dr-standard": "JSON Schema Draft 7 Validation, §6.5.4 'properties' (a member subschema), with §6.1.2 enum, §6.1.3 const, §7 format and §10 annotation keywords",
|
|
573
|
+
"x-dr-evidence": [
|
|
574
|
+
"An attribute declared on an ORM entity class, such as a JPA @Column field, a SQLAlchemy Column(...) or a Django models.CharField.",
|
|
575
|
+
"A typed member of a DTO, Pydantic/dataclass model, TypeScript interface or protobuf message, often carrying a validator, default value or Field(...) metadata.",
|
|
576
|
+
"A key nested under 'properties' in a JSON Schema file or an OpenAPI components/schemas entry, with its own 'type', 'format' or 'enum'."
|
|
577
|
+
],
|
|
578
|
+
"x-dr-distinguish": {
|
|
579
|
+
"data-model.objectschema": "the element is the whole entity, class or record that owns several fields, rather than one field of it.",
|
|
580
|
+
"data-model.schemadefinition": "the schema is a named, reusable type declared under 'definitions' (for example a shared enum or value type referenced by several fields) rather than a field belonging to one owning object.",
|
|
581
|
+
"data-model.stringschema": "you are modelling a reusable bundle of string constraints (minLength, maxLength, pattern) that a property points to, rather than the field itself.",
|
|
582
|
+
"data-model.numericschema": "you are modelling a reusable bundle of numeric bounds or a multipleOf rule that a property points to, rather than the field itself."
|
|
583
|
+
},
|
|
447
584
|
"$id": "urn:dr:spec:node:data-model.schemaproperty"
|
|
448
585
|
},
|
|
449
586
|
"stringschema": {
|
|
450
587
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
451
588
|
"title": "StringSchema",
|
|
452
|
-
"description": "
|
|
589
|
+
"description": "A JSON Schema subschema whose type is 'string' and which constrains string instances through at least one string-specific keyword: minLength, maxLength, pattern or format. A bare type: 'string' with no such keyword is not enough. Use SchemaProperty instead when the element is the named member of an object (its name, documentation, default, readOnly/writeOnly), rather than the string constraint set that the property composes. Use SchemaDefinition instead when the string type is declared as a named, reusable entry under 'definitions' and referenced via $ref, especially an enumerated string type defined mainly by its enum values. Use Reference instead when the code only points to another schema via $ref and declares no length, pattern or format constraints of its own. Use SchemaComposition instead when string constraints are combined with other subschemas through allOf/anyOf/oneOf/not, and the combination itself is the element being modelled.",
|
|
453
590
|
"allOf": [
|
|
454
591
|
{
|
|
455
592
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -469,16 +606,20 @@
|
|
|
469
606
|
"type": "object",
|
|
470
607
|
"properties": {
|
|
471
608
|
"type": {
|
|
472
|
-
"const": "string"
|
|
609
|
+
"const": "string",
|
|
610
|
+
"description": "The JSON Schema type keyword. Always set it to the literal 'string', the value that identifies this element as a string schema."
|
|
473
611
|
},
|
|
474
612
|
"minLength": {
|
|
475
|
-
"type": "integer"
|
|
613
|
+
"type": "integer",
|
|
614
|
+
"description": "The minimum permitted number of characters (Unicode code points) in the string, as a non-negative integer; set it when empty or too-short values must be rejected."
|
|
476
615
|
},
|
|
477
616
|
"maxLength": {
|
|
478
|
-
"type": "integer"
|
|
617
|
+
"type": "integer",
|
|
618
|
+
"description": "The maximum permitted number of characters (Unicode code points) in the string, as a non-negative integer no smaller than minLength; set it when the domain or a downstream field imposes a length limit."
|
|
479
619
|
},
|
|
480
620
|
"pattern": {
|
|
481
|
-
"type": "string"
|
|
621
|
+
"type": "string",
|
|
622
|
+
"description": "An ECMA-262 regular expression that the string must match, unanchored unless ^ and $ are used; set it when values follow a fixed syntax such as codes or identifiers."
|
|
482
623
|
},
|
|
483
624
|
"format": {
|
|
484
625
|
"type": "string",
|
|
@@ -509,64 +650,69 @@
|
|
|
509
650
|
"additionalProperties": false
|
|
510
651
|
}
|
|
511
652
|
},
|
|
653
|
+
"x-dr-standard": "JSON Schema Validation Draft 7 §6.3 Validation Keywords for Strings (maxLength, minLength, pattern) and §7 Semantic Validation with 'format'",
|
|
654
|
+
"x-dr-evidence": [
|
|
655
|
+
"A JSON/YAML schema fragment of the form {\"type\": \"string\", \"maxLength\": 255, \"pattern\": \"^[A-Z]{3}$\"} or one carrying a \"format\" keyword, embedded in a schema file or OpenAPI components",
|
|
656
|
+
"A string field declared with validation constraints, such as Pydantic constr(min_length=…, regex=…) or Field(max_length=…), Zod z.string().min().max().email(), or Joi.string().pattern()",
|
|
657
|
+
"A Java/Kotlin String field annotated with Bean Validation constraints such as @Size(min=…, max=…), @Pattern(regexp=…), or @Email in an entity or DTO class"
|
|
658
|
+
],
|
|
659
|
+
"x-dr-distinguish": {
|
|
660
|
+
"data-model.schemaproperty": "the element is the named member of an object (its name, documentation, default, readOnly/writeOnly), rather than the string constraint set that the property references or embeds",
|
|
661
|
+
"data-model.schemadefinition": "the string type is declared as a named, reusable entry under 'definitions' and referenced via $ref, especially an enumerated string type defined mainly by its enum values",
|
|
662
|
+
"data-model.reference": "the code only points to another schema via $ref and declares no length, pattern or format constraints of its own",
|
|
663
|
+
"data-model.schemacomposition": "string constraints are combined with other subschemas through allOf/anyOf/oneOf/not, and the combination itself is the element being modelled"
|
|
664
|
+
},
|
|
512
665
|
"$id": "urn:dr:spec:node:data-model.stringschema"
|
|
513
666
|
}
|
|
514
667
|
},
|
|
515
668
|
"relationshipSchemas": {
|
|
516
|
-
"data-model.arrayschema.
|
|
517
|
-
"id": "data-model.arrayschema.
|
|
669
|
+
"data-model.arrayschema.composes.data-model.numericschema": {
|
|
670
|
+
"id": "data-model.arrayschema.composes.data-model.numericschema",
|
|
518
671
|
"source_spec_node_id": "data-model.arrayschema",
|
|
519
672
|
"source_layer": "data-model",
|
|
520
673
|
"destination_spec_node_id": "data-model.numericschema",
|
|
521
674
|
"destination_layer": "data-model",
|
|
522
|
-
"predicate": "
|
|
675
|
+
"predicate": "composes",
|
|
523
676
|
"cardinality": "many-to-many",
|
|
524
677
|
"strength": "medium",
|
|
525
|
-
"required": false
|
|
678
|
+
"required": false,
|
|
679
|
+
"description": "The array's items are numbers constrained in place (an items subschema with bounds or multipleOf), so the numeric schema is part of the array schema. Use references to a schema definition instead when the item type is a named, reusable definition."
|
|
526
680
|
},
|
|
527
|
-
"data-model.arrayschema.
|
|
528
|
-
"id": "data-model.arrayschema.
|
|
681
|
+
"data-model.arrayschema.composes.data-model.objectschema": {
|
|
682
|
+
"id": "data-model.arrayschema.composes.data-model.objectschema",
|
|
529
683
|
"source_spec_node_id": "data-model.arrayschema",
|
|
530
684
|
"source_layer": "data-model",
|
|
531
685
|
"destination_spec_node_id": "data-model.objectschema",
|
|
532
686
|
"destination_layer": "data-model",
|
|
533
|
-
"predicate": "
|
|
687
|
+
"predicate": "composes",
|
|
534
688
|
"cardinality": "many-to-many",
|
|
535
689
|
"strength": "medium",
|
|
536
|
-
"required": false
|
|
690
|
+
"required": false,
|
|
691
|
+
"description": "The array's items are objects whose shape is written in place under items, so the object schema is part of the array schema. When the items are a named entity or record declared elsewhere, the array references that definition, or the property that holds the list references the object schema."
|
|
537
692
|
},
|
|
538
|
-
"data-model.arrayschema.
|
|
539
|
-
"id": "data-model.arrayschema.
|
|
693
|
+
"data-model.arrayschema.composes.data-model.reference": {
|
|
694
|
+
"id": "data-model.arrayschema.composes.data-model.reference",
|
|
540
695
|
"source_spec_node_id": "data-model.arrayschema",
|
|
541
696
|
"source_layer": "data-model",
|
|
542
697
|
"destination_spec_node_id": "data-model.reference",
|
|
543
698
|
"destination_layer": "data-model",
|
|
544
|
-
"predicate": "
|
|
545
|
-
"cardinality": "many-to-many",
|
|
546
|
-
"strength": "medium",
|
|
547
|
-
"required": false
|
|
548
|
-
},
|
|
549
|
-
"data-model.arrayschema.aggregates.data-model.schemadefinition": {
|
|
550
|
-
"id": "data-model.arrayschema.aggregates.data-model.schemadefinition",
|
|
551
|
-
"source_spec_node_id": "data-model.arrayschema",
|
|
552
|
-
"source_layer": "data-model",
|
|
553
|
-
"destination_spec_node_id": "data-model.schemadefinition",
|
|
554
|
-
"destination_layer": "data-model",
|
|
555
|
-
"predicate": "aggregates",
|
|
699
|
+
"predicate": "composes",
|
|
556
700
|
"cardinality": "many-to-many",
|
|
557
701
|
"strength": "medium",
|
|
558
|
-
"required": false
|
|
702
|
+
"required": false,
|
|
703
|
+
"description": "The array's items keyword is a $ref written in place, so the reference node is part of the array schema; the reference in turn references the type it points at."
|
|
559
704
|
},
|
|
560
|
-
"data-model.arrayschema.
|
|
561
|
-
"id": "data-model.arrayschema.
|
|
705
|
+
"data-model.arrayschema.composes.data-model.stringschema": {
|
|
706
|
+
"id": "data-model.arrayschema.composes.data-model.stringschema",
|
|
562
707
|
"source_spec_node_id": "data-model.arrayschema",
|
|
563
708
|
"source_layer": "data-model",
|
|
564
709
|
"destination_spec_node_id": "data-model.stringschema",
|
|
565
710
|
"destination_layer": "data-model",
|
|
566
|
-
"predicate": "
|
|
711
|
+
"predicate": "composes",
|
|
567
712
|
"cardinality": "many-to-many",
|
|
568
713
|
"strength": "medium",
|
|
569
|
-
"required": false
|
|
714
|
+
"required": false,
|
|
715
|
+
"description": "The array's items are strings constrained in place (length, pattern or format under items), so the string schema is part of the array schema. Use references to a schema definition instead when the item type is a named string type such as an enumeration."
|
|
570
716
|
},
|
|
571
717
|
"data-model.arrayschema.maps-to.api.response": {
|
|
572
718
|
"id": "data-model.arrayschema.maps-to.api.response",
|
|
@@ -577,62 +723,68 @@
|
|
|
577
723
|
"predicate": "maps-to",
|
|
578
724
|
"cardinality": "many-to-many",
|
|
579
725
|
"strength": "medium",
|
|
580
|
-
"required": false
|
|
726
|
+
"required": false,
|
|
727
|
+
"description": "The array schema describes the same list as an API response body that returns a collection, such as a list endpoint's payload. Use the object schema's maps-to response instead when the response is a single object, including an object that wraps the list."
|
|
581
728
|
},
|
|
582
|
-
"data-model.
|
|
583
|
-
"id": "data-model.
|
|
584
|
-
"source_spec_node_id": "data-model.
|
|
729
|
+
"data-model.arrayschema.references.data-model.schemadefinition": {
|
|
730
|
+
"id": "data-model.arrayschema.references.data-model.schemadefinition",
|
|
731
|
+
"source_spec_node_id": "data-model.arrayschema",
|
|
585
732
|
"source_layer": "data-model",
|
|
586
|
-
"destination_spec_node_id": "data-model.
|
|
733
|
+
"destination_spec_node_id": "data-model.schemadefinition",
|
|
587
734
|
"destination_layer": "data-model",
|
|
588
|
-
"predicate": "
|
|
735
|
+
"predicate": "references",
|
|
589
736
|
"cardinality": "many-to-many",
|
|
590
737
|
"strength": "medium",
|
|
591
|
-
"required": false
|
|
738
|
+
"required": false,
|
|
739
|
+
"description": "The array's items are a named, reusable definition reached by $ref or by name, so the array points at a type it does not own. Use composes instead when the item schema is written in place."
|
|
592
740
|
},
|
|
593
|
-
"data-model.jsonschema.
|
|
594
|
-
"id": "data-model.jsonschema.
|
|
741
|
+
"data-model.jsonschema.composes.data-model.arrayschema": {
|
|
742
|
+
"id": "data-model.jsonschema.composes.data-model.arrayschema",
|
|
595
743
|
"source_spec_node_id": "data-model.jsonschema",
|
|
596
744
|
"source_layer": "data-model",
|
|
597
|
-
"destination_spec_node_id": "data-model.
|
|
745
|
+
"destination_spec_node_id": "data-model.arrayschema",
|
|
598
746
|
"destination_layer": "data-model",
|
|
599
|
-
"predicate": "
|
|
747
|
+
"predicate": "composes",
|
|
600
748
|
"cardinality": "many-to-many",
|
|
601
749
|
"strength": "medium",
|
|
602
|
-
"required": false
|
|
750
|
+
"required": false,
|
|
751
|
+
"description": "The document's root schema is an array schema, which exists only as part of the document."
|
|
603
752
|
},
|
|
604
|
-
"data-model.jsonschema.
|
|
605
|
-
"id": "data-model.jsonschema.
|
|
753
|
+
"data-model.jsonschema.composes.data-model.objectschema": {
|
|
754
|
+
"id": "data-model.jsonschema.composes.data-model.objectschema",
|
|
606
755
|
"source_spec_node_id": "data-model.jsonschema",
|
|
607
756
|
"source_layer": "data-model",
|
|
608
|
-
"destination_spec_node_id": "data-model.
|
|
757
|
+
"destination_spec_node_id": "data-model.objectschema",
|
|
609
758
|
"destination_layer": "data-model",
|
|
610
|
-
"predicate": "
|
|
759
|
+
"predicate": "composes",
|
|
611
760
|
"cardinality": "many-to-many",
|
|
612
761
|
"strength": "medium",
|
|
613
|
-
"required": false
|
|
762
|
+
"required": false,
|
|
763
|
+
"description": "The document's root schema, or an object shape written in place in it, is this object schema, which exists only as part of the document."
|
|
614
764
|
},
|
|
615
|
-
"data-model.jsonschema.
|
|
616
|
-
"id": "data-model.jsonschema.
|
|
765
|
+
"data-model.jsonschema.composes.data-model.schemacomposition": {
|
|
766
|
+
"id": "data-model.jsonschema.composes.data-model.schemacomposition",
|
|
617
767
|
"source_spec_node_id": "data-model.jsonschema",
|
|
618
768
|
"source_layer": "data-model",
|
|
619
|
-
"destination_spec_node_id": "data-model.
|
|
769
|
+
"destination_spec_node_id": "data-model.schemacomposition",
|
|
620
770
|
"destination_layer": "data-model",
|
|
621
|
-
"predicate": "
|
|
771
|
+
"predicate": "composes",
|
|
622
772
|
"cardinality": "many-to-many",
|
|
623
773
|
"strength": "medium",
|
|
624
|
-
"required": false
|
|
774
|
+
"required": false,
|
|
775
|
+
"description": "The document's root schema is a composition (allOf, anyOf, oneOf or not), which exists only as part of the document."
|
|
625
776
|
},
|
|
626
|
-
"data-model.jsonschema.
|
|
627
|
-
"id": "data-model.jsonschema.
|
|
777
|
+
"data-model.jsonschema.composes.data-model.schemadefinition": {
|
|
778
|
+
"id": "data-model.jsonschema.composes.data-model.schemadefinition",
|
|
628
779
|
"source_spec_node_id": "data-model.jsonschema",
|
|
629
780
|
"source_layer": "data-model",
|
|
630
|
-
"destination_spec_node_id": "
|
|
631
|
-
"destination_layer": "
|
|
632
|
-
"predicate": "
|
|
781
|
+
"destination_spec_node_id": "data-model.schemadefinition",
|
|
782
|
+
"destination_layer": "data-model",
|
|
783
|
+
"predicate": "composes",
|
|
633
784
|
"cardinality": "many-to-many",
|
|
634
785
|
"strength": "medium",
|
|
635
|
-
"required": false
|
|
786
|
+
"required": false,
|
|
787
|
+
"description": "The definition is declared under this document's definitions keyword and is addressed through the document's $id, so it does not exist apart from the document even though other schemas reference it by name."
|
|
636
788
|
},
|
|
637
789
|
"data-model.jsonschema.maps-to.technology.artifact": {
|
|
638
790
|
"id": "data-model.jsonschema.maps-to.technology.artifact",
|
|
@@ -643,51 +795,20 @@
|
|
|
643
795
|
"predicate": "maps-to",
|
|
644
796
|
"cardinality": "many-to-many",
|
|
645
797
|
"strength": "medium",
|
|
646
|
-
"required": false
|
|
798
|
+
"required": false,
|
|
799
|
+
"description": "The schema document is stored in or published as this artifact, such as a .schema.json file or a generated schema bundle; the artifact is the technology form of the document."
|
|
647
800
|
},
|
|
648
|
-
"data-model.jsonschema.
|
|
649
|
-
"id": "data-model.jsonschema.
|
|
650
|
-
"source_spec_node_id": "data-model.jsonschema",
|
|
651
|
-
"source_layer": "data-model",
|
|
652
|
-
"destination_spec_node_id": "motivation.goal",
|
|
653
|
-
"destination_layer": "motivation",
|
|
654
|
-
"predicate": "realizes",
|
|
655
|
-
"cardinality": "many-to-many",
|
|
656
|
-
"strength": "medium",
|
|
657
|
-
"required": false
|
|
658
|
-
},
|
|
659
|
-
"data-model.jsonschema.realizes.api.schema": {
|
|
660
|
-
"id": "data-model.jsonschema.realizes.api.schema",
|
|
801
|
+
"data-model.jsonschema.maps-to.api.schema": {
|
|
802
|
+
"id": "data-model.jsonschema.maps-to.api.schema",
|
|
661
803
|
"source_spec_node_id": "data-model.jsonschema",
|
|
662
804
|
"source_layer": "data-model",
|
|
663
805
|
"destination_spec_node_id": "api.schema",
|
|
664
806
|
"destination_layer": "api",
|
|
665
|
-
"predicate": "
|
|
666
|
-
"cardinality": "many-to-many",
|
|
667
|
-
"strength": "medium",
|
|
668
|
-
"required": false
|
|
669
|
-
},
|
|
670
|
-
"data-model.jsonschema.references.application.applicationservice": {
|
|
671
|
-
"id": "data-model.jsonschema.references.application.applicationservice",
|
|
672
|
-
"source_spec_node_id": "data-model.jsonschema",
|
|
673
|
-
"source_layer": "data-model",
|
|
674
|
-
"destination_spec_node_id": "application.applicationservice",
|
|
675
|
-
"destination_layer": "application",
|
|
676
|
-
"predicate": "references",
|
|
677
|
-
"cardinality": "many-to-many",
|
|
678
|
-
"strength": "medium",
|
|
679
|
-
"required": false
|
|
680
|
-
},
|
|
681
|
-
"data-model.jsonschema.references.business.businessobject": {
|
|
682
|
-
"id": "data-model.jsonschema.references.business.businessobject",
|
|
683
|
-
"source_spec_node_id": "data-model.jsonschema",
|
|
684
|
-
"source_layer": "data-model",
|
|
685
|
-
"destination_spec_node_id": "business.businessobject",
|
|
686
|
-
"destination_layer": "business",
|
|
687
|
-
"predicate": "references",
|
|
807
|
+
"predicate": "maps-to",
|
|
688
808
|
"cardinality": "many-to-many",
|
|
689
809
|
"strength": "medium",
|
|
690
|
-
"required": false
|
|
810
|
+
"required": false,
|
|
811
|
+
"description": "The schema document describes the same data as an API schema, for example a JSON Schema file that an OpenAPI component reuses or is generated from. Use the schema definition's or object schema's maps-to instead when one type inside the document corresponds to the API schema."
|
|
691
812
|
},
|
|
692
813
|
"data-model.jsonschema.satisfies.motivation.constraint": {
|
|
693
814
|
"id": "data-model.jsonschema.satisfies.motivation.constraint",
|
|
@@ -698,7 +819,8 @@
|
|
|
698
819
|
"predicate": "satisfies",
|
|
699
820
|
"cardinality": "many-to-many",
|
|
700
821
|
"strength": "medium",
|
|
701
|
-
"required": false
|
|
822
|
+
"required": false,
|
|
823
|
+
"description": "The schema document as a whole meets a constraint on the data, such as a mandated interchange format or a standard the schemas must conform to."
|
|
702
824
|
},
|
|
703
825
|
"data-model.jsonschema.satisfies.motivation.requirement": {
|
|
704
826
|
"id": "data-model.jsonschema.satisfies.motivation.requirement",
|
|
@@ -709,73 +831,32 @@
|
|
|
709
831
|
"predicate": "satisfies",
|
|
710
832
|
"cardinality": "many-to-many",
|
|
711
833
|
"strength": "medium",
|
|
712
|
-
"required": false
|
|
834
|
+
"required": false,
|
|
835
|
+
"description": "The schema document as a whole meets a requirement on the data, such as publishing a contract that consumers can validate against. Use the object schema's or definition's satisfies instead when one type meets the requirement."
|
|
713
836
|
},
|
|
714
|
-
"data-model.
|
|
715
|
-
"id": "data-model.
|
|
716
|
-
"source_spec_node_id": "data-model.jsonschema",
|
|
717
|
-
"source_layer": "data-model",
|
|
718
|
-
"destination_spec_node_id": "application.applicationfunction",
|
|
719
|
-
"destination_layer": "application",
|
|
720
|
-
"predicate": "serves",
|
|
721
|
-
"cardinality": "many-to-many",
|
|
722
|
-
"strength": "medium",
|
|
723
|
-
"required": false
|
|
724
|
-
},
|
|
725
|
-
"data-model.jsonschema.serves.business.businessservice": {
|
|
726
|
-
"id": "data-model.jsonschema.serves.business.businessservice",
|
|
727
|
-
"source_spec_node_id": "data-model.jsonschema",
|
|
728
|
-
"source_layer": "data-model",
|
|
729
|
-
"destination_spec_node_id": "business.businessservice",
|
|
730
|
-
"destination_layer": "business",
|
|
731
|
-
"predicate": "serves",
|
|
732
|
-
"cardinality": "many-to-many",
|
|
733
|
-
"strength": "medium",
|
|
734
|
-
"required": false
|
|
735
|
-
},
|
|
736
|
-
"data-model.jsonschema.uses.technology.technologyservice": {
|
|
737
|
-
"id": "data-model.jsonschema.uses.technology.technologyservice",
|
|
738
|
-
"source_spec_node_id": "data-model.jsonschema",
|
|
739
|
-
"source_layer": "data-model",
|
|
740
|
-
"destination_spec_node_id": "technology.technologyservice",
|
|
741
|
-
"destination_layer": "technology",
|
|
742
|
-
"predicate": "uses",
|
|
743
|
-
"cardinality": "many-to-many",
|
|
744
|
-
"strength": "medium",
|
|
745
|
-
"required": false
|
|
746
|
-
},
|
|
747
|
-
"data-model.objectschema.aggregates.data-model.schemaproperty": {
|
|
748
|
-
"id": "data-model.objectschema.aggregates.data-model.schemaproperty",
|
|
837
|
+
"data-model.objectschema.composes.data-model.schemaproperty": {
|
|
838
|
+
"id": "data-model.objectschema.composes.data-model.schemaproperty",
|
|
749
839
|
"source_spec_node_id": "data-model.objectschema",
|
|
750
840
|
"source_layer": "data-model",
|
|
751
841
|
"destination_spec_node_id": "data-model.schemaproperty",
|
|
752
842
|
"destination_layer": "data-model",
|
|
753
|
-
"predicate": "
|
|
754
|
-
"cardinality": "many-to-many",
|
|
755
|
-
"strength": "medium",
|
|
756
|
-
"required": false
|
|
757
|
-
},
|
|
758
|
-
"data-model.objectschema.depends-on.technology.systemsoftware": {
|
|
759
|
-
"id": "data-model.objectschema.depends-on.technology.systemsoftware",
|
|
760
|
-
"source_spec_node_id": "data-model.objectschema",
|
|
761
|
-
"source_layer": "data-model",
|
|
762
|
-
"destination_spec_node_id": "technology.systemsoftware",
|
|
763
|
-
"destination_layer": "technology",
|
|
764
|
-
"predicate": "depends-on",
|
|
843
|
+
"predicate": "composes",
|
|
765
844
|
"cardinality": "many-to-many",
|
|
766
845
|
"strength": "medium",
|
|
767
|
-
"required": false
|
|
846
|
+
"required": false,
|
|
847
|
+
"description": "The property is one of the fields the object schema declares under properties, and it has no meaning apart from the object that owns it."
|
|
768
848
|
},
|
|
769
|
-
"data-model.objectschema.
|
|
770
|
-
"id": "data-model.objectschema.
|
|
849
|
+
"data-model.objectschema.maps-to.data-store.collection": {
|
|
850
|
+
"id": "data-model.objectschema.maps-to.data-store.collection",
|
|
771
851
|
"source_spec_node_id": "data-model.objectschema",
|
|
772
852
|
"source_layer": "data-model",
|
|
773
|
-
"destination_spec_node_id": "data-
|
|
774
|
-
"destination_layer": "data-
|
|
775
|
-
"predicate": "
|
|
853
|
+
"destination_spec_node_id": "data-store.collection",
|
|
854
|
+
"destination_layer": "data-store",
|
|
855
|
+
"predicate": "maps-to",
|
|
776
856
|
"cardinality": "many-to-many",
|
|
777
857
|
"strength": "medium",
|
|
778
|
-
"required": false
|
|
858
|
+
"required": false,
|
|
859
|
+
"description": "The object schema describes the same records that the collection or table stores, such as an entity class and its table. Use the schema definition's maps-to instead when the stored type is a named definition rather than an object schema."
|
|
779
860
|
},
|
|
780
861
|
"data-model.objectschema.maps-to.api.requestbody": {
|
|
781
862
|
"id": "data-model.objectschema.maps-to.api.requestbody",
|
|
@@ -786,7 +867,8 @@
|
|
|
786
867
|
"predicate": "maps-to",
|
|
787
868
|
"cardinality": "many-to-many",
|
|
788
869
|
"strength": "medium",
|
|
789
|
-
"required": false
|
|
870
|
+
"required": false,
|
|
871
|
+
"description": "The object schema describes the same payload that an API operation accepts as its request body, such as the DTO a create endpoint binds."
|
|
790
872
|
},
|
|
791
873
|
"data-model.objectschema.maps-to.api.response": {
|
|
792
874
|
"id": "data-model.objectschema.maps-to.api.response",
|
|
@@ -797,7 +879,8 @@
|
|
|
797
879
|
"predicate": "maps-to",
|
|
798
880
|
"cardinality": "many-to-many",
|
|
799
881
|
"strength": "medium",
|
|
800
|
-
"required": false
|
|
882
|
+
"required": false,
|
|
883
|
+
"description": "The object schema describes the same payload that an API operation returns as a response body. Use the array schema's maps-to response instead when the response is a bare list."
|
|
801
884
|
},
|
|
802
885
|
"data-model.objectschema.realizes.business.businessobject": {
|
|
803
886
|
"id": "data-model.objectschema.realizes.business.businessobject",
|
|
@@ -808,7 +891,8 @@
|
|
|
808
891
|
"predicate": "realizes",
|
|
809
892
|
"cardinality": "many-to-many",
|
|
810
893
|
"strength": "medium",
|
|
811
|
-
"required": false
|
|
894
|
+
"required": false,
|
|
895
|
+
"description": "The object schema gives concrete form to a business object, such as the Order entity class for the business concept of an order. This is a shortcut through the application data object; use it when the model has no separate data object for the entity."
|
|
812
896
|
},
|
|
813
897
|
"data-model.objectschema.realizes.application.dataobject": {
|
|
814
898
|
"id": "data-model.objectschema.realizes.application.dataobject",
|
|
@@ -819,40 +903,8 @@
|
|
|
819
903
|
"predicate": "realizes",
|
|
820
904
|
"cardinality": "many-to-many",
|
|
821
905
|
"strength": "medium",
|
|
822
|
-
"required": false
|
|
823
|
-
|
|
824
|
-
"data-model.objectschema.realizes.motivation.goal": {
|
|
825
|
-
"id": "data-model.objectschema.realizes.motivation.goal",
|
|
826
|
-
"source_spec_node_id": "data-model.objectschema",
|
|
827
|
-
"source_layer": "data-model",
|
|
828
|
-
"destination_spec_node_id": "motivation.goal",
|
|
829
|
-
"destination_layer": "motivation",
|
|
830
|
-
"predicate": "realizes",
|
|
831
|
-
"cardinality": "many-to-many",
|
|
832
|
-
"strength": "medium",
|
|
833
|
-
"required": false
|
|
834
|
-
},
|
|
835
|
-
"data-model.objectschema.references.business.businessfunction": {
|
|
836
|
-
"id": "data-model.objectschema.references.business.businessfunction",
|
|
837
|
-
"source_spec_node_id": "data-model.objectschema",
|
|
838
|
-
"source_layer": "data-model",
|
|
839
|
-
"destination_spec_node_id": "business.businessfunction",
|
|
840
|
-
"destination_layer": "business",
|
|
841
|
-
"predicate": "references",
|
|
842
|
-
"cardinality": "many-to-many",
|
|
843
|
-
"strength": "medium",
|
|
844
|
-
"required": false
|
|
845
|
-
},
|
|
846
|
-
"data-model.objectschema.references.business.businessprocess": {
|
|
847
|
-
"id": "data-model.objectschema.references.business.businessprocess",
|
|
848
|
-
"source_spec_node_id": "data-model.objectschema",
|
|
849
|
-
"source_layer": "data-model",
|
|
850
|
-
"destination_spec_node_id": "business.businessprocess",
|
|
851
|
-
"destination_layer": "business",
|
|
852
|
-
"predicate": "references",
|
|
853
|
-
"cardinality": "many-to-many",
|
|
854
|
-
"strength": "medium",
|
|
855
|
-
"required": false
|
|
906
|
+
"required": false,
|
|
907
|
+
"description": "The object schema gives a persisted or published shape to an application data object, such as the entity class or published schema behind a data structure the application passes around."
|
|
856
908
|
},
|
|
857
909
|
"data-model.objectschema.references.security.secureresource": {
|
|
858
910
|
"id": "data-model.objectschema.references.security.secureresource",
|
|
@@ -863,7 +915,8 @@
|
|
|
863
915
|
"predicate": "references",
|
|
864
916
|
"cardinality": "many-to-many",
|
|
865
917
|
"strength": "medium",
|
|
866
|
-
"required": false
|
|
918
|
+
"required": false,
|
|
919
|
+
"description": "The object schema describes data that a security model protects as a secure resource, so access rules for that resource apply to instances of it."
|
|
867
920
|
},
|
|
868
921
|
"data-model.objectschema.satisfies.motivation.requirement": {
|
|
869
922
|
"id": "data-model.objectschema.satisfies.motivation.requirement",
|
|
@@ -874,40 +927,44 @@
|
|
|
874
927
|
"predicate": "satisfies",
|
|
875
928
|
"cardinality": "many-to-many",
|
|
876
929
|
"strength": "medium",
|
|
877
|
-
"required": false
|
|
930
|
+
"required": false,
|
|
931
|
+
"description": "The object schema meets a requirement on the data it describes, such as capturing a field the business requires or enforcing a mandatory structure."
|
|
878
932
|
},
|
|
879
|
-
"data-model.objectschema.
|
|
880
|
-
"id": "data-model.objectschema.
|
|
933
|
+
"data-model.objectschema.specializes.data-model.objectschema": {
|
|
934
|
+
"id": "data-model.objectschema.specializes.data-model.objectschema",
|
|
881
935
|
"source_spec_node_id": "data-model.objectschema",
|
|
882
936
|
"source_layer": "data-model",
|
|
883
|
-
"destination_spec_node_id": "
|
|
884
|
-
"destination_layer": "
|
|
885
|
-
"predicate": "
|
|
937
|
+
"destination_spec_node_id": "data-model.objectschema",
|
|
938
|
+
"destination_layer": "data-model",
|
|
939
|
+
"predicate": "specializes",
|
|
886
940
|
"cardinality": "many-to-many",
|
|
887
941
|
"strength": "medium",
|
|
888
|
-
"required": false
|
|
942
|
+
"required": false,
|
|
943
|
+
"description": "The object schema is a subtype of another object schema, inheriting its properties and adding its own, such as a subclass of an entity class or a schema built by extending a base schema. This is the data-model's only subtyping predicate."
|
|
889
944
|
},
|
|
890
|
-
"data-model.reference.
|
|
891
|
-
"id": "data-model.reference.
|
|
945
|
+
"data-model.reference.references.data-model.jsonschema": {
|
|
946
|
+
"id": "data-model.reference.references.data-model.jsonschema",
|
|
892
947
|
"source_spec_node_id": "data-model.reference",
|
|
893
948
|
"source_layer": "data-model",
|
|
894
|
-
"destination_spec_node_id": "
|
|
895
|
-
"destination_layer": "
|
|
896
|
-
"predicate": "
|
|
949
|
+
"destination_spec_node_id": "data-model.jsonschema",
|
|
950
|
+
"destination_layer": "data-model",
|
|
951
|
+
"predicate": "references",
|
|
897
952
|
"cardinality": "many-to-many",
|
|
898
953
|
"strength": "medium",
|
|
899
|
-
"required": false
|
|
954
|
+
"required": false,
|
|
955
|
+
"description": "The $ref points at another schema document by its $id or URI, delegating validation to that document's root schema."
|
|
900
956
|
},
|
|
901
|
-
"data-model.reference.
|
|
902
|
-
"id": "data-model.reference.
|
|
957
|
+
"data-model.reference.references.data-model.objectschema": {
|
|
958
|
+
"id": "data-model.reference.references.data-model.objectschema",
|
|
903
959
|
"source_spec_node_id": "data-model.reference",
|
|
904
960
|
"source_layer": "data-model",
|
|
905
|
-
"destination_spec_node_id": "
|
|
906
|
-
"destination_layer": "
|
|
907
|
-
"predicate": "
|
|
961
|
+
"destination_spec_node_id": "data-model.objectschema",
|
|
962
|
+
"destination_layer": "data-model",
|
|
963
|
+
"predicate": "references",
|
|
908
964
|
"cardinality": "many-to-many",
|
|
909
965
|
"strength": "medium",
|
|
910
|
-
"required": false
|
|
966
|
+
"required": false,
|
|
967
|
+
"description": "The $ref points at an object schema declared elsewhere, delegating validation to it."
|
|
911
968
|
},
|
|
912
969
|
"data-model.reference.references.data-model.schemadefinition": {
|
|
913
970
|
"id": "data-model.reference.references.data-model.schemadefinition",
|
|
@@ -918,7 +975,8 @@
|
|
|
918
975
|
"predicate": "references",
|
|
919
976
|
"cardinality": "many-to-many",
|
|
920
977
|
"strength": "medium",
|
|
921
|
-
"required": false
|
|
978
|
+
"required": false,
|
|
979
|
+
"description": "The $ref points at a named definition, such as '#/definitions/Address', delegating validation to it. This is the most common target of a reference."
|
|
922
980
|
},
|
|
923
981
|
"data-model.schemacomposition.composes.data-model.arrayschema": {
|
|
924
982
|
"id": "data-model.schemacomposition.composes.data-model.arrayschema",
|
|
@@ -929,7 +987,8 @@
|
|
|
929
987
|
"predicate": "composes",
|
|
930
988
|
"cardinality": "many-to-many",
|
|
931
989
|
"strength": "medium",
|
|
932
|
-
"required": false
|
|
990
|
+
"required": false,
|
|
991
|
+
"description": "One branch of the composition is an array schema written in place, which is part of the composition."
|
|
933
992
|
},
|
|
934
993
|
"data-model.schemacomposition.composes.data-model.numericschema": {
|
|
935
994
|
"id": "data-model.schemacomposition.composes.data-model.numericschema",
|
|
@@ -940,7 +999,8 @@
|
|
|
940
999
|
"predicate": "composes",
|
|
941
1000
|
"cardinality": "many-to-many",
|
|
942
1001
|
"strength": "medium",
|
|
943
|
-
"required": false
|
|
1002
|
+
"required": false,
|
|
1003
|
+
"description": "One branch of the composition is a numeric schema written in place, such as a range alternative in an anyOf, which is part of the composition."
|
|
944
1004
|
},
|
|
945
1005
|
"data-model.schemacomposition.composes.data-model.objectschema": {
|
|
946
1006
|
"id": "data-model.schemacomposition.composes.data-model.objectschema",
|
|
@@ -951,18 +1011,20 @@
|
|
|
951
1011
|
"predicate": "composes",
|
|
952
1012
|
"cardinality": "many-to-many",
|
|
953
1013
|
"strength": "medium",
|
|
954
|
-
"required": false
|
|
1014
|
+
"required": false,
|
|
1015
|
+
"description": "One branch of the composition is an object schema written in place, such as one variant of a discriminated union declared inline, which is part of the composition."
|
|
955
1016
|
},
|
|
956
|
-
"data-model.schemacomposition.composes.data-model.
|
|
957
|
-
"id": "data-model.schemacomposition.composes.data-model.
|
|
1017
|
+
"data-model.schemacomposition.composes.data-model.reference": {
|
|
1018
|
+
"id": "data-model.schemacomposition.composes.data-model.reference",
|
|
958
1019
|
"source_spec_node_id": "data-model.schemacomposition",
|
|
959
1020
|
"source_layer": "data-model",
|
|
960
|
-
"destination_spec_node_id": "data-model.
|
|
1021
|
+
"destination_spec_node_id": "data-model.reference",
|
|
961
1022
|
"destination_layer": "data-model",
|
|
962
1023
|
"predicate": "composes",
|
|
963
1024
|
"cardinality": "many-to-many",
|
|
964
1025
|
"strength": "medium",
|
|
965
|
-
"required": false
|
|
1026
|
+
"required": false,
|
|
1027
|
+
"description": "One branch of the composition is a $ref written in place, the usual form of an allOf base or a oneOf variant; the reference in turn references the type it points at."
|
|
966
1028
|
},
|
|
967
1029
|
"data-model.schemacomposition.composes.data-model.stringschema": {
|
|
968
1030
|
"id": "data-model.schemacomposition.composes.data-model.stringschema",
|
|
@@ -973,18 +1035,20 @@
|
|
|
973
1035
|
"predicate": "composes",
|
|
974
1036
|
"cardinality": "many-to-many",
|
|
975
1037
|
"strength": "medium",
|
|
976
|
-
"required": false
|
|
1038
|
+
"required": false,
|
|
1039
|
+
"description": "One branch of the composition is a string schema written in place, which is part of the composition."
|
|
977
1040
|
},
|
|
978
|
-
"data-model.schemacomposition.
|
|
979
|
-
"id": "data-model.schemacomposition.
|
|
1041
|
+
"data-model.schemacomposition.references.data-model.schemadefinition": {
|
|
1042
|
+
"id": "data-model.schemacomposition.references.data-model.schemadefinition",
|
|
980
1043
|
"source_spec_node_id": "data-model.schemacomposition",
|
|
981
1044
|
"source_layer": "data-model",
|
|
982
|
-
"destination_spec_node_id": "
|
|
983
|
-
"destination_layer": "
|
|
984
|
-
"predicate": "
|
|
1045
|
+
"destination_spec_node_id": "data-model.schemadefinition",
|
|
1046
|
+
"destination_layer": "data-model",
|
|
1047
|
+
"predicate": "references",
|
|
985
1048
|
"cardinality": "many-to-many",
|
|
986
1049
|
"strength": "medium",
|
|
987
|
-
"required": false
|
|
1050
|
+
"required": false,
|
|
1051
|
+
"description": "One branch of the composition is a named definition that exists apart from it and is reused elsewhere, so the composition references it rather than owning it. Use composes instead for a branch written in place."
|
|
988
1052
|
},
|
|
989
1053
|
"data-model.schemadefinition.composes.data-model.schemadefinition": {
|
|
990
1054
|
"id": "data-model.schemadefinition.composes.data-model.schemadefinition",
|
|
@@ -995,18 +1059,8 @@
|
|
|
995
1059
|
"predicate": "composes",
|
|
996
1060
|
"cardinality": "many-to-many",
|
|
997
1061
|
"strength": "high",
|
|
998
|
-
"required": false
|
|
999
|
-
|
|
1000
|
-
"data-model.schemadefinition.depends-on.technology.systemsoftware": {
|
|
1001
|
-
"id": "data-model.schemadefinition.depends-on.technology.systemsoftware",
|
|
1002
|
-
"source_spec_node_id": "data-model.schemadefinition",
|
|
1003
|
-
"source_layer": "data-model",
|
|
1004
|
-
"destination_spec_node_id": "technology.systemsoftware",
|
|
1005
|
-
"destination_layer": "technology",
|
|
1006
|
-
"predicate": "depends-on",
|
|
1007
|
-
"cardinality": "many-to-many",
|
|
1008
|
-
"strength": "medium",
|
|
1009
|
-
"required": false
|
|
1062
|
+
"required": false,
|
|
1063
|
+
"description": "The definition declares another definition nested under its own definitions keyword, which exists only as part of it. Use references instead when one definition uses another declared alongside it."
|
|
1010
1064
|
},
|
|
1011
1065
|
"data-model.schemadefinition.maps-to.data-store.collection": {
|
|
1012
1066
|
"id": "data-model.schemadefinition.maps-to.data-store.collection",
|
|
@@ -1017,7 +1071,8 @@
|
|
|
1017
1071
|
"predicate": "maps-to",
|
|
1018
1072
|
"cardinality": "many-to-many",
|
|
1019
1073
|
"strength": "medium",
|
|
1020
|
-
"required": false
|
|
1074
|
+
"required": false,
|
|
1075
|
+
"description": "The named definition describes the same records that the collection or table stores. Use the object schema's maps-to instead when the stored type is modelled as an object schema."
|
|
1021
1076
|
},
|
|
1022
1077
|
"data-model.schemadefinition.maps-to.api.schema": {
|
|
1023
1078
|
"id": "data-model.schemadefinition.maps-to.api.schema",
|
|
@@ -1028,7 +1083,8 @@
|
|
|
1028
1083
|
"predicate": "maps-to",
|
|
1029
1084
|
"cardinality": "many-to-many",
|
|
1030
1085
|
"strength": "medium",
|
|
1031
|
-
"required": false
|
|
1086
|
+
"required": false,
|
|
1087
|
+
"description": "The named definition describes the same data as an API schema, such as a shared type that an OpenAPI components entry is generated from."
|
|
1032
1088
|
},
|
|
1033
1089
|
"data-model.schemadefinition.realizes.business.businessobject": {
|
|
1034
1090
|
"id": "data-model.schemadefinition.realizes.business.businessobject",
|
|
@@ -1039,7 +1095,8 @@
|
|
|
1039
1095
|
"predicate": "realizes",
|
|
1040
1096
|
"cardinality": "many-to-many",
|
|
1041
1097
|
"strength": "medium",
|
|
1042
|
-
"required": false
|
|
1098
|
+
"required": false,
|
|
1099
|
+
"description": "The named definition gives concrete form to a business object. This is a shortcut through the application data object; use it when the model has no separate data object for the type."
|
|
1043
1100
|
},
|
|
1044
1101
|
"data-model.schemadefinition.realizes.application.dataobject": {
|
|
1045
1102
|
"id": "data-model.schemadefinition.realizes.application.dataobject",
|
|
@@ -1050,18 +1107,20 @@
|
|
|
1050
1107
|
"predicate": "realizes",
|
|
1051
1108
|
"cardinality": "many-to-many",
|
|
1052
1109
|
"strength": "medium",
|
|
1053
|
-
"required": false
|
|
1110
|
+
"required": false,
|
|
1111
|
+
"description": "The named definition gives a published shape to an application data object, such as a shared definition that describes a structure the application passes around."
|
|
1054
1112
|
},
|
|
1055
|
-
"data-model.schemadefinition.references.
|
|
1056
|
-
"id": "data-model.schemadefinition.references.
|
|
1113
|
+
"data-model.schemadefinition.references.security.dataclassification": {
|
|
1114
|
+
"id": "data-model.schemadefinition.references.security.dataclassification",
|
|
1057
1115
|
"source_spec_node_id": "data-model.schemadefinition",
|
|
1058
1116
|
"source_layer": "data-model",
|
|
1059
|
-
"destination_spec_node_id": "
|
|
1060
|
-
"destination_layer": "
|
|
1117
|
+
"destination_spec_node_id": "security.dataclassification",
|
|
1118
|
+
"destination_layer": "security",
|
|
1061
1119
|
"predicate": "references",
|
|
1062
1120
|
"cardinality": "many-to-many",
|
|
1063
1121
|
"strength": "medium",
|
|
1064
|
-
"required": false
|
|
1122
|
+
"required": false,
|
|
1123
|
+
"description": "The definition is handled at the protection level of the data classification, so data of this type is treated as that class."
|
|
1065
1124
|
},
|
|
1066
1125
|
"data-model.schemadefinition.references.data-model.schemadefinition": {
|
|
1067
1126
|
"id": "data-model.schemadefinition.references.data-model.schemadefinition",
|
|
@@ -1072,7 +1131,8 @@
|
|
|
1072
1131
|
"predicate": "references",
|
|
1073
1132
|
"cardinality": "many-to-many",
|
|
1074
1133
|
"strength": "medium",
|
|
1075
|
-
"required": false
|
|
1134
|
+
"required": false,
|
|
1135
|
+
"description": "The definition uses another named definition declared alongside it, for example through a $ref in one of its properties. Use composes instead when the other definition is nested inside it."
|
|
1076
1136
|
},
|
|
1077
1137
|
"data-model.schemadefinition.references.security.threat": {
|
|
1078
1138
|
"id": "data-model.schemadefinition.references.security.threat",
|
|
@@ -1083,7 +1143,8 @@
|
|
|
1083
1143
|
"predicate": "references",
|
|
1084
1144
|
"cardinality": "many-to-many",
|
|
1085
1145
|
"strength": "medium",
|
|
1086
|
-
"required": false
|
|
1146
|
+
"required": false,
|
|
1147
|
+
"description": "The definition describes data that a modelled threat targets, such as a type holding credentials or personal data named in a threat."
|
|
1087
1148
|
},
|
|
1088
1149
|
"data-model.schemadefinition.requires.security.retentionpolicy": {
|
|
1089
1150
|
"id": "data-model.schemadefinition.requires.security.retentionpolicy",
|
|
@@ -1094,7 +1155,8 @@
|
|
|
1094
1155
|
"predicate": "requires",
|
|
1095
1156
|
"cardinality": "many-to-many",
|
|
1096
1157
|
"strength": "medium",
|
|
1097
|
-
"required": false
|
|
1158
|
+
"required": false,
|
|
1159
|
+
"description": "Instances of the definition must be kept or deleted according to the retention policy, such as audit records with a minimum retention period."
|
|
1098
1160
|
},
|
|
1099
1161
|
"data-model.schemadefinition.satisfies.motivation.constraint": {
|
|
1100
1162
|
"id": "data-model.schemadefinition.satisfies.motivation.constraint",
|
|
@@ -1105,18 +1167,8 @@
|
|
|
1105
1167
|
"predicate": "satisfies",
|
|
1106
1168
|
"cardinality": "many-to-many",
|
|
1107
1169
|
"strength": "medium",
|
|
1108
|
-
"required": false
|
|
1109
|
-
|
|
1110
|
-
"data-model.schemadefinition.satisfies.security.dataclassification": {
|
|
1111
|
-
"id": "data-model.schemadefinition.satisfies.security.dataclassification",
|
|
1112
|
-
"source_spec_node_id": "data-model.schemadefinition",
|
|
1113
|
-
"source_layer": "data-model",
|
|
1114
|
-
"destination_spec_node_id": "security.dataclassification",
|
|
1115
|
-
"destination_layer": "security",
|
|
1116
|
-
"predicate": "satisfies",
|
|
1117
|
-
"cardinality": "many-to-many",
|
|
1118
|
-
"strength": "medium",
|
|
1119
|
-
"required": false
|
|
1170
|
+
"required": false,
|
|
1171
|
+
"description": "The named definition meets a constraint on the data, such as a value range or format the type is required to enforce."
|
|
1120
1172
|
},
|
|
1121
1173
|
"data-model.schemadefinition.satisfies.motivation.requirement": {
|
|
1122
1174
|
"id": "data-model.schemadefinition.satisfies.motivation.requirement",
|
|
@@ -1127,62 +1179,56 @@
|
|
|
1127
1179
|
"predicate": "satisfies",
|
|
1128
1180
|
"cardinality": "many-to-many",
|
|
1129
1181
|
"strength": "medium",
|
|
1130
|
-
"required": false
|
|
1182
|
+
"required": false,
|
|
1183
|
+
"description": "The named definition meets a requirement on the data, such as a shared type that captures what the business needs to record."
|
|
1131
1184
|
},
|
|
1132
|
-
"data-model.schemadefinition.
|
|
1133
|
-
"id": "data-model.schemadefinition.
|
|
1134
|
-
"source_spec_node_id": "data-model.schemadefinition",
|
|
1135
|
-
"source_layer": "data-model",
|
|
1136
|
-
"destination_spec_node_id": "application.applicationcomponent",
|
|
1137
|
-
"destination_layer": "application",
|
|
1138
|
-
"predicate": "serves",
|
|
1139
|
-
"cardinality": "many-to-many",
|
|
1140
|
-
"strength": "medium",
|
|
1141
|
-
"required": false
|
|
1142
|
-
},
|
|
1143
|
-
"data-model.schemadefinition.serves.application.applicationevent": {
|
|
1144
|
-
"id": "data-model.schemadefinition.serves.application.applicationevent",
|
|
1185
|
+
"data-model.schemadefinition.specializes.data-model.schemadefinition": {
|
|
1186
|
+
"id": "data-model.schemadefinition.specializes.data-model.schemadefinition",
|
|
1145
1187
|
"source_spec_node_id": "data-model.schemadefinition",
|
|
1146
1188
|
"source_layer": "data-model",
|
|
1147
|
-
"destination_spec_node_id": "
|
|
1148
|
-
"destination_layer": "
|
|
1149
|
-
"predicate": "
|
|
1189
|
+
"destination_spec_node_id": "data-model.schemadefinition",
|
|
1190
|
+
"destination_layer": "data-model",
|
|
1191
|
+
"predicate": "specializes",
|
|
1150
1192
|
"cardinality": "many-to-many",
|
|
1151
1193
|
"strength": "medium",
|
|
1152
|
-
"required": false
|
|
1194
|
+
"required": false,
|
|
1195
|
+
"description": "The definition is a subtype of another definition, narrowing or extending it, such as a specific address type derived from a general one. Use the object schema's specializes when both are object schemas."
|
|
1153
1196
|
},
|
|
1154
|
-
"data-model.
|
|
1155
|
-
"id": "data-model.
|
|
1156
|
-
"source_spec_node_id": "data-model.
|
|
1197
|
+
"data-model.schemaproperty.composes.data-model.arrayschema": {
|
|
1198
|
+
"id": "data-model.schemaproperty.composes.data-model.arrayschema",
|
|
1199
|
+
"source_spec_node_id": "data-model.schemaproperty",
|
|
1157
1200
|
"source_layer": "data-model",
|
|
1158
|
-
"destination_spec_node_id": "
|
|
1159
|
-
"destination_layer": "
|
|
1160
|
-
"predicate": "
|
|
1201
|
+
"destination_spec_node_id": "data-model.arrayschema",
|
|
1202
|
+
"destination_layer": "data-model",
|
|
1203
|
+
"predicate": "composes",
|
|
1161
1204
|
"cardinality": "many-to-many",
|
|
1162
1205
|
"strength": "medium",
|
|
1163
|
-
"required": false
|
|
1206
|
+
"required": false,
|
|
1207
|
+
"description": "The property's value is a list whose constraints (items, length, uniqueness) are written in place on the property, so the array schema is part of it."
|
|
1164
1208
|
},
|
|
1165
|
-
"data-model.
|
|
1166
|
-
"id": "data-model.
|
|
1167
|
-
"source_spec_node_id": "data-model.
|
|
1209
|
+
"data-model.schemaproperty.composes.data-model.numericschema": {
|
|
1210
|
+
"id": "data-model.schemaproperty.composes.data-model.numericschema",
|
|
1211
|
+
"source_spec_node_id": "data-model.schemaproperty",
|
|
1168
1212
|
"source_layer": "data-model",
|
|
1169
|
-
"destination_spec_node_id": "
|
|
1170
|
-
"destination_layer": "
|
|
1171
|
-
"predicate": "
|
|
1213
|
+
"destination_spec_node_id": "data-model.numericschema",
|
|
1214
|
+
"destination_layer": "data-model",
|
|
1215
|
+
"predicate": "composes",
|
|
1172
1216
|
"cardinality": "many-to-many",
|
|
1173
1217
|
"strength": "medium",
|
|
1174
|
-
"required": false
|
|
1218
|
+
"required": false,
|
|
1219
|
+
"description": "The property's value is a number whose bounds or step are written in place on the property, so the numeric schema is part of it. Model the numeric schema separately only when its constraints matter apart from the field."
|
|
1175
1220
|
},
|
|
1176
|
-
"data-model.
|
|
1177
|
-
"id": "data-model.
|
|
1178
|
-
"source_spec_node_id": "data-model.
|
|
1221
|
+
"data-model.schemaproperty.composes.data-model.stringschema": {
|
|
1222
|
+
"id": "data-model.schemaproperty.composes.data-model.stringschema",
|
|
1223
|
+
"source_spec_node_id": "data-model.schemaproperty",
|
|
1179
1224
|
"source_layer": "data-model",
|
|
1180
|
-
"destination_spec_node_id": "data-model.
|
|
1225
|
+
"destination_spec_node_id": "data-model.stringschema",
|
|
1181
1226
|
"destination_layer": "data-model",
|
|
1182
|
-
"predicate": "
|
|
1227
|
+
"predicate": "composes",
|
|
1183
1228
|
"cardinality": "many-to-many",
|
|
1184
1229
|
"strength": "medium",
|
|
1185
|
-
"required": false
|
|
1230
|
+
"required": false,
|
|
1231
|
+
"description": "The property's value is a string whose length, pattern or format is written in place on the property, so the string schema is part of it. A named, reusable string type is a schema definition the property references."
|
|
1186
1232
|
},
|
|
1187
1233
|
"data-model.schemaproperty.maps-to.api.parameter": {
|
|
1188
1234
|
"id": "data-model.schemaproperty.maps-to.api.parameter",
|
|
@@ -1193,29 +1239,20 @@
|
|
|
1193
1239
|
"predicate": "maps-to",
|
|
1194
1240
|
"cardinality": "many-to-many",
|
|
1195
1241
|
"strength": "medium",
|
|
1196
|
-
"required": false
|
|
1242
|
+
"required": false,
|
|
1243
|
+
"description": "The property carries the same value as an API parameter, such as a filter field that a query parameter binds to."
|
|
1197
1244
|
},
|
|
1198
|
-
"data-model.schemaproperty.references.
|
|
1199
|
-
"id": "data-model.schemaproperty.references.
|
|
1245
|
+
"data-model.schemaproperty.references.security.dataclassification": {
|
|
1246
|
+
"id": "data-model.schemaproperty.references.security.dataclassification",
|
|
1200
1247
|
"source_spec_node_id": "data-model.schemaproperty",
|
|
1201
1248
|
"source_layer": "data-model",
|
|
1202
|
-
"destination_spec_node_id": "
|
|
1203
|
-
"destination_layer": "
|
|
1204
|
-
"predicate": "references",
|
|
1205
|
-
"cardinality": "many-to-many",
|
|
1206
|
-
"strength": "medium",
|
|
1207
|
-
"required": false
|
|
1208
|
-
},
|
|
1209
|
-
"data-model.schemaproperty.references.data-model.numericschema": {
|
|
1210
|
-
"id": "data-model.schemaproperty.references.data-model.numericschema",
|
|
1211
|
-
"source_spec_node_id": "data-model.schemaproperty",
|
|
1212
|
-
"source_layer": "data-model",
|
|
1213
|
-
"destination_spec_node_id": "data-model.numericschema",
|
|
1214
|
-
"destination_layer": "data-model",
|
|
1249
|
+
"destination_spec_node_id": "security.dataclassification",
|
|
1250
|
+
"destination_layer": "security",
|
|
1215
1251
|
"predicate": "references",
|
|
1216
1252
|
"cardinality": "many-to-many",
|
|
1217
1253
|
"strength": "medium",
|
|
1218
|
-
"required": false
|
|
1254
|
+
"required": false,
|
|
1255
|
+
"description": "The property is handled at the protection level of the data classification, such as a field holding personal data."
|
|
1219
1256
|
},
|
|
1220
1257
|
"data-model.schemaproperty.references.data-model.objectschema": {
|
|
1221
1258
|
"id": "data-model.schemaproperty.references.data-model.objectschema",
|
|
@@ -1226,7 +1263,8 @@
|
|
|
1226
1263
|
"predicate": "references",
|
|
1227
1264
|
"cardinality": "many-to-many",
|
|
1228
1265
|
"strength": "medium",
|
|
1229
|
-
"required": false
|
|
1266
|
+
"required": false,
|
|
1267
|
+
"description": "The property's value is an object of a type declared elsewhere, such as Pet.owner typed as the Owner entity, so the property points at that object schema rather than owning it."
|
|
1230
1268
|
},
|
|
1231
1269
|
"data-model.schemaproperty.references.data-model.schemadefinition": {
|
|
1232
1270
|
"id": "data-model.schemaproperty.references.data-model.schemadefinition",
|
|
@@ -1237,18 +1275,8 @@
|
|
|
1237
1275
|
"predicate": "references",
|
|
1238
1276
|
"cardinality": "many-to-many",
|
|
1239
1277
|
"strength": "medium",
|
|
1240
|
-
"required": false
|
|
1241
|
-
|
|
1242
|
-
"data-model.schemaproperty.references.data-model.stringschema": {
|
|
1243
|
-
"id": "data-model.schemaproperty.references.data-model.stringschema",
|
|
1244
|
-
"source_spec_node_id": "data-model.schemaproperty",
|
|
1245
|
-
"source_layer": "data-model",
|
|
1246
|
-
"destination_spec_node_id": "data-model.stringschema",
|
|
1247
|
-
"destination_layer": "data-model",
|
|
1248
|
-
"predicate": "references",
|
|
1249
|
-
"cardinality": "many-to-many",
|
|
1250
|
-
"strength": "medium",
|
|
1251
|
-
"required": false
|
|
1278
|
+
"required": false,
|
|
1279
|
+
"description": "The property's value takes a named, reusable definition, such as a shared enumeration or value type reached by $ref."
|
|
1252
1280
|
},
|
|
1253
1281
|
"data-model.schemaproperty.satisfies.motivation.constraint": {
|
|
1254
1282
|
"id": "data-model.schemaproperty.satisfies.motivation.constraint",
|
|
@@ -1259,18 +1287,8 @@
|
|
|
1259
1287
|
"predicate": "satisfies",
|
|
1260
1288
|
"cardinality": "many-to-many",
|
|
1261
1289
|
"strength": "medium",
|
|
1262
|
-
"required": false
|
|
1263
|
-
|
|
1264
|
-
"data-model.schemaproperty.satisfies.security.dataclassification": {
|
|
1265
|
-
"id": "data-model.schemaproperty.satisfies.security.dataclassification",
|
|
1266
|
-
"source_spec_node_id": "data-model.schemaproperty",
|
|
1267
|
-
"source_layer": "data-model",
|
|
1268
|
-
"destination_spec_node_id": "security.dataclassification",
|
|
1269
|
-
"destination_layer": "security",
|
|
1270
|
-
"predicate": "satisfies",
|
|
1271
|
-
"cardinality": "many-to-many",
|
|
1272
|
-
"strength": "medium",
|
|
1273
|
-
"required": false
|
|
1290
|
+
"required": false,
|
|
1291
|
+
"description": "The property meets a constraint on the data, such as a mandatory field or a permitted range set by policy."
|
|
1274
1292
|
},
|
|
1275
1293
|
"data-model.schemaproperty.satisfies.security.fieldaccesscontrol": {
|
|
1276
1294
|
"id": "data-model.schemaproperty.satisfies.security.fieldaccesscontrol",
|
|
@@ -1281,7 +1299,8 @@
|
|
|
1281
1299
|
"predicate": "satisfies",
|
|
1282
1300
|
"cardinality": "many-to-many",
|
|
1283
1301
|
"strength": "medium",
|
|
1284
|
-
"required": false
|
|
1302
|
+
"required": false,
|
|
1303
|
+
"description": "The property is subject to field-level access control, so who may read or write it is governed by that rule."
|
|
1285
1304
|
},
|
|
1286
1305
|
"data-model.schemaproperty.satisfies.security.validationrule": {
|
|
1287
1306
|
"id": "data-model.schemaproperty.satisfies.security.validationrule",
|
|
@@ -1292,7 +1311,8 @@
|
|
|
1292
1311
|
"predicate": "satisfies",
|
|
1293
1312
|
"cardinality": "many-to-many",
|
|
1294
1313
|
"strength": "medium",
|
|
1295
|
-
"required": false
|
|
1314
|
+
"required": false,
|
|
1315
|
+
"description": "The property's value is checked by a security-motivated validation rule, such as input sanitisation on a free-text field; ordinary value constraints stay on the property's own schema."
|
|
1296
1316
|
}
|
|
1297
1317
|
}
|
|
1298
1318
|
}
|