From 9a34904a8f8e8b77b05b4e03c2a1ca740dd44d37 Mon Sep 17 00:00:00 2001 From: David Kemp <19152940+davaya@users.noreply.github.com> Date: Mon, 27 May 2024 09:19:30 -0400 Subject: [PATCH] Initial draft --- information-model/README.md | 87 ++++++++ information-model/core.jadn | 44 ++++ information-model/generated/core.jidl | 30 +++ information-model/generated/core.json | 106 ++++++++++ information-model/generated/core.md | 68 +++++++ information-model/generated/eox.graphviz.png | Bin 0 -> 80389 bytes .../generated/shell-resolved.jidl | 49 +++++ .../generated/shell-resolved.json | 188 ++++++++++++++++++ .../generated/shell-resolved_i.puml | 39 ++++ .../generated/shell-resolved_ia.dot | 88 ++++++++ information-model/generated/shell.jidl | 25 +++ information-model/generated/shell.json | 96 +++++++++ information-model/generated/shell.md | 56 ++++++ .../original-json-schema/core.json | 63 ++++++ .../original-json-schema/shell.json | 70 +++++++ information-model/shell-resolved.jadn | 66 ++++++ information-model/shell.jadn | 38 ++++ 17 files changed, 1113 insertions(+) create mode 100644 information-model/README.md create mode 100644 information-model/core.jadn create mode 100644 information-model/generated/core.jidl create mode 100644 information-model/generated/core.json create mode 100644 information-model/generated/core.md create mode 100644 information-model/generated/eox.graphviz.png create mode 100644 information-model/generated/shell-resolved.jidl create mode 100644 information-model/generated/shell-resolved.json create mode 100644 information-model/generated/shell-resolved_i.puml create mode 100644 information-model/generated/shell-resolved_ia.dot create mode 100644 information-model/generated/shell.jidl create mode 100644 information-model/generated/shell.json create mode 100644 information-model/generated/shell.md create mode 100644 information-model/original-json-schema/core.json create mode 100644 information-model/original-json-schema/shell.json create mode 100644 information-model/shell-resolved.jadn create mode 100644 information-model/shell.jadn diff --git a/information-model/README.md b/information-model/README.md new file mode 100644 index 0000000..281bbc3 --- /dev/null +++ b/information-model/README.md @@ -0,0 +1,87 @@ +# EoX Information Model + +An information model (IM) is a formal definition of structured data at a higher level of abstraction +than a concrete schema. It is intended to be easy to work with and understand, and to serve as the +*single source of truth* for documentation in multiple formats, concrete schemas in multiple formats, +message generation and validation in multiple data formats, and code generation for multiple +programming languages. + +This is an information model for two proposed EoX schema files (core.json, shell.json) written in +the JSON Abstract Data Notation (JADN) language. It can be written as either JSON data +or as a textual Information Definition Language, and can be converted back and forth between those formats. +It can also be used to generate property tables in HTML or Markdown format and to ERDs in GraphVis or PlantUML format +for use in specification documents: + +**Fig. 1**: shell.jidl +``` +Shell = Record + 1 schema Schema_shell + 2 statements Statement [1..*] // Contains a list of statement elements. + +Schema_shell = Enumerated // Specifies the schema the JSON object must be valid against. + 1 https://docs.oasis-open.org/openeox/tbd/schema/shell.json + +Statement = Record // Statements contain the single OpenEoX entries. + 1 core c:Core + 2 productName ProductName_t + 3 productVersion ProductVersion_t + 4 supplierName SupplierName_t +``` + +**Fig. 2**: shell.jadn +```json + ["Shell", "Record", [], "", [ + [1, "schema", "Schema_shell", [], ""], + [2, "statements", "Statement", ["]0"], "Contains a list of statement elements."] + ]], + + ["Schema_shell", "Enumerated", [], "Specifies the schema the JSON object must be valid against.", [ + [1, "https://docs.oasis-open.org/openeox/tbd/schema/shell.json", ""] + ]], + + ["Statement", "Record", [], "Statements contain the single OpenEoX entries.", [ + [1, "core", "c:Core", [], ""], + [2, "productName", "ProductName_t", [], ""], + [3, "productVersion", "ProductVersion_t", [], ""], + [4, "supplierName", "SupplierName_t", [], ""] + ]], +``` + +**Fig. 3**: shell.md + +********** +**Type: Shell (Record)** + +| ID | Name | Type | \# | Description | +|----|----------------|--------------|-------|----------------------------------------| +| 1 | **schema** | Schema_shell | 1 | | +| 2 | **statements** | Statement | 1..\* | Contains a list of statement elements. | + +********** + +Specifies the schema the JSON object must be valid against. + +**Type: Schema_shell (Enumerated)** + +| ID | Item | Description | +|----|---------------------------------------------------------------|-------------| +| 1 | **https://docs.oasis-open.org/openeox/tbd/schema/shell.json** | | + +********** + +Statements contain the single OpenEoX entries. + +**Type: Statement (Record)** + +| ID | Name | Type | \# | Description | +|----|--------------------|------------------|----|-------------| +| 1 | **core** | c:Core | 1 | | +| 2 | **productName** | ProductName_t | 1 | | +| 3 | **productVersion** | ProductVersion_t | 1 | | +| 4 | **supplierName** | SupplierName_t | 1 | | + +********** + +**Fig. 4**: EoX entity relationship diagram + +![EoX entity relationship diagram](generated/eox.graphviz.png) \ No newline at end of file diff --git a/information-model/core.jadn b/information-model/core.jadn new file mode 100644 index 0000000..f09a1d8 --- /dev/null +++ b/information-model/core.jadn @@ -0,0 +1,44 @@ +{ + "info": { + "package": "https://docs.oasis-open.org/openeox/tbd/schema/core", + "title": "EOL and EOS Information", + "description": "A draft schema for representing End-of-Life (EOL) and End-of-Support (EOS) information in OpenEoX.", + "exports": ["Core"], + "config": { + "$TypeName": "^[$A-Z][-_$A-Za-z0-9]{0,63}$" + } + }, + + "types": [ + ["Core", "Record", [], "", [ + [1, "schema", "Schema_core", [], ""], + [2, "last_updated", "Timestamp", [], "Timestamp of last change"], + [3, "status", "Status", ["]0"], "Contains a list of status elements."] + ]], + + ["Schema_core", "Enumerated", [], "Specifies the schema the JSON object must be valid against.", [ + [1, "https://docs.oasis-open.org/openeox/tbd/schema/core", ""] + ]], + + ["Timestamp", "String", [], "Contains the RFC 3339 timestamp", []], + + ["Status", "Record", [], "Contains a single entry in the product lifecycle.", [ + [1, "category", "Category", [], "Contains the category of the status"], + [2, "timestamp", "StatusTimestamp", [], "Contains the timestamp at which the product enters the category."] + ]], + + ["Category", "Enumerated", [], "", [ + [1, "EndOfLife", ""], + [2, "EndOfSupport", ""] + ]], + + ["StatusTimestamp", "Choice", [], "", [ + [1, "timestamp", "Timestamp", [], ""], + [2, "timeValues", "TimeValues", [], ""] + ]], + + ["TimeValues", "Enumerated", [], "", [ + [1, "tba", ""] + ]] + ] +} diff --git a/information-model/generated/core.jidl b/information-model/generated/core.jidl new file mode 100644 index 0000000..8f858ef --- /dev/null +++ b/information-model/generated/core.jidl @@ -0,0 +1,30 @@ + title: "EOL and EOS Information" + package: "https://docs.oasis-open.org/openeox/tbd/schema/core" + description: "A draft schema for representing End-of-Life (EOL) and End-of-Support (EOS) information in OpenEoX." + exports: ["Core"] + config: {"$TypeName": "^[$A-Z][-_$A-Za-z0-9]{0,63}$"} + +Core = Record + 1 schema Schema_core + 2 last_updated Timestamp // Timestamp of last change + 3 status Status [1..*] // Contains a list of status elements. + +Schema_core = Enumerated // Specifies the schema the JSON object must be valid against. + 1 https://docs.oasis-open.org/openeox/tbd/schema/core + +Timestamp = String // Contains the RFC 3339 timestamp + +Status = Record // Contains a single entry in the product lifecycle. + 1 category Category // Contains the category of the status + 2 timestamp StatusTimestamp // Contains the timestamp at which the product enters the category. + +Category = Enumerated + 1 EndOfLife + 2 EndOfSupport + +StatusTimestamp = Choice + 1 timestamp Timestamp + 2 timeValues TimeValues + +TimeValues = Enumerated + 1 tba diff --git a/information-model/generated/core.json b/information-model/generated/core.json new file mode 100644 index 0000000..d472013 --- /dev/null +++ b/information-model/generated/core.json @@ -0,0 +1,106 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://docs.oasis-open.org/openeox/tbd/schema/core", + "title": "EOL and EOS Information", + "description": "A draft schema for representing End-of-Life (EOL) and End-of-Support (EOS) information in OpenEoX.", + "$ref": "#/definitions/Core", + "definitions": { + "Core": { + "title": "Core", + "type": "object", + "additionalProperties": false, + "required": [ + "schema", + "last_updated", + "status" + ], + "maxProperties": 100, + "properties": { + "schema": { + "$ref": "#/definitions/Schema_core", + "description": "" + }, + "last_updated": { + "$ref": "#/definitions/Timestamp", + "description": "Timestamp of last change" + }, + "status": { + "type": "array", + "description": "Contains a list of status elements.", + "minItems": 1, + "items": { + "$ref": "#/definitions/Status", + "description": "Contains a list of status elements." + } + } + } + }, + "Schema_core": { + "title": "Schema core", + "type": "string", + "description": "Specifies the schema the JSON object must be valid against.", + "enum": [ + "https://docs.oasis-open.org/openeox/tbd/schema/core" + ] + }, + "Timestamp": { + "title": "Timestamp", + "type": "string", + "description": "Contains the RFC 3339 timestamp", + "maxLength": 255 + }, + "Status": { + "title": "Status", + "type": "object", + "description": "Contains a single entry in the product lifecycle.", + "additionalProperties": false, + "required": [ + "category", + "timestamp" + ], + "maxProperties": 100, + "properties": { + "category": { + "$ref": "#/definitions/Category", + "description": "Contains the category of the status" + }, + "timestamp": { + "$ref": "#/definitions/StatusTimestamp", + "description": "Contains the timestamp at which the product enters the category." + } + } + }, + "Category": { + "title": "Category", + "type": "string", + "enum": [ + "EndOfLife", + "EndOfSupport" + ] + }, + "StatusTimestamp": { + "title": "StatusTimestamp", + "type": "object", + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "properties": { + "timestamp": { + "$ref": "#/definitions/Timestamp", + "description": "" + }, + "timeValues": { + "$ref": "#/definitions/TimeValues", + "description": "" + } + } + }, + "TimeValues": { + "title": "TimeValues", + "type": "string", + "enum": [ + "tba" + ] + } + } +} \ No newline at end of file diff --git a/information-model/generated/core.md b/information-model/generated/core.md new file mode 100644 index 0000000..8cef666 --- /dev/null +++ b/information-model/generated/core.md @@ -0,0 +1,68 @@ + title: "EOL and EOS Information" + package: "https://docs.oasis-open.org/openeox/tbd/schema/core" + description: "A draft schema for representing End-of-Life (EOL) and End-of-Support (EOS) information in OpenEoX." + exports: ["Core"] + config: {"$TypeName": "^[$A-Z][-_$A-Za-z0-9]{0,63}$"} + +**Type: Core (Record)** + +| ID | Name | Type | \# | Description | +|----|------------------|-------------|-------|-------------------------------------| +| 1 | **schema** | Schema_core | 1 | | +| 2 | **last_updated** | Timestamp | 1 | Timestamp of last change | +| 3 | **status** | Status | 1..\* | Contains a list of status elements. | + +********** + +Specifies the schema the JSON object must be valid against. + +**Type: Schema_core (Enumerated)** + +| ID | Item | Description | +|----|---------------------------------------------------------|-------------| +| 1 | **https://docs.oasis-open.org/openeox/tbd/schema/core** | | + +********** + +| Type Name | Type Definition | Description | +|---------------|-----------------|---------------------------------| +| **Timestamp** | String | Contains the RFC 3339 timestamp | + +********** + +Contains a single entry in the product lifecycle. + +**Type: Status (Record)** + +| ID | Name | Type | \# | Description | +|----|---------------|-----------------|----|------------------------------------------------------------------| +| 1 | **category** | Category | 1 | Contains the category of the status | +| 2 | **timestamp** | StatusTimestamp | 1 | Contains the timestamp at which the product enters the category. | + +********** + +**Type: Category (Enumerated)** + +| ID | Item | Description | +|----|------------------|-------------| +| 1 | **EndOfLife** | | +| 2 | **EndOfSupport** | | + +********** + +**Type: StatusTimestamp (Choice)** + +| ID | Name | Type | \# | Description | +|----|----------------|------------|----|-------------| +| 1 | **timestamp** | Timestamp | 1 | | +| 2 | **timeValues** | TimeValues | 1 | | + +********** + +**Type: TimeValues (Enumerated)** + +| ID | Item | Description | +|----|---------|-------------| +| 1 | **tba** | | + +********** diff --git a/information-model/generated/eox.graphviz.png b/information-model/generated/eox.graphviz.png new file mode 100644 index 0000000000000000000000000000000000000000..76fef43c2cd5910e7fc3df18d66b51e7783e10a7 GIT binary patch literal 80389 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 literal 0 HcmV?d00001 diff --git a/information-model/generated/shell-resolved.jidl b/information-model/generated/shell-resolved.jidl new file mode 100644 index 0000000..c9425dc --- /dev/null +++ b/information-model/generated/shell-resolved.jidl @@ -0,0 +1,49 @@ + title: "EOL and EOS Information" + package: "https://docs.oasis-open.org/openeox/tbd/schema/shell" + description: "A draft schema for representing End-of-Life (EOL) and End-of-Support (EOS) information in OpenEoX." + exports: ["Shell"] + config: {"$TypeName": "^[$A-Z][-_$A-Za-z0-9]{0,63}$"} + +Shell = Record + 1 schema Schema_shell + 2 statements Statement [1..*] // Contains a list of statement elements. + +Statement = Record // Statements contain the single OpenEoX entries. + 1 core Core + 2 productName ProductName_t + 3 productVersion ProductVersion_t + 4 supplierName SupplierName_t + +Core = Record + 1 schema Schema_core + 2 last_updated Timestamp // Timestamp of last change + 3 status Status [1..*] // Contains a list of status elements. + +Status = Record // Contains a single entry in the product lifecycle. + 1 category Category // Contains the category of the status + 2 timestamp StatusTimestamp // Contains the timestamp at which the product enters the category. + +StatusTimestamp = Choice + 1 timestamp Timestamp + 2 timeValues TimeValues + +Schema_core = Enumerated // Specifies the schema the JSON object must be valid against. + 1 https://docs.oasis-open.org/openeox/tbd/schema/core + +Schema_shell = Enumerated // Specifies the schema the JSON object must be valid against. + 1 https://docs.oasis-open.org/openeox/tbd/schema/shell.json + +Category = Enumerated + 1 EndOfLife + 2 EndOfSupport + +TimeValues = Enumerated + 1 tba + +Timestamp = String // Contains the RFC 3339 timestamp + +ProductName_t = String // Contains the name of the product. + +ProductVersion_t = String // Contains the version or release of the product. + +SupplierName_t = String // Contains the name of the supplier or service provider. diff --git a/information-model/generated/shell-resolved.json b/information-model/generated/shell-resolved.json new file mode 100644 index 0000000..7327378 --- /dev/null +++ b/information-model/generated/shell-resolved.json @@ -0,0 +1,188 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://docs.oasis-open.org/openeox/tbd/schema/shell", + "title": "EOL and EOS Information", + "description": "A draft schema for representing End-of-Life (EOL) and End-of-Support (EOS) information in OpenEoX.", + "$ref": "#/definitions/Shell", + "definitions": { + "Shell": { + "title": "Shell", + "type": "object", + "additionalProperties": false, + "required": [ + "schema", + "statements" + ], + "maxProperties": 100, + "properties": { + "schema": { + "$ref": "#/definitions/Schema_shell", + "description": "" + }, + "statements": { + "type": "array", + "description": "Contains a list of statement elements.", + "minItems": 1, + "items": { + "$ref": "#/definitions/Statement", + "description": "Contains a list of statement elements." + } + } + } + }, + "Statement": { + "title": "Statement", + "type": "object", + "description": "Statements contain the single OpenEoX entries.", + "additionalProperties": false, + "required": [ + "core", + "productName", + "productVersion", + "supplierName" + ], + "maxProperties": 100, + "properties": { + "core": { + "$ref": "#/definitions/Core", + "description": "" + }, + "productName": { + "$ref": "#/definitions/ProductName_t", + "description": "" + }, + "productVersion": { + "$ref": "#/definitions/ProductVersion_t", + "description": "" + }, + "supplierName": { + "$ref": "#/definitions/SupplierName_t", + "description": "" + } + } + }, + "Core": { + "title": "Core", + "type": "object", + "additionalProperties": false, + "required": [ + "schema", + "last_updated", + "status" + ], + "maxProperties": 100, + "properties": { + "schema": { + "$ref": "#/definitions/Schema_core", + "description": "" + }, + "last_updated": { + "$ref": "#/definitions/Timestamp", + "description": "Timestamp of last change" + }, + "status": { + "type": "array", + "description": "Contains a list of status elements.", + "minItems": 1, + "items": { + "$ref": "#/definitions/Status", + "description": "Contains a list of status elements." + } + } + } + }, + "Status": { + "title": "Status", + "type": "object", + "description": "Contains a single entry in the product lifecycle.", + "additionalProperties": false, + "required": [ + "category", + "timestamp" + ], + "maxProperties": 100, + "properties": { + "category": { + "$ref": "#/definitions/Category", + "description": "Contains the category of the status" + }, + "timestamp": { + "$ref": "#/definitions/StatusTimestamp", + "description": "Contains the timestamp at which the product enters the category." + } + } + }, + "StatusTimestamp": { + "title": "StatusTimestamp", + "type": "object", + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "properties": { + "timestamp": { + "$ref": "#/definitions/Timestamp", + "description": "" + }, + "timeValues": { + "$ref": "#/definitions/TimeValues", + "description": "" + } + } + }, + "Schema_core": { + "title": "Schema core", + "type": "string", + "description": "Specifies the schema the JSON object must be valid against.", + "enum": [ + "https://docs.oasis-open.org/openeox/tbd/schema/core" + ] + }, + "Schema_shell": { + "title": "Schema shell", + "type": "string", + "description": "Specifies the schema the JSON object must be valid against.", + "enum": [ + "https://docs.oasis-open.org/openeox/tbd/schema/shell.json" + ] + }, + "Category": { + "title": "Category", + "type": "string", + "enum": [ + "EndOfLife", + "EndOfSupport" + ] + }, + "TimeValues": { + "title": "TimeValues", + "type": "string", + "enum": [ + "tba" + ] + }, + "Timestamp": { + "title": "Timestamp", + "type": "string", + "description": "Contains the RFC 3339 timestamp", + "maxLength": 255 + }, + "ProductName_t": { + "title": "ProductName t", + "type": "string", + "description": "Contains the name of the product.", + "maxLength": 255 + }, + "ProductVersion_t": { + "title": "ProductVersion t", + "type": "string", + "description": "Contains the version or release of the product.", + "maxLength": 255 + }, + "SupplierName_t": { + "title": "SupplierName t", + "type": "string", + "description": "Contains the name of the supplier or service provider.", + "maxLength": 255 + } + } +} \ No newline at end of file diff --git a/information-model/generated/shell-resolved_i.puml b/information-model/generated/shell-resolved_i.puml new file mode 100644 index 0000000..37c0403 --- /dev/null +++ b/information-model/generated/shell-resolved_i.puml @@ -0,0 +1,39 @@ +' package: https://docs.oasis-open.org/openeox/tbd/schema/shell +' title: EOL and EOS Information +' description: A draft schema for representing End-of-Life (EOL) and End-of-Support (EOS) information in OpenEoX. +' exports: ['Shell'] +' config: {'$TypeName': '^[$A-Z][-_$A-Za-z0-9]{0,63}$'} + +@startuml + ' !theme spacelab + hide empty members + hide circle + +class "Shell : Record" as n0 + n0 : 1 schema : {field} Schema_shell + n0 : 2 statements : {field} Statement [1..*] + +class "Statement : Record" as n1 + n1 : 1 core : {field} Core + n1 : 2 productName : {field} ProductName_t + n1 : 3 productVersion : {field} ProductVersion_t + n1 : 4 supplierName : {field} SupplierName_t + +class "Core : Record" as n2 + n2 : 1 schema : {field} Schema_core + n2 : 2 last_updated : {field} Timestamp + n2 : 3 status : {field} Status [1..*] + +class "Status : Record" as n3 + n3 : 1 category : {field} Category + n3 : 2 timestamp : {field} StatusTimestamp + +class "StatusTimestamp : Choice" as n4 + n4 : 1 timestamp : {field} Timestamp + n4 : 2 timeValues : {field} TimeValues + + n0 "1" --> "1..*" n1 : statements + n1 "1" --> "1" n2 : core + n2 "1" --> "1..*" n3 : status + n3 "1" --> "1" n4 : timestamp +@enduml diff --git a/information-model/generated/shell-resolved_ia.dot b/information-model/generated/shell-resolved_ia.dot new file mode 100644 index 0000000..d42eba4 --- /dev/null +++ b/information-model/generated/shell-resolved_ia.dot @@ -0,0 +1,88 @@ +# package: https://docs.oasis-open.org/openeox/tbd/schema/shell +# title: EOL and EOS Information +# description: A draft schema for representing End-of-Life (EOL) and End-of-Support (EOS) information in OpenEoX. +# exports: ['Shell'] +# config: {'$TypeName': '^[$A-Z][-_$A-Za-z0-9]{0,63}$'} + +digraph G { + graph [fontname=Arial, fontsize=12]; + node [fontname=Arial, fontsize=8, shape=plain, style=filled, fillcolor=lightskyblue1]; + edge [fontname=Arial, fontsize=7, arrowsize=0.5, labelangle=45.0, labeldistance=0.9]; + bgcolor="transparent"; + +n0 [label=< +
+ + +
Shell : Record
1 schema : Schema_shell
2 statements : Statement [1..*]
>] + +n1 [label=< +
+ + + + +
Statement : Record
1 core : Core
2 productName : ProductName_t
3 productVersion : ProductVersion_t
4 supplierName : SupplierName_t
>] + +n2 [label=< +
+ + + +
Core : Record
1 schema : Schema_core
2 last_updated : Timestamp
3 status : Status [1..*]
>] + +n3 [label=< +
+ + +
Status : Record
1 category : Category
2 timestamp : StatusTimestamp
>] + +n4 [label=< +
+ + +
StatusTimestamp : Choice
1 timestamp : Timestamp
2 timeValues : TimeValues
>] + +n5 [fillcolor=palegreen, label=< +
+ +
Schema_core : Enumerated
1 https://docs.oasis-open.org/openeox/tbd/schema/core
>] + +n6 [fillcolor=palegreen, label=< +
+ +
Schema_shell : Enumerated
1 https://docs.oasis-open.org/openeox/tbd/schema/shell.json
>] + +n7 [fillcolor=palegreen, label=< +
+ + +
Category : Enumerated
1 EndOfLife
2 EndOfSupport
>] + +n8 [fillcolor=palegreen, label=< +
+ +
TimeValues : Enumerated
1 tba
>] + +n9 [label=<Timestamp : String>, shape=ellipse, style=filled, fillcolor=palegreen] + +n10 [label=<ProductName_t : String>, shape=ellipse, style=filled, fillcolor=palegreen] + +n11 [label=<ProductVersion_t : String>, shape=ellipse, style=filled, fillcolor=palegreen] + +n12 [label=<SupplierName_t : String>, shape=ellipse, style=filled, fillcolor=palegreen] + + n0 -> n6 [label=schema, headlabel="1", taillabel="1"] + n0 -> n1 [label=statements, headlabel="1..*", taillabel="1"] + n1 -> n2 [label=core, headlabel="1", taillabel="1"] + n1 -> n10 [label=productName, headlabel="1", taillabel="1"] + n1 -> n11 [label=productVersion, headlabel="1", taillabel="1"] + n1 -> n12 [label=supplierName, headlabel="1", taillabel="1"] + n2 -> n5 [label=schema, headlabel="1", taillabel="1"] + n2 -> n9 [label=last_updated, headlabel="1", taillabel="1"] + n2 -> n3 [label=status, headlabel="1..*", taillabel="1"] + n3 -> n7 [label=category, headlabel="1", taillabel="1"] + n3 -> n4 [label=timestamp, headlabel="1", taillabel="1"] + n4 -> n9 [label=timestamp, headlabel="1", taillabel="1"] + n4 -> n8 [label=timeValues, headlabel="1", taillabel="1"] +} diff --git a/information-model/generated/shell.jidl b/information-model/generated/shell.jidl new file mode 100644 index 0000000..9ec705c --- /dev/null +++ b/information-model/generated/shell.jidl @@ -0,0 +1,25 @@ + title: "EOL and EOS Information" + package: "https://docs.oasis-open.org/openeox/tbd/schema/shell" + description: "A draft schema for representing End-of-Life (EOL) and End-of-Support (EOS) information in OpenEoX." + namespaces: {"c": "https://docs.oasis-open.org/openeox/tbd/schema/core"} + exports: ["Shell"] + config: {"$TypeName": "^[$A-Z][-_$A-Za-z0-9]{0,63}$"} + +Shell = Record + 1 schema Schema_shell + 2 statements Statement [1..*] // Contains a list of statement elements. + +Schema_shell = Enumerated // Specifies the schema the JSON object must be valid against. + 1 https://docs.oasis-open.org/openeox/tbd/schema/shell.json + +Statement = Record // Statements contain the single OpenEoX entries. + 1 core c:Core + 2 productName ProductName_t + 3 productVersion ProductVersion_t + 4 supplierName SupplierName_t + +ProductName_t = String // Contains the name of the product. + +ProductVersion_t = String // Contains the version or release of the product. + +SupplierName_t = String // Contains the name of the supplier or service provider. diff --git a/information-model/generated/shell.json b/information-model/generated/shell.json new file mode 100644 index 0000000..ea513dd --- /dev/null +++ b/information-model/generated/shell.json @@ -0,0 +1,96 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://docs.oasis-open.org/openeox/tbd/schema/shell", + "title": "EOL and EOS Information", + "description": "A draft schema for representing End-of-Life (EOL) and End-of-Support (EOS) information in OpenEoX.", + "$ref": "#/definitions/Shell", + "definitions": { + "Shell": { + "title": "Shell", + "type": "object", + "additionalProperties": false, + "required": [ + "schema", + "statements" + ], + "maxProperties": 100, + "properties": { + "schema": { + "$ref": "#/definitions/Schema_shell", + "description": "" + }, + "statements": { + "type": "array", + "description": "Contains a list of statement elements.", + "minItems": 1, + "items": { + "$ref": "#/definitions/Statement", + "description": "Contains a list of statement elements." + } + } + } + }, + "Schema_shell": { + "title": "Schema shell", + "type": "string", + "description": "Specifies the schema the JSON object must be valid against.", + "enum": [ + "https://docs.oasis-open.org/openeox/tbd/schema/shell.json" + ] + }, + "Statement": { + "title": "Statement", + "type": "object", + "description": "Statements contain the single OpenEoX entries.", + "additionalProperties": false, + "required": [ + "core", + "productName", + "productVersion", + "supplierName" + ], + "maxProperties": 100, + "properties": { + "core": { + "$ref": "#/imports/c/Core", + "description": "" + }, + "productName": { + "$ref": "#/definitions/ProductName_t", + "description": "" + }, + "productVersion": { + "$ref": "#/definitions/ProductVersion_t", + "description": "" + }, + "supplierName": { + "$ref": "#/definitions/SupplierName_t", + "description": "" + } + } + }, + "ProductName_t": { + "title": "ProductName t", + "type": "string", + "description": "Contains the name of the product.", + "maxLength": 255 + }, + "ProductVersion_t": { + "title": "ProductVersion t", + "type": "string", + "description": "Contains the version or release of the product.", + "maxLength": 255 + }, + "SupplierName_t": { + "title": "SupplierName t", + "type": "string", + "description": "Contains the name of the supplier or service provider.", + "maxLength": 255 + } + }, + "imports": { + "c": { + "Core": {} + } + } +} \ No newline at end of file diff --git a/information-model/generated/shell.md b/information-model/generated/shell.md new file mode 100644 index 0000000..a719f4e --- /dev/null +++ b/information-model/generated/shell.md @@ -0,0 +1,56 @@ + title: "EOL and EOS Information" + package: "https://docs.oasis-open.org/openeox/tbd/schema/shell" + description: "A draft schema for representing End-of-Life (EOL) and End-of-Support (EOS) information in OpenEoX." + namespaces: {"c": "https://docs.oasis-open.org/openeox/tbd/schema/core"} + exports: ["Shell"] + config: {"$TypeName": "^[$A-Z][-_$A-Za-z0-9]{0,63}$"} + +**Type: Shell (Record)** + +| ID | Name | Type | \# | Description | +|----|----------------|--------------|-------|----------------------------------------| +| 1 | **schema** | Schema_shell | 1 | | +| 2 | **statements** | Statement | 1..\* | Contains a list of statement elements. | + +********** + +Specifies the schema the JSON object must be valid against. + +**Type: Schema_shell (Enumerated)** + +| ID | Item | Description | +|----|---------------------------------------------------------------|-------------| +| 1 | **https://docs.oasis-open.org/openeox/tbd/schema/shell.json** | | + +********** + +Statements contain the single OpenEoX entries. + +**Type: Statement (Record)** + +| ID | Name | Type | \# | Description | +|----|--------------------|------------------|----|-------------| +| 1 | **core** | c:Core | 1 | | +| 2 | **productName** | ProductName_t | 1 | | +| 3 | **productVersion** | ProductVersion_t | 1 | | +| 4 | **supplierName** | SupplierName_t | 1 | | + +********** + +| Type Name | Type Definition | Description | +|-------------------|-----------------|-----------------------------------| +| **ProductName_t** | String | Contains the name of the product. | + +********** + +| Type Name | Type Definition | Description | +|----------------------|-----------------|-------------------------------------------------| +| **ProductVersion_t** | String | Contains the version or release of the product. | + +********** + +| Type Name | Type Definition | Description | +|--------------------|-----------------|--------------------------------------------------------| +| **SupplierName_t** | String | Contains the name of the supplier or service provider. | + +********** diff --git a/information-model/original-json-schema/core.json b/information-model/original-json-schema/core.json new file mode 100644 index 0000000..a5859e6 --- /dev/null +++ b/information-model/original-json-schema/core.json @@ -0,0 +1,63 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://docs.oasis-open.org/openeox/tbd/schema/core.json", + "title": "EOL and EOS Information", + "description": "A draft schema for representing End-of-Life (EOL) and End-of-Support (EOS) information in OpenEoX.", + "type": "object", + "$defs": { + "schema_t": { + "title": "OpenEoX Core schema", + "description": "Specifies the schema the JSON object must be valid against.", + "type": "string", + "enum": [ + "https://docs.oasis-open.org/openeox/tbd/schema/core.json" + ] + } + }, + "required": ["$schema", "last_updated", "status"], + "properties": { + "$schema": { + "$ref": "#/$defs/schema_t" + }, + "last_updated": { + "title": "Timestamp of last change", + "description": "Contains the RFC 3339 timestamp when the record was last updated.", + "type": "string", + "format": "date-time" + }, + "status": { + "title": "List of status", + "description": "Contains a list of status elements.", + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": { + "title": "Status", + "description": "Contains a single entry in the product lifecycle.", + "type": "object", + "required": ["category", "timestamp"], + "properties": { + "category": { + "title": "Status category", + "description": "Contains the category of the status", + "type": "string", + "enum": ["EndOfLife", "EndOfSupport"] + }, + "timestamp": { + "title": "Timestamp", + "description": "Contains the timestamp at which the product enters the category.", + "type": "string", + "oneOf": [ + { + "format": "date-time" + }, + { + "enum": ["tba"] + } + ] + } + } + } + } + } +} \ No newline at end of file diff --git a/information-model/original-json-schema/shell.json b/information-model/original-json-schema/shell.json new file mode 100644 index 0000000..7b21b89 --- /dev/null +++ b/information-model/original-json-schema/shell.json @@ -0,0 +1,70 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://docs.oasis-open.org/openeox/tbd/schema/shell.json", + "title": "EOL and EOS Information", + "description": "A draft schema for representing End-of-Life (EOL) and End-of-Support (EOS) information in OpenEoX.", + "type": "object", + "$defs": { + "productName_t": { + "title": "Product name", + "description": "Contains the name of the product.", + "type": "string", + "minLength": 1 + }, + "productVersion_t": { + "title": "Product version", + "description": "Contains the version or release of the product.", + "type": "string", + "minLength": 1 + }, + "supplierName_t": { + "title": "Supplier name", + "description": "Contains the name of the supplier or service provider.", + "type": "string", + "minLength": 1 + }, + "schema_t": { + "title": "OpenEoX Shell schema", + "description": "Specifies the schema the JSON object must be valid against.", + "type": "string", + "enum": [ + "https://docs.oasis-open.org/openeox/tbd/schema/shell.json" + ] + } + }, + "required": [ + "$schema", + "statements" + ], + "properties": { + "$schema": { + "$ref": "#/$defs/schema_t" + }, + "statements": { + "title": "List of statements", + "description": "Contains a list of statement elements.", + "type": "array", + "minItems": 1, + "items": { + "title": "Statement", + "description": "Statements contain the single OpenEoX entries.", + "type": "object", + "required": ["core", "productName", "productVersion", "supplierName"], + "properties": { + "core": { + "$ref": "https://docs.oasis-open.org/openeox/tbd/schema/core.json" + }, + "productName": { + "$ref": "#/$defs/productName_t" + }, + "productVersion": { + "$ref": "#/$defs/productVersion_t" + }, + "supplierName": { + "$ref": "#/$defs/supplierName_t" + } + } + } + } + } +} \ No newline at end of file diff --git a/information-model/shell-resolved.jadn b/information-model/shell-resolved.jadn new file mode 100644 index 0000000..0e6e94e --- /dev/null +++ b/information-model/shell-resolved.jadn @@ -0,0 +1,66 @@ +{ + "info": { + "package": "https://docs.oasis-open.org/openeox/tbd/schema/shell", + "title": "EOL and EOS Information", + "description": "A draft schema for representing End-of-Life (EOL) and End-of-Support (EOS) information in OpenEoX.", + "exports": ["Shell"], + "config": { + "$TypeName": "^[$A-Z][-_$A-Za-z0-9]{0,63}$" + } + }, + + "types": [ + ["Shell", "Record", [], "", [ + [1, "schema", "Schema_shell", [], ""], + [2, "statements", "Statement", ["]0"], "Contains a list of statement elements."] + ]], + + ["Statement", "Record", [], "Statements contain the single OpenEoX entries.", [ + [1, "core", "Core", [], ""], + [2, "productName", "ProductName_t", [], ""], + [3, "productVersion", "ProductVersion_t", [], ""], + [4, "supplierName", "SupplierName_t", [], ""] + ]], + + ["Core", "Record", [], "", [ + [1, "schema", "Schema_core", [], ""], + [2, "last_updated", "Timestamp", [], "Timestamp of last change"], + [3, "status", "Status", ["]0"], "Contains a list of status elements."] + ]], + + ["Status", "Record", [], "Contains a single entry in the product lifecycle.", [ + [1, "category", "Category", [], "Contains the category of the status"], + [2, "timestamp", "StatusTimestamp", [], "Contains the timestamp at which the product enters the category."] + ]], + + ["StatusTimestamp", "Choice", [], "", [ + [1, "timestamp", "Timestamp", [], ""], + [2, "timeValues", "TimeValues", [], ""] + ]], + + ["Schema_core", "Enumerated", [], "Specifies the schema the JSON object must be valid against.", [ + [1, "https://docs.oasis-open.org/openeox/tbd/schema/core", ""] + ]], + + ["Schema_shell", "Enumerated", [], "Specifies the schema the JSON object must be valid against.", [ + [1, "https://docs.oasis-open.org/openeox/tbd/schema/shell.json", ""] + ]], + + ["Category", "Enumerated", [], "", [ + [1, "EndOfLife", ""], + [2, "EndOfSupport", ""] + ]], + + ["TimeValues", "Enumerated", [], "", [ + [1, "tba", ""] + ]], + + ["Timestamp", "String", [], "Contains the RFC 3339 timestamp", []], + + ["ProductName_t", "String", [], "Contains the name of the product.", []], + + ["ProductVersion_t", "String", [], "Contains the version or release of the product.", []], + + ["SupplierName_t", "String", [], "Contains the name of the supplier or service provider.", []] + ] +} diff --git a/information-model/shell.jadn b/information-model/shell.jadn new file mode 100644 index 0000000..db5c0a2 --- /dev/null +++ b/information-model/shell.jadn @@ -0,0 +1,38 @@ +{ + "info": { + "package": "https://docs.oasis-open.org/openeox/tbd/schema/shell", + "title": "EOL and EOS Information", + "description": "A draft schema for representing End-of-Life (EOL) and End-of-Support (EOS) information in OpenEoX.", + "namespaces": { + "c": "https://docs.oasis-open.org/openeox/tbd/schema/core" + }, + "exports": ["Shell"], + "config": { + "$TypeName": "^[$A-Z][-_$A-Za-z0-9]{0,63}$" + } + }, + + "types": [ + ["Shell", "Record", [], "", [ + [1, "schema", "Schema_shell", [], ""], + [2, "statements", "Statement", ["]0"], "Contains a list of statement elements."] + ]], + + ["Schema_shell", "Enumerated", [], "Specifies the schema the JSON object must be valid against.", [ + [1, "https://docs.oasis-open.org/openeox/tbd/schema/shell.json", ""] + ]], + + ["Statement", "Record", [], "Statements contain the single OpenEoX entries.", [ + [1, "core", "c:Core", [], ""], + [2, "productName", "ProductName_t", [], ""], + [3, "productVersion", "ProductVersion_t", [], ""], + [4, "supplierName", "SupplierName_t", [], ""] + ]], + + ["ProductName_t", "String", [], "Contains the name of the product.", []], + + ["ProductVersion_t", "String", [], "Contains the version or release of the product.", []], + + ["SupplierName_t", "String", [], "Contains the name of the supplier or service provider.", []] + ] +}