@open-resource-discovery/specification 1.10.0 → 1.11.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 CHANGED
@@ -1,4 +1,5 @@
1
1
  [![REUSE status](https://api.reuse.software/badge/github.com/open-resource-discovery/specification)](https://api.reuse.software/info/github.com/open-resource-discovery/specification)
2
+ <a href="https://www.npmjs.com/package/@open-resource-discovery/specification"><img src="https://img.shields.io/npm/v/@open-resource-discovery/specification" alt="NPM package"></a>
2
3
 
3
4
  # Open Resource Discovery Specification
4
5
 
@@ -47,7 +48,7 @@ For detailed and recent changes, please refer to the [CHANGELOG.md](CHANGELOG.md
47
48
  ## Acknowledgements
48
49
 
49
50
  - The original idea for ORD came from Harsh Jegadeesan and Divya Mary.
50
- - The currently active core-contributors to the spec are: [Simon Heimler](https://github.com/Fannon), [Sebastian Wennemers](https://github.com/swennemers), [Steffen Göbel](https://github.com/steffengoebel), [Ralf Hofmann](https://github.com/ormos), [Kiril Kabakchiev](https://github.com/KirilKabakchiev), [Nikolay Mateev](https://github.com/NickyMateev), [Bibin Thomas](https://github.com/Bibin-T) and others.
51
+ - The currently active core-contributors to the spec are: [Simon Heimler](https://github.com/Fannon), [Sebastian Wennemers](https://github.com/swennemers), [Pavel Kornev](https://github.com/pavelkornev), [Steffen Göbel](https://github.com/steffengoebel), [Ralf Hofmann](https://github.com/ormos), [Kiril Kabakchiev](https://github.com/KirilKabakchiev), [Nikolay Mateev](https://github.com/NickyMateev), [Bibin Thomas](https://github.com/Bibin-T) and others.
51
52
 
52
53
  ## License
53
54
 
@@ -7,7 +7,7 @@
7
7
  */
8
8
  export interface ORDConfiguration {
9
9
  /**
10
- * Optional URL to the ORD document schema (defined as JSON Schema).
10
+ * Optional URL to the ORD Configuration schema (defined as JSON Schema).
11
11
  * If given, this enables code intelligence and validation in supported editors (like VSCode) and tools.
12
12
  */
13
13
  $schema?: (string | "https://open-resource-discovery.github.io/specification/spec-v1/interfaces/Configuration.schema.json#") & string;
@@ -35,6 +35,7 @@ export interface ORDV1Support {
35
35
  * For more details how to implement this correctly, please refer to the [ORD configuration endpoint](../index.md#ord-configuration-endpoint) section and the [considerations on the granularity of ORD documents](../index.md#considerations-on-the-granularity-of-ord-documents).
36
36
  */
37
37
  documents?: ORDV1DocumentDescription[];
38
+ capabilities?: ORDV1Capabilities;
38
39
  }
39
40
  /**
40
41
  * Describes an [ORD Document](../index.md#ord-document) that is available for pull transport consumption.
@@ -102,3 +103,13 @@ export interface AccessStrategy {
102
103
  */
103
104
  customDescription?: string;
104
105
  }
106
+ /**
107
+ * List of capabilities that are supported by the ORD provider.
108
+ */
109
+ export interface ORDV1Capabilities {
110
+ /**
111
+ * Whether the ORD provider supports the optional [select parameter](../index.md#select-parameter) for retrieving the ORD config and ORD documents.
112
+ */
113
+ selector?: boolean;
114
+ [k: string]: any | undefined;
115
+ }
@@ -17,7 +17,7 @@ export interface ORDDocument {
17
17
  /**
18
18
  * Version of the Open Resource Discovery specification that is used to describe this document.
19
19
  */
20
- openResourceDiscovery: "1.0" | "1.1" | "1.2" | "1.3" | "1.4" | "1.5" | "1.6" | "1.7" | "1.8" | "1.9" | "1.10";
20
+ openResourceDiscovery: "1.0" | "1.1" | "1.2" | "1.3" | "1.4" | "1.5" | "1.6" | "1.7" | "1.8" | "1.9" | "1.10" | "1.11";
21
21
  /**
22
22
  * Optional description of the ORD document itself.
23
23
  * Please note that this information is NOT further processed or considered by an ORD aggregator.
@@ -35,7 +35,7 @@ export interface ORDDocument {
35
35
  * The policy level can be defined on ORD Document level, but also be overwritten on an individual package or resource level.
36
36
  *
37
37
  */
38
- policyLevel?: "none" | "sap:base:v1" | "sap:core:v1" | "sap:dp:v1" | "custom";
38
+ policyLevel?: (string | "none" | "sap:base:v1" | "sap:core:v1" | "sap:dp:v1" | "custom") & string;
39
39
  /**
40
40
  * If the fixed `policyLevel` values need to be extended, an arbitrary `customPolicyLevel` can be provided.
41
41
  * The policy level is inherited from packages to resources they contain, but can be overwritten at resource level.
@@ -283,9 +283,11 @@ export interface APIResource {
283
283
  */
284
284
  ordId: string;
285
285
  /**
286
- * Local ID, as known by the described system.
286
+ * The locally unique ID under which this resource can be looked up / resolved in the described system itself.
287
+ * Unlike the ORD ID it's not globally unique, but it may be useful to document the original ID / technical name.
287
288
  *
288
- * This can be the `<resourceName>` fragment in the ORD ID. In this case, make sure it fits the length limits of the ORD ID. It might also be different if e.g. localIds have incompatible charset restrictions.
289
+ * It MAY also be used as the `<resourceName>` fragment in the ORD ID, IF it can fulfill the charset and length limitations within the ORD ID.
290
+ * But since this is not always possible, no assumptions MUST be made about the local ID being the same as the `<resourceName>` fragment in the ORD ID.
289
291
  */
290
292
  localId?: string;
291
293
  /**
@@ -365,7 +367,7 @@ export interface APIResource {
365
367
  */
366
368
  defaultConsumptionBundle?: string;
367
369
  /**
368
- * List of products this resource is a part of.
370
+ * List of products the resources of the package are a part of.
369
371
  *
370
372
  * MUST be a valid reference to a [Product](#product) ORD ID.
371
373
  *
@@ -496,7 +498,7 @@ export interface APIResource {
496
498
  /**
497
499
  * API Protocol including the protocol version if applicable
498
500
  */
499
- apiProtocol: "odata-v2" | "odata-v4" | "rest" | "graphql" | "delta-sharing" | "soap-inbound" | "soap-outbound" | "websocket" | "sap-rfc" | "sap-sql-api-v1" | "sap-ina-api-v1";
501
+ apiProtocol: (string | "odata-v2" | "odata-v4" | "rest" | "graphql" | "delta-sharing" | "soap-inbound" | "soap-outbound" | "websocket" | "sap-rfc" | "sap-sql-api-v1" | "sap-ina-api-v1") & string;
500
502
  /**
501
503
  * List of available machine-readable definitions, which describe the resource or capability in detail.
502
504
  *
@@ -513,7 +515,7 @@ export interface APIResource {
513
515
  *
514
516
  * All APIs that share the same implementation standard MAY be treated the same or similar by a consumer client.
515
517
  */
516
- implementationStandard?: "sap:ord-document-api:v1" | "cff:open-service-broker:v2" | "sap:csn-exposure:v1" | "sap:ape-api:v1" | "sap:cdi-api:v1" | "sap:delta-sharing:v1" | "sap:hana-cloud-sql:v1" | "sap.dp:data-subscription-api:v1" | "custom";
518
+ implementationStandard?: (string | "sap:ord-document-api:v1" | "cff:open-service-broker:v2" | "sap:csn-exposure:v1" | "sap:ape-api:v1" | "sap:cdi-api:v1" | "sap:delta-sharing:v1" | "sap:hana-cloud-sql:v1" | "sap.dp:data-subscription-api:v1" | "custom") & string;
517
519
  /**
518
520
  * If the fixed `implementationStandard` values need to be extended, an arbitrary `customImplementationStandard` can be provided.
519
521
  *
@@ -553,12 +555,20 @@ export interface APIResource {
553
555
  *
554
556
  * If no array is defined, it is assumed that this information is not provided.
555
557
  */
556
- supportedUseCases?: ("data-federation" | "snapshot" | "incremental" | "streaming")[];
558
+ supportedUseCases?: ((string | "data-federation" | "snapshot" | "incremental" | "streaming") & string)[];
557
559
  usage?: Usage;
558
560
  /**
559
561
  * Describes mappings between the API Models of the described resource to the underlying, conceptual entity types.
560
562
  */
561
563
  entityTypeMappings?: EntityTypeMapping[];
564
+ /**
565
+ * Optional list of [entity types](#entity-type) that are exposed by the resource.
566
+ *
567
+ * This replaces `entityTypeMappings`. If both is given, the `exposedEntityTypes` wins.
568
+ *
569
+ * MUST be a valid reference to an [EntityType](#entity-type) ORD ID.
570
+ */
571
+ exposedEntityTypes?: ExposedEntityType[];
562
572
  /**
563
573
  * Links with semantic meaning that are specific to API Resources.
564
574
  */
@@ -608,7 +618,7 @@ export interface APIResource {
608
618
  * The policy level can be defined on ORD Document level, but also be overwritten on an individual package or resource level.
609
619
  *
610
620
  */
611
- policyLevel?: "none" | "sap:base:v1" | "sap:core:v1" | "sap:dp:v1" | "custom";
621
+ policyLevel?: (string | "none" | "sap:base:v1" | "sap:core:v1" | "sap:dp:v1" | "custom") & string;
612
622
  /**
613
623
  * If the fixed `policyLevel` values need to be extended, an arbitrary `customPolicyLevel` can be provided.
614
624
  * The policy level is inherited from packages to resources they contain, but can be overwritten at resource level.
@@ -701,7 +711,7 @@ export interface APIResourceDefinition {
701
711
  * Type of the API Resource Definition
702
712
  * If "custom" is chosen, a customType MUST be provided
703
713
  */
704
- type: "openapi-v2" | "openapi-v3" | "raml-v1" | "edmx" | "csdl-json" | "graphql-sdl" | "wsdl-v1" | "wsdl-v2" | "sap-rfc-metadata-v1" | "sap-sql-api-definition-v1" | "sap-csn-interop-effective-v1" | "custom";
714
+ type: (string | "openapi-v2" | "openapi-v3" | "raml-v1" | "edmx" | "csdl-json" | "graphql-sdl" | "wsdl-v1" | "wsdl-v2" | "sap-rfc-metadata-v1" | "sap-sql-api-definition-v1" | "sap-csn-interop-effective-v1" | "custom") & string;
705
715
  /**
706
716
  * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided.
707
717
  *
@@ -747,7 +757,7 @@ export interface AccessStrategy {
747
757
  /**
748
758
  * Defines the authentication/authorization strategy through which the referenced `resourceDefinitions` are accessible.
749
759
  */
750
- type: "open" | "sap:oauth-client-credentials:v1" | "sap:cmp-mtls:v1" | "sap.businesshub:basic-auth:v1" | "custom";
760
+ type: (string | "open" | "sap:oauth-client-credentials:v1" | "sap:cmp-mtls:v1" | "sap.businesshub:basic-auth:v1" | "custom") & string;
751
761
  /**
752
762
  * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided.
753
763
  *
@@ -788,7 +798,7 @@ export interface AccessStrategy {
788
798
  * To indicate this, the service needs to be implemented and described in ORD with `implementationStandard` set to `sap:csn-exposure:v1`).
789
799
  *
790
800
  * ODM 2.0 relies on the entity type mappings and uses the the mapping to express the relationship of an API to the
791
- * corresponding ODM entity. ORD consumers like SAP Business Accelerator Hub consume the mapping to make the relationships navigatable for customers.
801
+ * corresponding ODM entity. ORD consumers like SAP Business Accelerator Hub consume the mapping to make the relationships navigate-able for customers.
792
802
  */
793
803
  export interface EntityTypeMapping {
794
804
  /**
@@ -879,6 +889,17 @@ export interface EntityTypeTargetORDID {
879
889
  export interface EntityTypeTargetCorrelationID {
880
890
  correlationId: string;
881
891
  }
892
+ /**
893
+ * Defines which Entity Type is exposed through (via its ORD ID).
894
+ */
895
+ export interface ExposedEntityType {
896
+ /**
897
+ * The ORD ID is a stable, globally unique ID for ORD resources or taxonomy.
898
+ *
899
+ * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type.
900
+ */
901
+ ordId: string;
902
+ }
882
903
  /**
883
904
  * Links with specific semantic meaning that are related to API or event resources.
884
905
  *
@@ -888,7 +909,7 @@ export interface APIAndEventResourceLink {
888
909
  /**
889
910
  * See also: [WADG0001 WebAPI type extension](https://webapi-discovery.github.io/rfcs/rfc0001.html#webapiactions)
890
911
  */
891
- type: "api-documentation" | "authentication" | "client-registration" | "console" | "payment" | "service-level-agreement" | "support" | "custom";
912
+ type: (string | "api-documentation" | "authentication" | "client-registration" | "console" | "payment" | "service-level-agreement" | "support" | "custom") & string;
892
913
  /**
893
914
  * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided.
894
915
  *
@@ -966,9 +987,11 @@ export interface EventResource {
966
987
  */
967
988
  ordId: string;
968
989
  /**
969
- * Local ID, as known by the described system.
990
+ * The locally unique ID under which this resource can be looked up / resolved in the described system itself.
991
+ * Unlike the ORD ID it's not globally unique, but it may be useful to document the original ID / technical name.
970
992
  *
971
- * This can be the `<resourceName>` fragment in the ORD ID. In this case, make sure it fits the length limits of the ORD ID. It might also be different if e.g. localIds have incompatible charset restrictions.
993
+ * It MAY also be used as the `<resourceName>` fragment in the ORD ID, IF it can fulfill the charset and length limitations within the ORD ID.
994
+ * But since this is not always possible, no assumptions MUST be made about the local ID being the same as the `<resourceName>` fragment in the ORD ID.
972
995
  */
973
996
  localId?: string;
974
997
  /**
@@ -1048,7 +1071,7 @@ export interface EventResource {
1048
1071
  */
1049
1072
  defaultConsumptionBundle?: string;
1050
1073
  /**
1051
- * List of products this resource is a part of.
1074
+ * List of products the resources of the package are a part of.
1052
1075
  *
1053
1076
  * MUST be a valid reference to a [Product](#product) ORD ID.
1054
1077
  *
@@ -1166,7 +1189,7 @@ export interface EventResource {
1166
1189
  *
1167
1190
  * As of now, only custom implementation standards are supported.
1168
1191
  */
1169
- implementationStandard?: "custom";
1192
+ implementationStandard?: (string | "custom") & string;
1170
1193
  /**
1171
1194
  * If the fixed `implementationStandard` values need to be extended, an arbitrary `customImplementationStandard` can be provided.
1172
1195
  *
@@ -1200,6 +1223,14 @@ export interface EventResource {
1200
1223
  * Describes mappings between the API Models of the described resource to the underlying, conceptual entity types.
1201
1224
  */
1202
1225
  entityTypeMappings?: EntityTypeMapping[];
1226
+ /**
1227
+ * Optional list of [entity types](#entity-type) that are exposed by the resource.
1228
+ *
1229
+ * This replaces `entityTypeMappings`. If both is given, the `exposedEntityTypes` wins.
1230
+ *
1231
+ * MUST be a valid reference to an [EntityType](#entity-type) ORD ID.
1232
+ */
1233
+ exposedEntityTypes?: ExposedEntityType[];
1203
1234
  /**
1204
1235
  * Links with semantic meaning that are specific to event resources.
1205
1236
  *
@@ -1249,7 +1280,7 @@ export interface EventResource {
1249
1280
  * The policy level can be defined on ORD Document level, but also be overwritten on an individual package or resource level.
1250
1281
  *
1251
1282
  */
1252
- policyLevel?: "none" | "sap:base:v1" | "sap:core:v1" | "sap:dp:v1" | "custom";
1283
+ policyLevel?: (string | "none" | "sap:base:v1" | "sap:core:v1" | "sap:dp:v1" | "custom") & string;
1253
1284
  /**
1254
1285
  * If the fixed `policyLevel` values need to be extended, an arbitrary `customPolicyLevel` can be provided.
1255
1286
  * The policy level is inherited from packages to resources they contain, but can be overwritten at resource level.
@@ -1285,7 +1316,7 @@ export interface EventResourceDefinition {
1285
1316
  /**
1286
1317
  * Type of the event resource definition
1287
1318
  */
1288
- type: "asyncapi-v2" | "sap-csn-interop-effective-v1" | "custom";
1319
+ type: (string | "asyncapi-v2" | "sap-csn-interop-effective-v1" | "custom") & string;
1289
1320
  /**
1290
1321
  * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided.
1291
1322
  *
@@ -1325,10 +1356,10 @@ export interface EventResourceDefinition {
1325
1356
  accessStrategies?: [AccessStrategy, ...AccessStrategy[]];
1326
1357
  }
1327
1358
  /**
1328
- * An [**Entity Type**](../../details/articles/grouping-and-bundling#entity-type) describes either a business concept / term or an underlying conceptual model.
1359
+ * An [**Entity Type**](../concepts/grouping-and-bundling#entity-type) describes either a business concept / term or an underlying conceptual model.
1329
1360
  * The same entity type can be exposed through one or multiple API and events resources.
1330
1361
  *
1331
- * To learn more about the concept, see [Entity Type](../../details/articles/grouping-and-bundling#entity-type).
1362
+ * To learn more about the concept, see [Entity Type](../concepts/grouping-and-bundling#entity-type).
1332
1363
  */
1333
1364
  export interface EntityType {
1334
1365
  /**
@@ -1338,9 +1369,11 @@ export interface EntityType {
1338
1369
  */
1339
1370
  ordId: string;
1340
1371
  /**
1341
- * Local ID, as known by the described system.
1372
+ * The locally unique ID under which this resource can be looked up / resolved in the described system itself.
1373
+ * Unlike the ORD ID it's not globally unique, but it may be useful to document the original ID / technical name.
1342
1374
  *
1343
- * This can be the `<resourceName>` fragment in the ORD ID. In this case, make sure it fits the length limits of the ORD ID. It might also be different if e.g. localIds have incompatible charset restrictions.
1375
+ * It MAY also be used as the `<resourceName>` fragment in the ORD ID, IF it can fulfill the charset and length limitations within the ORD ID.
1376
+ * But since this is not always possible, no assumptions MUST be made about the local ID being the same as the `<resourceName>` fragment in the ORD ID.
1344
1377
  */
1345
1378
  localId: string;
1346
1379
  /**
@@ -1395,7 +1428,7 @@ export interface EntityType {
1395
1428
  */
1396
1429
  partOfGroups?: string[];
1397
1430
  /**
1398
- * List of products this resource is a part of.
1431
+ * List of products the resources of the package are a part of.
1399
1432
  *
1400
1433
  * MUST be a valid reference to a [Product](#product) ORD ID.
1401
1434
  *
@@ -1480,7 +1513,7 @@ export interface EntityType {
1480
1513
  *
1481
1514
  * In Domain-Driven Design, there is a concept of entities and aggregates.
1482
1515
  * There are root entities which may contain further sub entities by composition.
1483
- * The complete package is then called an aggregate, which gets its name and identity from the root entity.
1516
+ * The complete "package" is then called an aggregate, which gets its name and identity from the root entity.
1484
1517
  * An aggregate is a cluster of domain objects that can be treated as a single unit.
1485
1518
  * The root is the entity that is referenced from outside the aggregate. There must be only one root per aggregate.
1486
1519
  * The root ensures the integrity of the aggregate. A sub entity is any other non-root entity in the aggregate.
@@ -1515,7 +1548,7 @@ export interface EntityType {
1515
1548
  * The policy level can be defined on ORD Document level, but also be overwritten on an individual package or resource level.
1516
1549
  *
1517
1550
  */
1518
- policyLevel?: "none" | "sap:base:v1" | "sap:core:v1" | "sap:dp:v1" | "custom";
1551
+ policyLevel?: (string | "none" | "sap:base:v1" | "sap:core:v1" | "sap:dp:v1" | "custom") & string;
1519
1552
  /**
1520
1553
  * If the fixed `policyLevel` values need to be extended, an arbitrary `customPolicyLevel` can be provided.
1521
1554
  * The policy level is inherited from packages to resources they contain, but can be overwritten at resource level.
@@ -1570,9 +1603,11 @@ export interface Capability {
1570
1603
  */
1571
1604
  ordId: string;
1572
1605
  /**
1573
- * Local ID, as known by the described system.
1606
+ * The locally unique ID under which this resource can be looked up / resolved in the described system itself.
1607
+ * Unlike the ORD ID it's not globally unique, but it may be useful to document the original ID / technical name.
1574
1608
  *
1575
- * This can be the `<resourceName>` fragment in the ORD ID. In this case, make sure it fits the length limits of the ORD ID. It might also be different if e.g. localIds have incompatible charset restrictions.
1609
+ * It MAY also be used as the `<resourceName>` fragment in the ORD ID, IF it can fulfill the charset and length limitations within the ORD ID.
1610
+ * But since this is not always possible, no assumptions MUST be made about the local ID being the same as the `<resourceName>` fragment in the ORD ID.
1576
1611
  */
1577
1612
  localId?: string;
1578
1613
  /**
@@ -1588,7 +1623,7 @@ export interface Capability {
1588
1623
  /**
1589
1624
  * Type of the Capability
1590
1625
  */
1591
- type: "custom" | "sap.mdo:mdi-capability:v1";
1626
+ type: (string | "sap.mdo:mdi-capability:v1" | "custom") & string;
1592
1627
  /**
1593
1628
  * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided.
1594
1629
  *
@@ -1698,7 +1733,6 @@ export interface Capability {
1698
1733
  minSystemVersion?: string;
1699
1734
  /**
1700
1735
  * Optional list of related EntityType Resources.
1701
- *
1702
1736
  * MUST be a valid reference to an [EntityType Resource](#entity-type) ORD ID.
1703
1737
  */
1704
1738
  relatedEntityTypes?: string[];
@@ -1743,7 +1777,7 @@ export interface CapabilityDefinition {
1743
1777
  /**
1744
1778
  * Type of the capability resource definition
1745
1779
  */
1746
- type: "custom" | "sap.mdo:mdi-capability-definition:v1";
1780
+ type: (string | "sap.mdo:mdi-capability-definition:v1" | "custom") & string;
1747
1781
  /**
1748
1782
  * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided.
1749
1783
  *
@@ -1783,9 +1817,9 @@ export interface CapabilityDefinition {
1783
1817
  accessStrategies?: [AccessStrategy, ...AccessStrategy[]];
1784
1818
  }
1785
1819
  /**
1786
- * A [Data Product](../../details/articles/data-product) is a data set exposed for consumption outside the boundaries of the producing application via APIs and described by high quality metadata that can be accessed through the [ORD Aggregator](../../spec-v1/#ord-aggregator).
1820
+ * A [Data Product](../concepts/data-product) is a data set exposed for consumption outside the boundaries of the producing application via APIs and described by high quality metadata that can be accessed through the [ORD Aggregator](../../spec-v1/#ord-aggregator).
1787
1821
  *
1788
- * Please note that this concept is in beta, see [Data Product - Beta Status](../../details/articles/data-product#beta-status).
1822
+ * Please note that this concept is in beta, see [Data Product - Beta Status](../concepts/data-product#beta-status).
1789
1823
  */
1790
1824
  export interface DataProduct {
1791
1825
  /**
@@ -1795,9 +1829,11 @@ export interface DataProduct {
1795
1829
  */
1796
1830
  ordId: string;
1797
1831
  /**
1798
- * Local ID, as known by the described system.
1832
+ * The locally unique ID under which this resource can be looked up / resolved in the described system itself.
1833
+ * Unlike the ORD ID it's not globally unique, but it may be useful to document the original ID / technical name.
1799
1834
  *
1800
- * This can be the `<resourceName>` fragment in the ORD ID. In this case, make sure it fits the length limits of the ORD ID. It might also be different if e.g. localIds have incompatible charset restrictions.
1835
+ * It MAY also be used as the `<resourceName>` fragment in the ORD ID, IF it can fulfill the charset and length limitations within the ORD ID.
1836
+ * But since this is not always possible, no assumptions MUST be made about the local ID being the same as the `<resourceName>` fragment in the ORD ID.
1801
1837
  */
1802
1838
  localId?: string;
1803
1839
  /**
@@ -1851,6 +1887,16 @@ export interface DataProduct {
1851
1887
  * All resources that share the same group ID assignment are effectively grouped together.
1852
1888
  */
1853
1889
  partOfGroups?: string[];
1890
+ /**
1891
+ * List of products this Data Product is a part of or is related to, its e.g. data source systems.
1892
+ *
1893
+ * MUST be a valid reference to a [Product](#product) ORD ID.
1894
+ *
1895
+ * `partOfProducts` that are assigned to a `Package` are inherited to all of the ORD resources it contains.
1896
+ *
1897
+ * @minItems 0
1898
+ */
1899
+ partOfProducts?: string[];
1854
1900
  /**
1855
1901
  * The complete [SemVer](https://semver.org/) version string.
1856
1902
  *
@@ -1954,11 +2000,11 @@ export interface DataProduct {
1954
2000
  */
1955
2001
  type: "primary" | "derived";
1956
2002
  /**
1957
- * Category of the data-set within data product. Based on its definition, a data product is a data set - which can include on the values below.
2003
+ * Category of the data-set within data product. Based on its definition, a data product is a "data set" - which can include on the values below.
1958
2004
  * Based on the type some properties of a data product may become optional/mandatory.
1959
2005
  * Consumers might still do analytics on business object like data products.
1960
2006
  */
1961
- category: "business-object" | "analytical" | "other";
2007
+ category: (string | "business-object" | "analytical" | "other") & string;
1962
2008
  /**
1963
2009
  * Aggregated list of entity types that are at least partially exposed by the data product. Detailed mapping can be found on the output port schema level.
1964
2010
  */
@@ -2037,7 +2083,7 @@ export interface DataProduct {
2037
2083
  * The policy level can be defined on ORD Document level, but also be overwritten on an individual package or resource level.
2038
2084
  *
2039
2085
  */
2040
- policyLevel?: "none" | "sap:base:v1" | "sap:core:v1" | "sap:dp:v1" | "custom";
2086
+ policyLevel?: (string | "none" | "sap:base:v1" | "sap:core:v1" | "sap:dp:v1" | "custom") & string;
2041
2087
  /**
2042
2088
  * If the fixed `policyLevel` values need to be extended, an arbitrary `customPolicyLevel` can be provided.
2043
2089
  * The policy level is inherited from packages to resources they contain, but can be overwritten at resource level.
@@ -2099,7 +2145,7 @@ export interface DataProductOutputPort {
2099
2145
  * If a generic [Link](#link) can also be expressed via Data Product Link, the latter MUST be chosen.
2100
2146
  */
2101
2147
  export interface DataProductLink {
2102
- type: "payment" | "terms-of-use" | "service-level-agreement" | "support" | "custom";
2148
+ type: (string | "payment" | "terms-of-use" | "service-level-agreement" | "support" | "custom") & string;
2103
2149
  /**
2104
2150
  * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided.
2105
2151
  *
@@ -2117,7 +2163,7 @@ export interface DataProductLink {
2117
2163
  url: string;
2118
2164
  }
2119
2165
  /**
2120
- * An [Integration Dependency](../../details/articles/integration-dependency) states that the described system (self) can integrate with external systems (integration target) to achieve an integration purpose.
2166
+ * An [Integration Dependency](../concepts/integration-dependency) states that the described system (self) can integrate with external systems (integration target) to achieve an integration purpose.
2121
2167
  * The purpose could be to enable a certain feature or integration scenario, but it could also be a mandatory prerequisite for the described system to work.
2122
2168
  *
2123
2169
  * The integration dependency includes a list of individual **aspects** that the integration consists of.
@@ -2135,7 +2181,7 @@ export interface DataProductLink {
2135
2181
  * An integration dependency is also not meant to describe a bigger process.
2136
2182
  * Instead it focuses on the technical necessaries to create an integration for one particular purpose.
2137
2183
  *
2138
- * To learn more about the concept, see [Integration Dependency](../../details/articles/integration-dependency).
2184
+ * To learn more about the concept, see [Integration Dependency](../concepts/integration-dependency).
2139
2185
  */
2140
2186
  export interface IntegrationDependency {
2141
2187
  /**
@@ -2145,9 +2191,11 @@ export interface IntegrationDependency {
2145
2191
  */
2146
2192
  ordId: string;
2147
2193
  /**
2148
- * Local ID, as known by the described system.
2194
+ * The locally unique ID under which this resource can be looked up / resolved in the described system itself.
2195
+ * Unlike the ORD ID it's not globally unique, but it may be useful to document the original ID / technical name.
2149
2196
  *
2150
- * This can be the `<resourceName>` fragment in the ORD ID. In this case, make sure it fits the length limits of the ORD ID. It might also be different if e.g. localIds have incompatible charset restrictions.
2197
+ * It MAY also be used as the `<resourceName>` fragment in the ORD ID, IF it can fulfill the charset and length limitations within the ORD ID.
2198
+ * But since this is not always possible, no assumptions MUST be made about the local ID being the same as the `<resourceName>` fragment in the ORD ID.
2151
2199
  */
2152
2200
  localId?: string;
2153
2201
  /**
@@ -2508,7 +2556,7 @@ export interface Product {
2508
2556
  documentationLabels?: DocumentationLabels;
2509
2557
  }
2510
2558
  /**
2511
- * A [**Package**](../../details/articles/grouping-and-bundling#package) organizes a set of related resources together, by publishing and catalog presentation concerns.
2559
+ * A [**Package**](../concepts/grouping-and-bundling#package) organizes a set of related resources together, by publishing and catalog presentation concerns.
2512
2560
  *
2513
2561
  * The Package can also be used to indicate which products or vendors provided the packaged resources.
2514
2562
  * For partner or customer content, the package can indicate this via the `vendor` and `partOfProducts` assignments.
@@ -2521,7 +2569,7 @@ export interface Product {
2521
2569
  * A package does not have a `visibility` property.
2522
2570
  * Whether it is displayed is decided by the fact, whether it contains any visible resources according to the visibility role of the aggregator.
2523
2571
  *
2524
- * To learn more about the concept and further guidance, see [Package](../../details/articles/grouping-and-bundling#package).
2572
+ * To learn more about the concept and further guidance, see [Package](../concepts/grouping-and-bundling#package).
2525
2573
  */
2526
2574
  export interface Package {
2527
2575
  /**
@@ -2531,9 +2579,11 @@ export interface Package {
2531
2579
  */
2532
2580
  ordId: string;
2533
2581
  /**
2534
- * Local ID, as known by the described system.
2582
+ * The locally unique ID under which this resource can be looked up / resolved in the described system itself.
2583
+ * Unlike the ORD ID it's not globally unique, but it may be useful to document the original ID / technical name.
2535
2584
  *
2536
- * This can be the `<resourceName>` fragment in the ORD ID. In this case, make sure it fits the length limits of the ORD ID. It might also be different if e.g. localIds have incompatible charset restrictions.
2585
+ * It MAY also be used as the `<resourceName>` fragment in the ORD ID, IF it can fulfill the charset and length limitations within the ORD ID.
2586
+ * But since this is not always possible, no assumptions MUST be made about the local ID being the same as the `<resourceName>` fragment in the ORD ID.
2537
2587
  */
2538
2588
  localId?: string;
2539
2589
  /**
@@ -2583,7 +2633,7 @@ export interface Package {
2583
2633
  * The policy level can be defined on ORD Document level, but also be overwritten on an individual package or resource level.
2584
2634
  *
2585
2635
  */
2586
- policyLevel?: "none" | "sap:base:v1" | "sap:core:v1" | "sap:dp:v1" | "custom";
2636
+ policyLevel?: (string | "none" | "sap:base:v1" | "sap:core:v1" | "sap:dp:v1" | "custom") & string;
2587
2637
  /**
2588
2638
  * If the fixed `policyLevel` values need to be extended, an arbitrary `customPolicyLevel` can be provided.
2589
2639
  * The policy level is inherited from packages to resources they contain, but can be overwritten at resource level.
@@ -2637,7 +2687,7 @@ export interface Package {
2637
2687
  */
2638
2688
  vendor: string;
2639
2689
  /**
2640
- * List of products this resource is a part of.
2690
+ * List of products the resources of the package are a part of.
2641
2691
  *
2642
2692
  * MUST be a valid reference to a [Product](#product) ORD ID.
2643
2693
  *
@@ -2671,7 +2721,7 @@ export interface Package {
2671
2721
  /**
2672
2722
  * If provided, all resources that are part of this package can only run on the listed runtime.
2673
2723
  *
2674
- * MUST be a valid [System Namespace](../index.md#system-namespace).
2724
+ * MUST be a valid [system namespace](../index.md#system-namespace).
2675
2725
  */
2676
2726
  runtimeRestriction?: string;
2677
2727
  /**
@@ -2690,7 +2740,7 @@ export interface Package {
2690
2740
  * If a generic [Link](#link) can also be expressed via a Package Link, the latter MUST be chosen.
2691
2741
  */
2692
2742
  export interface PackageLink {
2693
- type: "terms-of-service" | "license" | "client-registration" | "payment" | "sandbox" | "service-level-agreement" | "support" | "custom";
2743
+ type: (string | "terms-of-service" | "license" | "client-registration" | "payment" | "sandbox" | "service-level-agreement" | "support" | "custom") & string;
2694
2744
  /**
2695
2745
  * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided.
2696
2746
  *
@@ -2708,10 +2758,10 @@ export interface PackageLink {
2708
2758
  [k: string]: any | undefined;
2709
2759
  }
2710
2760
  /**
2711
- * A [**Consumption Bundle**](../../details/articles/grouping-and-bundling#consumption-bundle) groups APIs and Events together that can be consumed with the credentials and auth mechanism.
2761
+ * A [**Consumption Bundle**](../concepts/grouping-and-bundling#consumption-bundle) groups APIs and Events together that can be consumed with the credentials and auth mechanism.
2712
2762
  * Ideally it also includes instructions and details how to request access and credentials for resources.
2713
2763
  *
2714
- * For more documentation and guidance how to correctly this correctly, see [Consumption Bundle details](../../details/articles/grouping-and-bundling#consumption-bundle).
2764
+ * For more documentation and guidance how to correctly this correctly, see [Consumption Bundle details](../concepts/grouping-and-bundling#consumption-bundle).
2715
2765
  *
2716
2766
  * A consumption bundle SHOULD have at least one association with a resource (0..n). Avoid empty consumption bundles.
2717
2767
  * A consumption bundle MUST NOT contain APIs and Events that are NOT defined in the ORD document(s) returned
@@ -2719,7 +2769,7 @@ export interface PackageLink {
2719
2769
  *
2720
2770
  * Please note that some ORD consumer use cases MAY depend on consumption bundle assignments to work with the resources.
2721
2771
  *
2722
- * To learn more about the concept, see [Consumption Bundle](../../details/articles/grouping-and-bundling#consumption-bundle).
2772
+ * To learn more about the concept, see [Consumption Bundle](../concepts/grouping-and-bundling#consumption-bundle).
2723
2773
  */
2724
2774
  export interface ConsumptionBundle {
2725
2775
  /**
@@ -2729,9 +2779,11 @@ export interface ConsumptionBundle {
2729
2779
  */
2730
2780
  ordId: string;
2731
2781
  /**
2732
- * Local ID, as known by the described system.
2782
+ * The locally unique ID under which this resource can be looked up / resolved in the described system itself.
2783
+ * Unlike the ORD ID it's not globally unique, but it may be useful to document the original ID / technical name.
2733
2784
  *
2734
- * This can be the `<resourceName>` fragment in the ORD ID. In this case, make sure it fits the length limits of the ORD ID. It might also be different if e.g. localIds have incompatible charset restrictions.
2785
+ * It MAY also be used as the `<resourceName>` fragment in the ORD ID, IF it can fulfill the charset and length limitations within the ORD ID.
2786
+ * But since this is not always possible, no assumptions MUST be made about the local ID being the same as the `<resourceName>` fragment in the ORD ID.
2735
2787
  */
2736
2788
  localId?: string;
2737
2789
  /**
@@ -2835,7 +2887,7 @@ export interface CredentialExchangeStrategy {
2835
2887
  /**
2836
2888
  * The type of credential exchange strategy.
2837
2889
  */
2838
- type: "custom";
2890
+ type: (string | "custom") & string;
2839
2891
  /**
2840
2892
  * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided.
2841
2893
  *
@@ -2871,7 +2923,7 @@ export interface CredentialExchangeStrategy {
2871
2923
  * They express a "part of" relationship to the chosen group concept.
2872
2924
  * If an "identity / equals" relationship needs to be expressed, use the `correlationIds` instead.
2873
2925
  *
2874
- * To learn more about the concept, see [Group Concept Documentation](../../details/articles/grouping-and-bundling#Groups).
2926
+ * To learn more about the concept, see [Group Concept Documentation](../concepts/grouping-and-bundling#Groups).
2875
2927
  */
2876
2928
  export interface Group {
2877
2929
  /**
@@ -2908,7 +2960,7 @@ export interface Group {
2908
2960
  *
2909
2961
  * Group Types can be defined centrally (ownership by authority namespace) or decentrally (defined by application / service itself).
2910
2962
  *
2911
- * To learn more about the concept, see [Group Concept Documentation](../../details/articles/grouping-and-bundling#Groups).
2963
+ * To learn more about the concept, see [Group Concept Documentation](../concepts/grouping-and-bundling#Groups).
2912
2964
  */
2913
2965
  export interface GroupType {
2914
2966
  /**
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json.schemastore.org/package",
3
3
  "name": "@open-resource-discovery/specification",
4
- "version": "1.10.0",
4
+ "version": "1.11.0",
5
5
  "description": "Open Resource Discovery (ORD) Specification",
6
6
  "author": "SAP SE",
7
7
  "license": "Apache-2.0",
@@ -26,10 +26,10 @@
26
26
  "deploy": "npm run build && gh-pages -d ./build"
27
27
  },
28
28
  "devDependencies": {
29
- "@docusaurus/core": "3.7.0",
30
- "@docusaurus/preset-classic": "3.7.0",
31
- "@docusaurus/theme-mermaid": "3.7.0",
32
- "@easyops-cn/docusaurus-search-local": "0.49.1",
29
+ "@docusaurus/core": "3.8.0",
30
+ "@docusaurus/preset-classic": "3.8.0",
31
+ "@docusaurus/theme-mermaid": "3.8.0",
32
+ "@easyops-cn/docusaurus-search-local": "0.49.2",
33
33
  "@mdx-js/react": "3.1.0",
34
34
  "clsx": "2.1.1",
35
35
  "prism-react-renderer": "2.4.1",