diff --git a/103705/examples/example8/.gitkeep b/103705/examples/example8/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/103705/examples/example8/csp_records.schema.json b/103705/examples/example8/csp_records.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..6249188921a246e140f25583affb5082e6c481c6 --- /dev/null +++ b/103705/examples/example8/csp_records.schema.json @@ -0,0 +1,44 @@ +{ + "$id": "urn:etsi:li:103705:record-schema-id:v1.5.1", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "CSP Record Schema", + "description": "Defines the valid set of Subscriber Data Records that may appear in a RecordSet (see ETSI TS 103 705 clause 6.2.4)", + "cspSchemaID": "csp.example_8", + "cspName": "csp.example.com", + "dateIssued": "2026-04-29T09:15:01Z", + "version": "1.1.1", + "$defs": { + "record": { + "oneOf": [ + { + "allOf": [ + { + "$ref": "csp_example_types#/$defs/CSPSubscriberRecordsCollectionRecord" + }, + { + "properties": { + "type": { + "const": "csp_example_types#/$defs/CSPSubscriberRecordsCollectionRecord" + } + } + } + ] + }, + { + "allOf": [ + { + "$ref": "csp_example_types#/$defs/CSPSubscriptionRecordsCollectionRecord" + }, + { + "properties": { + "type": { + "const": "csp_example_types#/$defs/CSPSubscriptionRecordsCollectionRecord" + } + } + } + ] + } + ] + } + } +} \ No newline at end of file diff --git a/103705/examples/example8/csp_results.json b/103705/examples/example8/csp_results.json new file mode 100644 index 0000000000000000000000000000000000000000..f9ae7f142ff26f206bc8092c2a2511f41568ae2c --- /dev/null +++ b/103705/examples/example8/csp_results.json @@ -0,0 +1,142 @@ +{ + "recordSetDescription": { + "etsiSchemaId": "urn:etsi:li:103705:response-schema-id:v1.5.1", + "etsiSpecificationVersion": "1.5.1", + "cspName": "csp.example.com", + "cspSchemaId": "csp.example_8", + "cspSchemaVersion": "1.0.0", + "resultSetId": "9a25db0c-d0f3-4ae5-b618-bd1a9a0056c2", + "requestReference": "LDID", + "created": "2026-04-29T09:31:56.000000Z" + }, + "recordSet": [ + { + "id": "1da91ade-f526-4e55-b5da-00000000000001", + "type": "csp_example_types#/$defs/CSPSubscriberRecordsCollectionRecord", + "subscriberInformationRecord": { + "id": "1da91ade-f526-4e55-b5da-0c8178f25001", + "type": "urn:etsi:li:103705:type-schema-id:v1.5.1#/$defs/SubscriberInformationRecord", + "validityPeriod": { + "begin": "2025-12-01T12:00:01.000000Z", + "end": "2026-01-01T17:00:00.000000Z" + }, + "subscriber": { + "person": { + "surname": "Doe", + "givenNames": "John", + "initials": "J", + "sex": "M", + "dateOfBirth": "1999-03-21", + "addresses": [ + { + "street": "streetname", + "houseNumber": "13", + "city": "City name", + "postalCode": "12345", + "typeOfAddress": "residence" + } + ] + } + } + }, + "serviceInformationRecords": [ + { + "id": "3be3fc6b-a2dd-4104-9af1-d6b1f7008003", + "type": "urn:etsi:li:103705:type-schema-id:v1.5.1#/$defs/ServiceInformationRecord", + "validityPeriod": { + "begin": "2025-12-01T12:00:01.000000Z", + "end": "2026-01-01T17:00:00.000000Z" + }, + "typeOfService": "Telephony", + "startDate": "2026-01-01", + "endDate": "2026-02-01", + "serviceIdentifiers": [ + { + "phoneNumber": "441632960124" + }, + { + "iMSI": "99999123456789" + } + ] + } + ] + }, + { + "id": "1da91ade-f526-4e55-b5da-00000000000002", + "type": "csp_example_types#/$defs/CSPSubscriberRecordsCollectionRecord", + "subscriberInformationRecord": { + "id": "2da91ade-f526-4e55-b5da-0c8178f25002", + "type": "urn:etsi:li:103705:type-schema-id:v1.5.1#/$defs/SubscriberInformationRecord", + "validityPeriod": { + "begin": "2025-12-01T12:00:01.000000Z", + "end": "2026-01-01T17:00:00.000000Z" + }, + "subscriber": { + "person": { + "surname": "Doe", + "givenNames": "Jane", + "initials": "J", + "sex": "F", + "dateOfBirth": "1999-07-11", + "addresses": [ + { + "street": "streetname", + "houseNumber": "13", + "city": "City name", + "postalCode": "12345", + "typeOfAddress": "residence" + }, + { + "street": "streetname", + "houseNumber": "13", + "city": "City name", + "postalCode": "12345", + "typeOfAddress": "installation" + } + ] + } + } + }, + "serviceInformationRecords": [ + { + "id": "4be3fc6b-a2dd-4104-9af1-d6b1f7008004", + "type": "urn:etsi:li:103705:type-schema-id:v1.5.1#/$defs/ServiceInformationRecord", + "validityPeriod": { + "begin": "2025-12-01T12:00:01.000000Z", + "end": "2026-01-01T17:00:00.000000Z" + }, + "typeOfService": "Telephony", + "startDate": "2026-01-01", + "endDate": "2026-02-01", + "serviceIdentifiers": [ + { + "phoneNumber": "441632960567" + }, + { + "iMSI": "99999123456001" + } + ] + }, + { + "id": "5be3fc6b-a2dd-4104-9af1-d6b1f7008005", + "type": "urn:etsi:li:103705:type-schema-id:v1.5.1#/$defs/ServiceInformationRecord", + "validityPeriod": { + "begin": "2025-12-01T12:00:01.000000Z", + "end": "2026-01-01T17:00:00.000000Z" + }, + "typeOfService": "DataAccess", + "startDate": "2025-01-01", + "endDate": "2026-12-31", + "serviceIdentifiers": [ + { + "iPv4Address": "203.0.113.0" + }, + { + "iPv6Address": "2001:0db8:0000:0000:0000:0000:0002:0001" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/103705/examples/example8/csp_types.schema.json b/103705/examples/example8/csp_types.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..03f4686e03c09147a855c9972085a44b669a9bd7 --- /dev/null +++ b/103705/examples/example8/csp_types.schema.json @@ -0,0 +1,78 @@ +{ + "$id": "csp_example_types", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "CSP Supplementary Schema", + "description": "JSON schema for CSP defined types (see clause 6.1 and Annex A). Two collection records are defined for collecting subscriber data records using nesting (see Clause 5.5)", + "$defs": { + "CSPSubscriberRecordsCollectionRecord": { + "type": "object", + "title": "Subscriber collection record", + "description": "Nesting record to cluster records related to a single subscriber (see clause 5.5). This record is used to cluster Subscriber Data records when the record set contains records of multiple subscribers.", + "properties": { + "subscriberInformationRecord": { + "$ref": "urn:etsi:li:103705:type-schema-id:v1.5.1#/$defs/SubscriberInformationRecord", + "description": "Information about a natural person or organisation in this CollectionRecord" + }, + "registrationInformationRecords": { + "type": "array", + "items": { + "$ref": "urn:etsi:li:103705:type-schema-id:v1.5.1#/$defs/RegistrationInformationRecord", + "description": "One or more registration information records for the subscriber in this CollectionRecord" + } + }, + "serviceInformationRecords": { + "type": "array", + "items": { + "$ref": "urn:etsi:li:103705:type-schema-id:v1.5.1#/$defs/ServiceInformationRecord", + "description": "One or more service information records for the subscriber in this CollectionRecord" + } + }, + "paymentInformationRecords": { + "type": "array", + "items": { + "$ref": "urn:etsi:li:103705:type-schema-id:v1.5.1#/$defs/PaymentInformationRecord", + "description": "One or more payment information records for the subscriber in this CollectionRecord" + } + }, + "required": [ + "subscriberInformationRecord" + ] + } + }, + "CSPSubscriptionRecordsCollectionRecord": { + "type": "object", + "title": "Subscription collection record", + "description": "Nesting record to cluster records related to a single subscription (see clause 5.5). This record is used to cluster Subscriber Data records when the record set contains records of multiple subscriptions.", + "properties": { + "serviceInformationRecord": { + "$ref": "urn:etsi:li:103705:type-schema-id:v1.5.1#/$defs/ServiceInformationRecord", + "description": "Information about the service for the subscription in this CollectionRecord" + }, + "subscriberInformationRecords": { + "type": "array", + "items": { + "$ref": "urn:etsi:li:103705:type-schema-id:v1.5.1#/$defs/SubscriberInformationRecord", + "description": "One or more subscriber information records for this CollectionRecord" + } + }, + "registrationInformationRecords": { + "type": "array", + "items": { + "$ref": "urn:etsi:li:103705:type-schema-id:v1.5.1#/$defs/RegistrationInformationRecord", + "description": "One or more registration information records for the subscription in this CollectionRecord" + } + }, + "paymentInformationRecords": { + "type": "array", + "items": { + "$ref": "urn:etsi:li:103705:type-schema-id:v1.5.1#/$defs/PaymentInformationRecord", + "description": "Information about the payment for the subscription in this CollectionRecord" + } + }, + "required": [ + "serviceInformationRecord" + ] + } + } + } +} diff --git a/103705/examples/example8/description.txt b/103705/examples/example8/description.txt new file mode 100644 index 0000000000000000000000000000000000000000..b0a4c4997f32229fdda491c60487460b9c1a35a0 --- /dev/null +++ b/103705/examples/example8/description.txt @@ -0,0 +1,15 @@ +This example demonstrates how a CSP can use Nesting of records (see Clause 5.5). The example shows the result of a +LD request with as the target identifier a postalcode and a house number. Since multiple people could be a residence +at this address and have one or more services at the CSP, the resulted Record Set would contain multiple +SubscriberInformationRecords of the different subscribers, and multiple ServiceInformationRecords for the services of +these subscribers. To ensure that that recipient of the Record Set can determine which service belongs to which subscriber, +the CSP uses Nesting (see Clause 5.5). + +In this particular example John Doe and Jane Doe live at the same address. John has a telephony subscription with phone +number +44 1632960124. Jane has a telephony subscription with phone number +44 1632960567, and a data access subscription. + +In the CSP supplementary type schema two Nesting records are defined: +- CSPSubscriberRecordsCollectionRecord - for collecting records belonging to a subscriber +- CSPSubscriptionRecordsCollectionRecord - for collecting records belonging to a subscription + +The CSP record schema for this example only inports the CSPSubscriberRecordsCollectionRecord. \ No newline at end of file diff --git a/103705/schema/etsi_types.schema.json b/103705/schema/etsi_types.schema.json index db7eef13a1a7d13f591d87bf94851e790e406b50..31dd2ff18af15b9d8b55c7d39b370d4027455bfe 100644 --- a/103705/schema/etsi_types.schema.json +++ b/103705/schema/etsi_types.schema.json @@ -7,12 +7,12 @@ "Pointer": { "type": "object", "title": "Pointer", - "description": "Allows one Record in a RecordSet to point to data in another Record in the same Recordset. See clause 5.4 and Annex A.2.2", + "description": "Allows one Record in a RecordSet to point to data in another Record in the same Recordset. See clause 5.4", "properties": { "destination": { "type": "string", "title": "Pointer Destination", - "description": "Identifies the Record in the RecordSet containined the referred-to data (see clause 5.3.2 and A.2.2)" + "description": "Identifies the Record in the RecordSet containing the referred-to data (see clause 5.3.2)" }, "relationship": { "type": "string", diff --git a/testing/json/ts_103705_ex8_json.json b/testing/json/ts_103705_ex8_json.json new file mode 100644 index 0000000000000000000000000000000000000000..52f43e837940f54f0f8656650a9896ce750b7821 --- /dev/null +++ b/testing/json/ts_103705_ex8_json.json @@ -0,0 +1,12 @@ +{ + "coreSchema": "103705/schema/response.schema.json", + "supportingSchemas": [ + "103705/schema/", + "103280/TS_103_280.schema.json", + "103705/examples/example8/csp_records.schema.json", + "103705/examples/example8/csp_types.schema.json" + ], + "instanceDocs": [ + "103705/examples/example8/csp_results.json" + ] +}