diff --git a/README.md b/README.md index b778847..2d2b8b0 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This repository is used for maintaining the SDMX-JSON messages specifications. This includes: -- Normative documentation, samples and tools for the SDMX-JSON data message format. -- Normative documentation and samples for the SDMX-JSON structure message format. -- Prototype for the SDMX-JSON metadata message format. (see develop branch) +- Normative documentation and samples for the SDMX-JSON structure message format +- Normative documentation and samples for the SDMX-JSON data message format +- Normative documentation and samples for the SDMX-JSON metadata message format - [Wiki](https://github.com/sdmx-twg/sdmx-json/wiki) for additional information diff --git a/data-message/README.md b/data-message/README.md index 79a373a..591ccd0 100644 --- a/data-message/README.md +++ b/data-message/README.md @@ -14,8 +14,9 @@ parsing. The format may be used in a wide variety of programming languages and application programs. Testing and development of the format has focused on JavaScript applications running in web browsers. -The SDMX-JSON Data Message format supports the SDMX 2.1 Information Model -and works together with the SDMX 2.1 RESTful Web Services API for data queries. +The current SDMX-JSON Data Message format 2.0.0 supports the SDMX 3.0 Information Model +and works together with the SDMX 3.0 RESTful Web Services API for data queries. + The SDMX-JSON format is streamable from a supporting web service in order to limit the amount of server resources. diff --git a/data-message/TODO.md b/data-message/TODO.md deleted file mode 100644 index f99a117..0000000 --- a/data-message/TODO.md +++ /dev/null @@ -1,5 +0,0 @@ -# TODO - -- Update full example & check comments - -# DONE diff --git a/data-message/docs/0-status.md b/data-message/docs/0-status.md index 3281d4c..7a041e1 100644 --- a/data-message/docs/0-status.md +++ b/data-message/docs/0-status.md @@ -3,7 +3,7 @@ *This section describes the status of this document at the time of its publication. Other documents may supersede this document.* -This is the released SDMX Technical Standard for SDMX-JSON Data Message. +This is the released SDMX Technical Standard for SDMX-JSON Data Message, version 2.0.0. This document has been produced by the SDMX-TWG. The authors of this document are the members of the SDMX-TWG. Different parts of this specification have @@ -11,7 +11,4 @@ different editors. ---- -\null -\vfill - -© SDMX 2014-2019 http://www.sdmx.org/ +© SDMX 2014-2021 http://www.sdmx.org/ diff --git a/data-message/docs/1-sdmx-json-field-guide.md b/data-message/docs/1-sdmx-json-field-guide.md index 812e417..2528adb 100644 --- a/data-message/docs/1-sdmx-json-field-guide.md +++ b/data-message/docs/1-sdmx-json-field-guide.md @@ -1,10 +1,10 @@ -# Introduction to SDMX-JSON Data Message +# Introduction to SDMX-JSON Data Message 2.0.0 Let's first start with a brief introduction of the SDMX information model. In order to make sense of some statistical data, we need to know the concepts associated with them. For example, on its own the figure 1.2953 is pretty meaningless, -but if we know that this is an exchange rate for the US dollar against the euro on +but if we know that this is an exchange rate for the US dollar against the euro on 23 November 2006, it starts making more sense. There are two types of concepts: dimensions and attributes. Dimensions, when combined, @@ -13,7 +13,10 @@ identifying statistical data, but they add useful information (like the unit of or the number of decimals). Dimensions and attributes are known as "components". The measurement of some phenomenon (e.g. the figure 1.2953 mentioned above) is known as an -"observation" in SDMX. Observations are grouped together into a "data set". However, there +"observation" in SDMX. Sometimes, observations can also have several measures, e.g. an +estimated value can be complemented with the value corresponding to the upper confidence +limit and the value corresponding to the lower confidence limit of the esimation. +Observations, when exchanged, are grouped together into a "data set". However, there can also be an intermediate grouping. For example, all exchange rates for the US dollar against the euro can be measured on a daily basis and these measures can then be grouped together, in a so-called "time series". Similarly, you can group a collection of @@ -36,15 +39,14 @@ consuming applications should tolerate the addition of new fields with ease. - The ordering of fields in objects is undefined. The fields may appear in any order and consuming applications should not rely on any specific ordering. It is safe to consider a nulled field and the absence of a field as the same thing. -- Not all fields appear in all contexts. For example response with error messages +- Not all fields appear in all contexts. For example response with error status messages may not contain fields for data, dimensions and attributes. -# Field Guide to SDMX-JSON Data Message Objects +# Field Guide to SDMX-JSON Data Message 2.0.0 Objects (aligned with SDMX 3.0.0) ## message -Message is the top level object and it contains the data as well -as the structural metadata needed to interpret those data. +Message is the top level object and it contains the data as well as the structural metadata needed to interpret those data. * meta - *Object* *optional*. A *[meta](#meta)* object that contains non-standard meta-information and basic technical information about the message, such as when it was prepared and who has sent it. * data - *Object* *optional*. *[Data](#data)* contains the message's “primary data”. @@ -158,8 +160,7 @@ Example: #### contact -*Object*. A collection of contact details. Each object in the collection -may contain the following field: +*Object*. A collection of contact details. Each object in the collection may contain the following field: * id - *String*. Identifier for the resource. * name - *String* *optional*. Human-readable (best-language-match) name of the contact. @@ -198,8 +199,7 @@ Example: ### receiver *Object* *optional*. Information about the party that is receiving the message. -This can be useful if the WS requires authentication. Receiver contains the -same fields as [sender](#sender). +This can be useful if the WS requires authentication. Receiver contains the same fields as [sender](#sender). ### link @@ -209,15 +209,17 @@ See the section on [linking mechanism](#linking-mechanism) for all information o *Object* *optional*. Header contains the message's “primary data”. -* structure - *Object* *optional*. *[Structure](#structure)* contains the information needed to interpret the data available in the message, such as the list of concepts used. +* structures - *Array* *optional*. *Structures* field is an array of *[Structure](#structure)* objects that contain the information needed to interpret the data available in the message, such as the list of concepts used. Since SDMX 3.0.0, SDMX restful web service requests can query data for several structures. Each returned structure is presented separately. Also the underlying data are presented in separate data sets. * dataSets - *Array* *optional*. *DataSets* field is an array of *[dataSet](#dataset)* objects. That's where the data (i.e.: the observations) will be. Example: "data": { - "structure": { - # structure object # - }, + "structures": [ + { + # structure object # + } + ], "dataSets": [ { # dataSet object # @@ -227,19 +229,18 @@ Example: ## structure -*Object* *optional*. Provides the structural metadata necessary to interpret the data -contained in the message. It tells you which are the components (`dimensions` and `attributes`) -used in the message and also describes to which level in the hierarchy (`dataSet`, `series`, -`observations`) these components are attached. +*Object* *optional*. Provides the structural metadata necessary to interpret the data contained in the message. It tells you which are the components (`dimensions`, `measures` and `attributes`) used in the message and also describes to which level in the hierarchy (`dataSet`, `dimensionGroup`, `series`, `observations`) these components are attached. -* links - *Array* *optional*. *Links* field is an array of *[link](#link)* objects. A collection of links to structural metadata or to additional information regarding the structure. **Providing links allowing accessing the underlying SDMX Data Structure Definition, Dataflow and/or Provision Agreements is recommended.** -* dimensions - *Object*. Describes the *[dimensions](#dimensions-attributes)* used in the message as well as the levels in the hierarchy (`dataSet`, `series`, `observations`) to which these `dimensions` are attached. -* attributes - *Object*. Describes the *[attributes](#dimensions-attributes)* used in the message as well as the levels in the hierarchy (`dataSet`, `series`, `observations`) to which these `attributes` are attached. +* links - *Array* *optional*. *Links* field is an array of *[link](#link)* objects. A collection of links to structural metadata or to additional information regarding the structure. **At least the link to the Data Structure Definition, Dataflow or Data Provision Agreement to which the data relates is required.** +* dimensions - *Object*. Describes the *[dimensions](#dimensions-measures-attributes)* used in the message as well as the levels (`dataSet`, `series`, `observations`) at which these `dimensions` are presented. +* measures - *Object* *optional*. Describes the *[measures](#dimensions-measures-attributes)* used in the message. *Measures* are always presented at the `observations` level. For backward-compatibility, the `measures` object can be omitted if there is only one measure with the ID "OBS_VALUE". In this case, the measure values (of an indeterministic type) are written directly into the dataSet. SDMX 3+.0.0 implementations should always use the `measures` object. In case an SDMX 3+.0.0 data structure definition has no measures, the `measures` object must be present but empty. +* attributes - *Object*. Describes the *[attributes](#dimensions-measures-attributes)* used in the message as well as the levels (`dataSet`, `dimensionGroup`, `series`, `observations`) at which these *attributes* are presented. * annotations - *Array* *optional*. *Annotations* field is an array of *[annotation](#annotation)* objects. If appropriate, provides a list of `annotations` that can be referenced by `structure`, `component`, `component value`, `dataSets`, `series` and `observations`. +* dataSets - *Array* *optional*. *dataSets* field is an array of integers. It contains the indexes of the *dataSet* objects in the *dataSets* array of the *data* object, which contain the data for this *structure*. If omitted, then all data included in the message are assumed to be described by the *structure*. Example: - "structure": { + { "links": [ { # link object # @@ -248,6 +249,9 @@ Example: "dimensions": { # dimensions object # }, + "measures": { + # measures object # + }, "attributes": { # attributes object # }, @@ -255,24 +259,22 @@ Example: { # annotation object # } - ] + ], + "dataSets": [0] } ### link See the section on [linking mechanism](#linking-mechanism) for all information on links. -Providing links allowing accessing the underlying SDMX Data Structure Definition, Dataflow -and/or Provision Agreements is recommended. -### dimensions, attributes +### dimensions, measures, attributes -*Object*. Describes the dimensions/attributes used in the message -as well as the levels in the hierarchy (`dataSet`, `series`, `observations`) -to which these dimensions/attributes are attached. +*Object*. Describes the dimensions/measures/attributes used in the message as well as the levels (`dataSet`, `dimensionGroup`, `series`, `observations`) at which these dimensions/measures/attributes are presented. -* dataSet - *Array* *optional*. *DataSet* field is an array of *[component](#component)* objects. Optional array to be provided if components (dimensions or attributes) are presented at the `dataSet` level. It is highly recommended to present all dimensions and attributes at the `dataSet` level for which the message contains only 1 single value. -* series - *Array* *optional*. *Series* field is an array of *[component](#component)* objects. Optional array to be provided if components (dimensions or attributes) are presented at the `series` level. -* observation - *Array* *optional*. *Observation* field is an array of *[component](#component)* objects. Optional array to be provided if components (dimensions or attributes) are presented at the `observation` level. When using the SDMX API, then the dimension(s) specified in the parameter "dimensionAtObservation" would be presented at `observation` level. If "dimensionAtObservation=AllDimensions" then all dimensions, except those with only one value possibly presented at the `dataSet` level, would be presented at `observation` level. +* dataSet - *Array* *optional*. *DataSet* field is an array of *[component](#component)* objects. Optional array to be provided if components (only dimensions or attributes) are presented at the `dataSet` level. It is recommended, when technically feasible, to present all dimensions and attributes at the `dataSet` level for which the message contains only 1 single value, e.g. dimensions with single selections in the query filter and attributes that do not very with any of the dimensions. +* dimensionGroup - *Array* *optional*. *DimensionGroup* field is an array of *[component](#component)* objects. Optional array to be provided if components (only attributes) are presented at the `dimensionGroup` level. +* series - *Array* *optional*. *Series* field is an array of *[component](#component)* objects. Optional array to be provided if components (only dimensions or attributes) are presented at the `series` level. +* observation - *Array* *optional*. *Observation* field is an array of *[component](#component)* objects. Optional array to be provided if components (dimensions, measures or attributes) are presented at the `observation` level. When using the SDMX API, then the dimension(s) specified in the parameter "dimensionAtObservation" would be presented at `observation` level. If "dimensionAtObservation=AllDimensions" then all dimensions, except those with only one value possibly presented at the `dataSet` level, would be presented at `observation` level. Measures must always be presented at observation level. Example: @@ -292,13 +294,25 @@ Example: # component object # } ] - } + }, + "measures": { + "observation": [ + { + # component object # + } + ] + }, "attributes": { "dataSet": [ { # component object # } ], + "dimensionGroup": [ + { + # component object # + } + ], "series": [ { # component object # @@ -313,9 +327,11 @@ Example: #### component -*Object* *optional*. A component represents a `dimension` or an `attribute` used in the message. -It contains basic information about the component (such as its `name` and `id`) -as well as the list of `values` used in the message for this particular component. +*Object* *optional*. A component represents a `dimension`, a `measure` or an `attribute` used in the message. +It contains basic information about the component (such as its `name` and `id`) as well as the list of `values` used in the message for this particular component. +Dimensions must always present their values in the `values` array because the dataSets will only be able to use the corresponding indexes of these values in the `values` array. +Measures should present their values in the `values` array when they are coded. If they are non-coded then the measure values are directly written into the dataSets. +Attributes should present their values in the `values` array at least when they are coded, or if they are presented at dataset, group or series level (in order to avoid repetition). If they are non-coded and presented at observation level then instead of using the component's `values` array, the attribute values can be directly written into the dataSets. Each of the components may contain the following fields: * id - *String*. Identifier for the component. @@ -323,13 +339,15 @@ Each of the components may contain the following fields: * names - *Object* *optional*. Human-readable localised *[names](#names)* for the component. * description - *String* *optional*. Human-readable (best-language-match) description for the component. * descriptions - *Object* *optional*. Human-readable localised descriptions (see *[names](#names)*) for the component. -* keyPosition - *Number*. **This field is mandatory for `dimensions` but not to be supplied for `attributes`.** Indicates the position of the `dimension` in the Data Structure Definition, starting at 0. It needs to be provided also for the special `dimensions` such as Time or Measure dimensions. The information in this field is consistent with the order of `dimensions` in the "key" parameter string (i.e. D.USD.EUR.SP00.A) for data queries in the SDMX API. +* keyPosition - *Number*. **This field is mandatory for `dimensions` but not to be supplied for `measures` or `attributes`.** Indicates the position of the `dimension` in the Data Structure Definition, starting at 0. It needs to be provided also for the special `dimensions` such as Time or Measure dimensions. The information in this field is consistent with the order of `dimensions` in the "key" parameter string (i.e. D.USD.EUR.SP00.A) for data queries in the SDMX API. * roles - *Array* of *String*s *optional*. Defines the component role(s), if any. Roles are represented by the id of a concept defined as [SDMX cross-domain concept](https://sdmx.org/wp-content/uploads/01_sdmx_cog_annex_1_cdc_2009.pdf). Several of the concepts defined as SDMX cross-domain concepts are useful for data visualisation, such as for example, the series title ("TITLE"), the unit of measure ("UNIT_MEASURE"), the number of decimals to be displayed ("DECIMALS"), the country or geographic reference area ("REF_AREA", e.g. when using maps), the period of time to which the measured observation refers ("REF_PERIOD"), the time interval at which observations occur over a given time period ("FREQ"), etc. It is strongly recommended to identify any component that can be useful for data visualisation purposes by using the appropriate SDMX cross-domain concept as role. -* relationship - *Object*. **This field is mandatory for `attributes` but not to be supplied for `dimensions`.** *[Attribute relationship](#attribute-relationship)* describes how the value of this attribute varies with the values of other components. This relationship expresses the attachment level of the attribute as defined in the data structure definition. Depending on the message context (especially the data query) an attribute value can however be attached physically in the message at a different level. +* isMandatory - *Boolean* *optional*. **Only for `measures` and `attributes`.** If `true` then that `measure` or `attribute` is mandatory in the exchange of complete datasets. The default is `false`. +* relationship - *Object*. **This field is mandatory for `attributes` but not to be supplied for `measures` or `dimensions`.** *[Attribute relationship](#attribute-relationship)* describes how the value of this attribute varies with the values of other components. This relationship expresses the attachment level of the attribute as defined in the data structure definition. Depending on the message context (especially the data query) an attribute value can however be attached physically in the message at a different level. +* format - *Object* *optional*. *[Format](#format)* describes the allowed components representation (permitted type and cardinality of the values). It contains essential information to determine the location of the component values and the related necessity of using indexes for referencing. It is only used when the component values are not defined by an enumerated list of identifiable items (codelist). * default - *String* or *Number* *optional*. Defines a default `value` for the component (**valid for `attributes` only!**). If no value is provided in the data part of the message then this value applies. * links - *Array* *optional*. *Links* field is an array of *[link](#link)* objects. If appropriate, a collection of links to additional information regarding the component. * annotations - *Array* *optional*. *[Annotations](#annotation)* is a collection of indices of the corresponding *annotations* for the component. Indices refer back to the array of *annotations* in the structure field. -* values - *Array*. *Values* field is an array of *[component value](#component-value)* objects. Note that `dimensions` and `attributes` presented at `dataSet` level can only have one single component value. +* values - *Array* *optional*. *Values* field is an array of *[component value](#component-value)* objects. Note that `dimensions` and `attributes` presented at `dataSet` level can only have one single component value. ***Values* are mandatory for `dimensions`**, but *optional* for `measures` and `attributes`. Whenever the *values* field is provided, the component values in the dataSets will always contain the corresponding array indexes, otherwise they will contain the values themselves. See the section on [localised text elements](#localised-text-elements) on how the message deals with languages. @@ -339,13 +357,15 @@ Example: "id": "FREQ", "name": "Frequency", "names": { "en": "Frequency", - "fr": "Fréquence" }, + "fr": "Fréquence" }, "description": "The time interval at which observations occur over a given time period.", "descriptions": { "en": "The time interval at which observations occur over a given time period.", - "fr": "L'intervalle de temps avec lequel les observations sont faites sur une période donnée." }, + "fr": "L'intervalle de temps avec lequel les observations sont faites sur une période donnée." }, "keyPosition": 0, "role": [ "FREQ" ], - "default": "A", + "format": { + # format object # + }, "links": [ { # link object # @@ -359,6 +379,17 @@ Example: ] } + { + "id": "OBS_VALUE", + "name": "Observation value", + "names": { "en": "Observation value", + "fr": "Valeur d'observation" }, + "role": [ "PRIMARY" ], + "format": { + # format object # + } + } + { "id": "SOURCE", "name": "Source", @@ -370,6 +401,9 @@ Example: "relationship": { # attribute-relationship object # }, + "format": { + # format object # + }, "default": "MAFF_Agricultural Statistics", "links": [ { @@ -384,19 +418,29 @@ Example: ] } +##### link + +See the section on [linking mechanism](#linking-mechanism) for all information on links. + ##### attribute relationship -*Object*. The attribute's relationship defines the relationship between an attribute and other data structure definition components as defined in the data structure definition. This is also called "attachment level". Depending on the message context (especially the data query) an attribute value can however be attached physically in the message at a different level. +*Object*. The attribute's relationship defines the relationship between an attribute and other data structure definition components as defined in the data structure definition. It provides the original "attachment level", but depending on the message context (especially the data query) an attribute value can however be presented physically in the message at a different level. The attribute relationship serves also to define the scope, meaning to which measures an attribute applies. -* dimensions - *Array* of *String*s *optional*. One or more ID(s) of (a) local dimension(s) in the data structure definition on which the value of this attribute depends. -* none - Empty *Object* *optional*. This means that value of the attribute will not vary with any of the other data structure components. -* primaryMeasure - *String* *optional*. ID of a local primary measure as defined in the data structure definition. This is used to specify that the value of the attribute is dependent upon the observed value. +* dataflow - Empty *Object* *optional*. This means that the value of the attribute **varies** per dataflow. It is the data modeller's responsibility to design or use non-overlapping dataflows that do not have observations in common, otherwise the integrity of dataflow-specific attribute values is not assured by the model, e.g. when querying those data through its DSD. +* dimensions - *Array* of *String*s *optional*. One or more ID(s) of (a) local dimension(s) in the data structure definition on which the value of this attribute **depends**. +* observation - Empty *Object* *optional*. This means that value of the attribute can **vary** with each observation. +* primaryMeasure - *String* *optional*. Deprecated value having the same meaning than the relationship `observation`. For backward-compatibility only. +* measures - *Array* of *String*s *optional*. One or more ID(s) of (a) local measure(s) in the data structure definition to which the values of this attribute **apply**. This is only for informational and presentational purposes. If the `measures` relationship is not present then the attribute values apply to whole observations. -Exactly one of `dimensions`, `none` and `primaryMeasure` is required. +Exactly one of `dataflow`, `dimensions` and (`observation` or `primaryMeasure`) is required. Note that relationships defined in data structure definitions through `attachmentGroups` or a `group` are to be resolved by the server conveniently for the client into above `dimensions`. Examples: + { + "dataflow": {} + } + { "dimensions": [ "FREQ", "CURRENCY" @@ -404,25 +448,104 @@ Examples: } { - "none": {} + "observation": {} + } + + + { + "measures": [ + "MEAS1", "MEAS2" + ] } { - "primaryMeasure": "OBS_VALUE" + "primaryMeasure": "OBS_VALUE" # Deprecated, for backward-compatibility only. } -##### link +##### format + +*Object*. The format object defines the representation for a component. It describes the possible content for component values, which could be text (including XHTML and multi-lingual values), a simple value or multiple values. + +* minOccurs - *Non-negative integer* *optional* **Only for `measures` and `attributes`.** Indicates the minimum number of value that must be reported for the component. If missing than there is no lower limit on its occurrences. If > 1 then the component values will use the `values` property of the component value instead of `id` and `name` or `value`. The default is 1. +* maxOccurs - *Positive integer*/*String* *optional* **Only for `measures` and `attributes`.** Indicates the maximum number of values that can be reported for the component. If set to the string "unbounded" than there is no upper limit on its occurrences. If > 1 then the component values will use the `values` property of the component value instead of `id` and `name` or `value`. The default is 1. +* dataType - *String* *optional*. Describes the type of data format allowed for the representation of the component. Only the following dataTypes are supported: "String", + "Alpha", "AlphaNumeric", "Numeric", "BigInteger", "Integer", "Long", "Short", "Decimal", "Float", "Double", "Boolean", "URI", "Count", "InclusiveValueRange", "ExclusiveValueRange", "Incremental", "ObservationalTimePeriod", "StandardTimePeriod", "BasicTimePeriod", "GregorianTimePeriod", "GregorianYear", "GregorianYearMonth", "GregorianDay", "ReportingTimePeriod", "ReportingYear", "ReportingSemester", "ReportingTrimester", "ReportingQuarter", "ReportingMonth", "ReportingWeek", "ReportingDay", "DateTime", "TimeRange", "Month", "MonthDay", "Day", "Time", "Duration", "GeospatialInformation" and "XHTML". `Dimensions` do not support the type "XHTML". Time `dimensions` (having the id and role "TIME_PERIOD") only support the types "ObservationalTimePeriod", "StandardTimePeriod", "BasicTimePeriod", "GregorianTimePeriod", "GregorianYear", "GregorianYearMonth", "GregorianDay", "ReportingTimePeriod", "ReportingYear", "ReportingSemester", "ReportingTrimester", "ReportingQuarter", "ReportingMonth", "ReportingWeek", "ReportingDay", "DateTime", "TimeRange". The default data type is "String" except for time `dimensions`, which takes "ObservationalTimePeriod" as default. If used then the component values will use instead of `id` and `name`: + - if `minOccurs` and `maxOccurs` are equal to 1: the `value` property, + - otherwise: the `values` property. +* isSequence - *Boolean* *optional*. Indicates whether the values are intended to be ordered, and it may work in combination with the interval, startValue, and endValue attributes or the timeInterval, startTime, and endTime, attributes. If this attribute holds a value of 'true', a start value or time and a numeric or time interval must supplied. If an end value is not given, then the sequence continues indefinitely. +* interval - *Integer* *optional*. Specifies the permitted interval (increment) in a sequence. In order for this to be used, the isSequence attribute must have a value of 'true'. +* startValue - *Number* *optional*. Is used in conjunction with the isSequence and interval attributes (which must be set in order to use this attribute). This attribute is used for a numeric sequence, and indicates the starting point of the sequence. This value is mandatory for a numeric sequence to be expressed. +* endValue - *Number* *optional*. Is used in conjunction with the isSequence and interval attributes (which must be set in order to use this attribute). This attribute is used for a numeric sequence, and indicates that ending point (if any) of the sequence. +* timeInterval - *String* *optional*. Indicates the permitted duration in a time sequence. It complies with the time duration specification of the ISO 8601 standard. In order for this to be used, the isSequence attribute must have a value of 'true'. +* startTime - *String* *optional*. Is used in conjunction with the isSequence and timeInterval attributes (which must be set in order to use this attribute). This attribute is used for a time sequence, and indicates the start time of the sequence. This value is mandatory for a time sequence to be expressed. It must be a valid standard time period (gYear, gYearMonth, date, dateTime and SDMX time periods). +* endTime - *String* *optional*. Is used in conjunction with the isSequence and timeInterval attributes (which must be set in order to use this attribute). This attribute is used for a time sequence, and indicates that ending point (if any) of the sequence. It must be a valid standard time period (gYear, gYearMonth, date, dateTime and SDMX time periods). +* minLength - *Positive integer* *optional*. Specifies the minimum length of the value in characters. +* maxLength - *Positive integer* *optional*. Specifies the maximum length of the value in characters. +* minValue - *Number* *optional*. Is used for inclusive and exclusive ranges, indicating what the lower bound of the range is. If this is used with an inclusive range, a valid value will be greater than or equal to the value specified here. By default, the minValue is assumed to be inclusive. +* maxValue - *Number* *optional*. Is used for inclusive and exclusive ranges, indicating what the upper bound of the range is. If this is used with an inclusive range, a valid value will be less than or equal to the value specified here. By default, the maxValue is assumed to be inclusive. +* decimals - *Positive integer* *optional*. Indicates the number of characters allowed after the decimal separator. +* pattern - *String* *optional*. Holds any standard regular expression. +* isMultiLingual - *Boolean* *optional*. **Only for `measures` and `attributes`.** This indicates for a text format of type "String" or "XHTML", whether the uncoded component value should allow for multiple values in different languages. The default is `false`. If `true`, the component values will use instead of `id` and `name`: + - if `minOccurs` and `maxOccurs` are equal to 1: the `value` property, + - otherwise: the `values` property. +* sentinelValues - *Array* of *Object*s *optional*. When present, the sentinelValues array indicates that sentinel values are defined for the data format. Each *[sentinelValue](#sentinelvalue)* object indicates a reserved value in an otherwise open value domain that holds a specific meaning. For example, a value of -1 can be defined to indicate a non-applicable value. -See the section on [linking mechanism](#linking-mechanism) for all information on links. +Example: + + { + "minOccurs": 2, + "maxOccurs": 3, + "dataType": "String", + "minLength": 4, + "maxLength": 4, + "pattern": "^[A-Za-z][A-Za-z0-9_-]*$", + "isMultilingual": true + } + + { + "minOccurs": 2, + "maxOccurs": 2, + "dataType": "Double", + "isMultilingual": false, + "sentinelValues": [ + { + # sentinel value object # + } + ] + } + +###### sentinelValue + +*Object*. It defines a reserved value (within the value domain of the data format) along with its meaning. + +* value - *Number* or *String* *optional*. The sentinel value (within the value domain of the data format) being described. +* name - *String* *optional*. Human-readable (best-language-match) name (or meaning) of the sentinel value. +* names - *Object* *optional*. Human-readable localised *[names](#names)* (or meanings) of the sentinel value. +* description - *String* *optional*. Human-readable (best-language-match) description for the sentinel value. +* descriptions - *Object* *optional*. Human-readable localised descriptions (see *[names](#names)*) for the sentinel value. + +Example: + + { + "value": "-1", + "name": "Non-response", + "names": { "en": "Non-response", + "fr": "Non-réponse" }, + "description": "Description for non-response.", + "descriptions": { "en": "Description for non-response.", + "fr": "Description de non-réponse." } + } ##### component value *Object* *optional*. A particular value for a component in a message. -* id - *String*. Unique identifier for a component value. -* name - *String* *optional*. Human-readable (best-language-match) name for the component value. -* names - *Object* *optional*. Human-readable localised *[names](#names)* for the component value. +* id - *String*. Unique identifier for a coded component value. +* name - *String* *optional*. Human-readable (best-language-match) name for a coded component value. +* names - *Object* *optional*. Human-readable localised *[names](#names)* for a coded component value. +* value - *String*, *Number*, *Integer*, *Boolean* or localised *[Strings](#names)* *optional*. Only for non-coded unique (non-localised or localised) component values, e.g. for non-coded dimensions. +* values - *Array* *optional* of *String*, *Number*, *Integer*, *Boolean*, localised *[Strings](#names)* and recursive *Array* of such arrays. Only for non-coded multivalued (non-localised or localised) component values. Only nested multi-valued metadata attribute values (according to the nesting defined in the Metadata Structure Definition) can use arrays of arrays. * description - *String* *optional*. Human-readable (best-language-match) description for the component value. The description is typically longer than the text provided for the name field. * descriptions - *Object* *optional*. Human-readable localised descriptions (see *[names](#names)*) for the component value. A descriptions is typically longer than the text provided for the name field. * start, end - *String* *optional*. Start and end are instances of time that define the actual Gregorian calendar period covered by the values for the time dimension. The algorithm for computing start and end fields for any supported reporting period is defined in the SDMX Technical Notes. These fields should be used only when the component value represents one of the values for the time dimension. Values are considered as inclusive both for the start field and the end field. Values must follow the ISO 8601 syntax for combined dates and times, including time zone. These fields are useful for visualisation tools, when selecting the appropriate point in time for the time axis. Statistical data, can be collected, for example, at the beginning, the middle or the end of the period, or can represent the average of observations through the period. Based on this information and using the start and end fields, it is easy to get or calculate the desired point in time to be used for the time axis. @@ -439,10 +562,10 @@ Example: "id": "2010", "name": "2010", "names": { "en": "2010", - "fr": "2010" }, + "fr": "2010" }, "description": "Description for 2010.", "descriptions": { "en": "Description for 2010.", - "fr": "Déscription pour 2010." }, + "fr": "Déscription pour 2010." }, "start": "2010-01-01T00:00Z", "end": "2010-12-31T23:59:59Z", "parent": "T", @@ -455,6 +578,40 @@ Example: "annotations": [ 5, 49 ] } + { + "value": "123.4" + } + + { + "value": "AAA" + } + + { + "value": { "en": "Value", "fr": "Valeur" } + } + + { + "values": [1234, 567.8] + } + + { + "values": ["AAA", "BBB"] + } + + { + "values": [ + { "en": "Value 1", "fr": "Valeur 1" }, + { "en": "Value 2", "fr": "Valeur 2" } + ] + } + + { + "values": [ + ["CONTACT 1 Name 1","CONTACT 1 Name 2"], + ["CONTACT 2 Name 1","CONTACT 2 Name 2"] + ] + } + ###### link See the section on [linking mechanism](#linking-mechanism) for all information on links. @@ -466,6 +623,7 @@ See the section on [linking mechanism](#linking-mechanism) for all information o * id - *String* *optional*. ID provides a non-standard identification of an annotation. It can be used to disambiguate annotations. * title - *String* *optional*. Provides a non-localised title for the annotation. * type - *String* *optional*. Type is used to distinguish between annotations designed to support various uses. The types are not enumerated, and these can be freely specified by the creator of the annotations. The definitions and use of annotation types should be documented by their creator. +* value - *String* *optional*. A non-localised value text of the annotation. * text - *String* *optional*. A human-readable (best-language-match) text of the annotation. * texts - *Object* *optional*. A list of human-readable localised texts (see *[names](#names)*) of the annotation. * links - *Array* *optional*. *Links* field is an array of *[link](#link)* objects. If appropriate, a link to an additional external resource which may contain or supplement the annotation. @@ -477,9 +635,12 @@ Example: { "title": "Sample annotation", "type": "reference", + "value": "123456", "text": "Sample annotation text", - "texts": { "en": "Sample annotation text", - "fr": "Exemple de texte d'annotation" }, + "texts": { + "en": "Sample annotation text", + "fr": "Exemple de texte d'annotation" + }, "id": "74747", "links": [ { @@ -496,36 +657,25 @@ See the section on [linking mechanism](#linking-mechanism) for all information o *Object*. That's where the data (i.e.: the `observations`) will be. -In typical cases, the file will contain only one `dataSet`. -However, in some cases, such as when retrieving, from an SDMX 2.1 web service, -what has changed in the data source since in particular point in time, the web -service might return more than one `dataSet`. +In typical cases, the file will contain only one `dataSet`. However, in some cases, such as when retrieving, from an SDMX 2.1 web service, what has changed in the data source since in particular point in time, the web service might return more than one `dataSet`. Since SDMX 3.0.0, SDMX restful web servic requests can query data for several structures. In this case, the response includes one or more separate data sets per returned structure. -There are between 2 and 3 levels in a `dataSet` object, depending on the way -the data in the message is organized. +Several levels may appear in a `dataSet` object, depending on the way data is organized. +A `dataSet` may contain a flat list of `observations`. In this scenario, we have 2 main levels in the data part of the message: the `dataSet` level and the `observation` level. +A `dataSet` may also organize observations in logical groups called `series`. These groups can represent time series or series by other dimensions (also called cross-sections). In this scenario, we have 3 main levels in the data part of the message: the `dataSet` level, the `series` level and the `observation` level. -A `dataSet` may contain a flat list of `observations`. In this scenario, -we have 2 levels in the data part of the message: -the `dataSet` level and the `observation` level. - -A `dataSet` may also organize observations in logical groups called `series`. -These groups can represent time series or cross-sections. In this scenario, -we have 3 levels in the data part of the message: -the `dataSet` level, the `series` level and the `observation` level. - -`Dimensions` and `attributes` may be specified at any of these 3 levels. - -In case the `dataSet` is a flat list of `observations`, `observations` will be found -directly under a `dataSet` object. In case the `dataSet` represents time series -or cross sections, the `observations` will be found under the `series` elements. +`Dimensions` and `attributes` may be presented at any of these main levels. However, attributes attached to only specific dimensions maybe presented also at an intermediate `dimensionGroup` level inbetween the `dataSet` level and the `series` level. +`Measures` are always presented at the `observation` level. +In case the `dataSet` is a flat list of `observations`, `observations` will be found directly under a `dataSet` object. In case the `dataSet` represents series of time +or series of another dimension, the `observations` will be found under the `series` elements. The `dataSet` properties are: +* structure - *Integer* *optional*. *Structure* contains the index of the *structure* in the *structures* array of the *data* object, which describe the data in this *dataSet*. If omitted, then the data in this *dataSet* are assumed to be described by the first *structure* (default: 0). * action - *String* *optional*. Action provides a list of actions, describing the intention of the data transmission from the sender's side. - `Append` - this is an incremental update for an existing `dataSet` or the provision of new data or documentation (attribute values) formerly absent. If any of the supplied data or metadata is already present, it will not replace these data. - `Replace` - data are to be replaced, and may also include additional data to be appended. - `Delete` - data are to be deleted. - - `Information` (default) - data are being exchanged for informational purposes only, and not meant to update a system. + - `Information` (default) - data are being exchanged for informational purposes only. When used to update a system, the `Append` action is assumed. * reportingBegin - *String* *optional*. The start of the time period covered by the message. * reportingEnd - *String* *optional*. The end of the time period covered by the message. * validFrom - *String* *optional*. The validFrom indicates the inclusive start time indicating the validity of the information in the data. @@ -534,16 +684,17 @@ The `dataSet` properties are: * publicationPeriod - *String* *optional*. The publicationPeriod specifies the period of publication of the data in terms of whatever provisioning agreements might be in force (i.e., "2005-Q1" if that is the time of publication for a `dataSet` published on a quarterly basis). * links - *Array* *optional*. *Links* field is an array of *[link](#link)* objects. If appropriate, a collection of links to additional information regarding the dataSet. * annotations - *Array* *optional*. *[Annotations](#annotation)* is a collection of indices of the corresponding *annotations* for the dataSet. Indices refer back to the array of *annotations* in the structure field. -* attributes - *Array* *optional*. Collection of indices of the corresponding *values* of all attributes presented at the dataSet level. Each value is an index in the `values` array of the respective *component* object within the `structure.attributes.dataSet` array. This is typically the case for `attributes` that always have the same value for all the `observations` available in the `dataSet`. In order to avoid repetition, that value can simply be presented at the `dataSet` level. When an attribute has no value for a specific `dataSet`, then *null* is used instead of the index. +* attributes - *Array* *optional*. *[Attributes](#Attributes)* is a collection of *attribute values or indices of the corresponding values*, depending on the presence of the `values` array in the component definition, of all attributes presented at the `dataSet` level. Indexes correspond to the indexes of the `values` array of the respective *component* object within the `structure.attributes.dataSet` array, and are always *zero* because attributes presented at the `dataSet` level can only have one value. This is typically the case for `attributes` that always have the same value for all the `observations` available in the `dataSet`. In order to avoid repetition, that value can simply be presented at the `dataSet` level. When an attribute has no value for a specific `dataSet`, then *null* is used instead of the value or its index. +* dimensionGroupAttributes - *Object* *optional*. *[DimensionGroupAttributes](#dimensiongroupattributes)* is a collection of *attribute values or indices of the corresponding values*, depending on the presence of the `values` array in the component definition, of all attributes presented at the `dimensionGroup` level. * series - *Object* *optional*. A collection of *[series](#series)* objects, to be used when the `observations` contained in the `dataSet` are presented in logical groups (time series or cross-sections), e.g. when using the SDMX API with the parameter "dimensionAtObservation=TIME_PERIOD" (default option) or with the "dimensionAtObservation" parameter with an ID of any other specific `dimension`. This element must **not** be used in case the `dataSet` presents a flat view of `observations`. -* observations - *Object* *optional*. Collection of *[observations](#observations)* used in case when a `dataSet` is presented as a flat view of `observations`, e.g. when using the SDMX API with the parameter "dimensionAtObservation=AllDimensions". All `dimensions`, except those with only one `value` possibly presented at the `dataSet` level, would be presented at `observation` level. Alternatively, in case the `observations` are to be presented in logical groups (time series or cross-sections), use the *[series](#series)* element instead. +* observations - *Object* *optional*. *[Observations](#observations)* is a collection of *measure and/or attribute values or indices of the corresponding values*, depending on the presence of the `values` array in the component definition, of all measures and of all attributes presented at the `observation` level. It also contains the indexes of annotations applying to observations. This collection is used in case when a `dataSet` is presented as a flat view of `observations`, e.g. when using the SDMX API with the parameter "dimensionAtObservation=AllDimensions". All `dimensions`, except those with only one `value` possibly presented at the `dataSet` level, would be presented at `observation` level. Alternatively, in case the `observations` are to be presented in logical groups (time series or cross-sections), the *[series](#series)* element is to be used instead. -For information on how to handle the indices for `annotations`, `attributes` or -`observations` see the section dedicated to [handling component values](#handling-component-values). +For information on how to handle the indexes for `dimensions`, `measures`, `attributes` and `annotations` see the section dedicated to [handling indexes](#handling-indexes). Examples: { + "structure": 0, "action": "Information", "reportingBegin": "2012-05-04", "reportingEnd": "2012-06-01", @@ -555,13 +706,17 @@ Examples: # links array # ], "annotations": [ 3, 42 ], - "attributes": [ 0, null, 0 ], + "attributes": [ 0, null, 456.7, "This is a string value", {"en": "English Text", "fr": "Texte français"}, [123.4, 456.7], ["A", "B"], [{"en": "English Text 1", "fr": "Texte français 1"}, {"en": "English Text 2", "fr": "Texte français 2"}] ], + "dimensionGroupAttributes": { + # dimensionGroupAttributes object # + }, "series": { # series object # } } { + "structure": 0, "action": "Information", "reportingBegin": "2012-05-04", "reportingEnd": "2012-06-01", @@ -573,7 +728,10 @@ Examples: # links array # ], "annotations": [ 3, 42 ], - "attributes": [ 0, null, 0 ], + "attributes": [ 0, null, 456.7, "This is a string value", {"en": "English Text", "fr": "Texte français"}, [123.4, 456.7], ["A", "B"], [{"en": "English Text 1", "fr": "Texte français 1"}, {"en": "English Text 2", "fr": "Texte français 2"}] ], + "dimensionGroupAttributes": { + # dimensionGroupAttributes object # + }, "observations": { # observations object # } @@ -583,41 +741,225 @@ Examples: See the section on [linking mechanism](#linking-mechanism) for all information on links. + +### dimensionGroupAttributes + +*Object* *optional*. Collection of *values or value indexes* of all attributes presented at the `dimensionGroup` level, in form of JSON *name/value pairs*. +Values are presented if the attribute definition doesn't contain the `values` array. +Indexes of values are presented if the attribute definition does contain the `values` array. + +The `dimensionGroupAttributes` object contains a JSON *name/value pair* for each _partial dimension value combination_ for which a `dimensionGroup` level attribute value exists. + +The *name* in the JSON *name/value pair* represents the unique (partial) dimension value combination to which the dimensionGroup attribute values are attached. "Partial" combination means that DimensionGroup attributes are not attached to all dimensions but only to a subset. This combination is the concatenation of the indexes of the corresponding `values` of the `dimensions`, separated by a colon character (":"), e.g. "::4:0:". Note that dimension values to which the attribute value is attached take the indexes from the `values` array of the respective *component* objects within the `structure.dimensions` object, whereas the other dimensions (which are not part of the partial key) have no value (are left empty). All dimensions have therefore their well-defined position in the *name* combination independently from the level at which dimensions are presentated elsewhere in the message. +In the example "::4:0:", the data has altogether 5 dimensions (including the time dimension), and the related attribute values are attached only to the 3rd and 4th dimensions, for which the dimension value indexes are 4 and 0. The dimension 1, 2 and 5 have no related value and their positions in the combination are left empty. + +The *value* in the JSON *name/value pair* is an array containing for the given `dimensionGroup` combination: +- first: the corresponding values of **all** *attributes* presented in the `structure.attributes.dimensionGroup` array or the indexes of these values, depending on the presence of the `values` array in the component definition, +- and last: the indexes of the values of all corresponding `annotations`. + +Elements for `annotations` are only included if there are corresponding `annotations`. **If `annotations` are present, then all corresponding `attributes` must be included.** Otherwise, if there are no corresponding `annotations`, then beginning from the end of the array, the corresponding `attributes` can be omitted if: +- the `attribute` has no value (e.g. for optional attributes) or +- the `attribute` value corresponds to the default value. + +If an attribute that has to be listed in the array does not have (a) value(s) then *null* is used instead of a value. + +The *name/value pair* is only present if there is at least one corresponding `attribute` or `annotation` value. + +The data type for the array `attribute` elements must be *integer*, *number*, *string*, *object of localised strings* (see: *[here](#names)*), arrays of these 4 types or *null*. Indexes for `attribute` values are of type *integer* and correspond to the indexes in the `values` array of the respective `component` object within the `structure.attributes.dimensionGroup` array. +The data type for the array `annotation` elements is *integer*. +Indexes for `annotation` values correspond to the indexes in the array of `annotations` in the `structure` element. + +For information on how to handle the indexes for `dimensions`, `attributes` and `annotations` see the section dedicated to [handling indexes](#handling-indexes). + +Example: + + /* + For this example, to ease understanding, let's consider a CSV format with horizontal time series (with header row): + + DIM1,DIM2,DIM3,MEAS1,MEAS2,ATTR1_OBS,ATTR2_DIMGROUP,ATTR3_DIMGROUP + DIM1_VALUE_1,DIM2_VALUE_1,DIM3_VALUE_1,10,20,ATTR1_VALUE_1,ATTR2_VALUE_1,ATTR3_VALUE_1 + DIM1_VALUE_1,DIM2_VALUE_1,DIM3_VALUE_2,11,21,ATTR1_VALUE_2,ATTR2_VALUE_2,ATTR3_VALUE_1 + DIM1_VALUE_1,DIM2_VALUE_2,DIM3_VALUE_1,12,22,ATTR1_VALUE_3,ATTR2_VALUE_1,ATTR3_VALUE_1 + DIM1_VALUE_1,DIM2_VALUE_2,DIM3_VALUE_2,13,23,ATTR1_VALUE_4,ATTR2_VALUE_2,ATTR3_VALUE_1 + + Note: + Attribute ATTR1_OBS is attached at observation level and thus depends on all dimensions. + Attribute ATTR2_DIMGROUP is attached to the dimensions DIM1 and DIM3 only. Its values only vary with the values of those dimensions. + Attribute ATTR3_DIMGROUP is attached to the dimension DIM1 only. Its values only vary with the values of this dimension. + + In SDMX-JSON, dimension values are replaced by their indices. Attribute values may be replaced by their indices, which is **not** done in this example: + */ + + "dimensionGroupAttributes": { + "0::": { null, 0 }, + "0::0": { "ATTR2_VALUE_1" }, + "0::1": { "ATTR2_VALUE_2" } + }, + "observations": { + "0:0": [10, 20, "ATTR1_VALUE_1"], + "0:1": [11, 21, "ATTR1_VALUE_2"], + "1:0": [12, 22, "ATTR1_VALUE_3"], + "1:1": [13, 23, "ATTR1_VALUE_4"] + } + + /* + dimensionGroup 1: "0::" corresponds to the 1 index for "DIM1":"DIM1_VALUE_1". All other dimensions are discarded. + The attributes for this dimension group are: "ATTR2_DIMGROUP": null (no correspondance), "ATTR3_DIMGROUP": "ATTR3_VALUE_1" + + dimensionGroup 2: "0::0" corresponds to the 2 indexes for "DIM1":"DIM1_VALUE_1" and "DIM3":"DIM3_VALUE_1". The "DIM2" dimension is discarded. + The attributes for this dimension group are: "ATTR2_DIMGROUP": "ATTR2_VALUE_1", "ATTR3_DIMGROUP": no correspondance and omitted since last array element + + dimensionGroup 2: "0::1" corresponds to the 2 indexes for "DIM1":"DIM1_VALUE_1" and "DIM3":"DIM3_VALUE_2". The "DIM2" dimension is discarded. + The attributes for this dimension group are: "ATTR2_DIMGROUP": "ATTR2_VALUE_2", "ATTR3_DIMGROUP": no correspondance and omitted since last array element + + Observation 1: "0:0" corresponds to the 2 indices for "DIM2":"DIM2_VALUE_1", "DIM3":"DIM3_VALUE_1" (DIM1 is omitted since presented at dataSet level to avoid its repetition for each observation) + The measures for this observation are: + "MEAS1": 10 + "MEAS2": 20 + The attributes for this observation are: + "ATTR1_OBS": "ATTR1_VALUE_1" + Observation 2: "0:0" corresponds to the 2 indices for "DIM2":"DIM2_VALUE_1", "DIM3":"DIM3_VALUE_2" (DIM1 is omitted since presented at dataSet level to avoid its repetition for each observation) + The measures for this observation are: + "MEAS1": 11 + "MEAS2": 21 + The attributes for this observation are: + "ATTR1_OBS": "ATTR1_VALUE_2" + Observation 3: "0:0" corresponds to the 2 indices for "DIM2":"DIM2_VALUE_2", "DIM3":"DIM3_VALUE_1" (DIM1 is omitted since presented at dataSet level to avoid its repetition for each observation) + The measures for this observation are: + "MEAS1": 12 + "MEAS2": 22 + The attributes for this observation are: + "ATTR1_OBS": "ATTR1_VALUE_3" + Observation 4: "0:0" corresponds to the 2 indices for "DIM2":"DIM2_VALUE_2", "DIM3":"DIM3_VALUE_2" (DIM1 is omitted since presented at dataSet level to avoid its repetition for each observation) + The measures for this observation are: + "MEAS1": 13 + "MEAS2": 23 + The attributes for this observation are: + "ATTR1_OBS": "ATTR1_VALUE_4" + */ + + "dimensions": { + "dataSet": [ + { + "id": "DIM1", + "name": "Dimension 1", + "names": { "en": "Dimension 1" }, + "values": [ + { + "id": "DIM1_VALUE_1", + "name": "Dimension 1 - Value 1 with index 0", + "names": { "en": "Dimension 1 - Value 1 with index 0" } + } + ] + } + ], + "series": [], + "observation": [ + { + "id": "DIM2", + "name": "Dimension 2", + "names": { "en": "Dimension 2" }, + "values": [ + { + "id": "DIM2_VALUE_1", + "name": "Dimension 2 - Value 1 with index 0", + "names": { "en": "Dimension 2 - Value 1 with index 0" } + }, + { + "id": "DIM2_VALUE_2", + "name": "Dimension 2 - Value 2 with index 1", + "names": { "en": "Dimension 2 - Value 2 with index 1" } + } + ] + }, + { + "id": "DIM3", + "name": "Dimension 3", + "names": { "en": "Dimension 3" }, + "values": [ + { + "id": "DIM3_VALUE_1", + "name": "Dimension 3 - Value 1 with index 0", + "names": { "en": "Dimension 3 - Value 1 with index 0" } + }, + { + "id": "DIM3_VALUE_2", + "name": "Dimension 3 - Value 2 with index 1", + "names": { "en": "Dimension 3 - Value 2 with index 1" } + } + ] + } + ] + }, + "attributes": { + "dataSet": [], + "dimensionGroup": [ + { + "id": "ATTR2_DIMGROUP", + "name": "Attribute 2", + "names": { "en": "Attribute 2" }, + "format": { + "dataType": "String" + } + }, + { + "id": "ATTR3_DIMGROUP", + "name": "Attribute 3", + "names": { "en": "Attribute 3" }, + "values": [ + { + "id": "ATTR3_VALUE_1", + "name": "Attribute 3 - Value 1 with index 0", + "names": { "en": "Attribute 3 - Value 1 with index 0" } + } + ] + } + ], + "series": [], + "observation": [ + { + "id": "ATTR1_OBS", + "name": "Attribute 1", + "names": { "en": "Attribute 1" }, + "format": { + "dataType": "String" + } + } + ] + } + + Note: + For attributes "ATTR2_DIMGROUP" and "ATTR1_OBS", the values are omitted in the attribute definitions and thus presented directly in the dataSets' `dimensionGroupAttributes` and `observations` (instead of indexes). + ### series -*Object* *optional*. Collection of series, when the `observations` contained in the `dataSet` -are used into logical groups (time series or cross-sections). Each underlying series -is represented as a name/value pair in the `series` object. +*Object* *optional*. Collection of series in form of JSON *name/value* pairs, when the `observations` contained in the `dataSet` are used into logical groups (time series or cross-sections). Each underlying series is represented as a JSON *name/value pair* ("name": "value") in the `series` object. -A series is uniquely identified through the content of the *name* in the name/value pair, -which is the indices of the corresponding `values` of all `dimensions` presented at `series` -level (indices in the `values` array of the respective *component* object within the -*structure.dimensions.series* array) separated by a colon (":"). +The *name* in the JSON *name/value pair* represents the unique series identifier, which is the concatenation of the indexes of the `values` of all `dimensions` presented at `series` level (i.e. indexes of the fields in the `values` array of the respective *component* object within the `structure.dimensions.series` array) separated by a colon character (":"), e.g. "0:0:4:10:2". -The *value* in the name/value pair is an object containing: +The *value* in the JSON *name/value pair* is an object containing: * annotations - *Array* *optional*. *[Annotations](#annotation)* is a collection of indices of the corresponding *annotations* for the series. Indices refer back to the array of `annotations` in the structure field. -* attributes - *Array* *optional*. Collection of indices of the corresponding `values` of all `attributes` presented at the `series` level. Each value is an index in the `values` array of the respective `component` object within the `structure.attributes.series` array. This is typically the case for `attributes` that always have the same value for all the `observations` available in the series. In order to avoid repetition, that value can simply be presented at the `series` level. When an attribute has no value for a specific series, then *null* is used instead of the index. -* observations - *Object* *optional*. Collection of [observations](#observations) used in case when the `observations` are presented in logical groups (time series or cross-sections), e.g. when using the SDMX API with the parameter "dimensionAtObservation=TIME_PERIOD" (default option) or with the "dimensionAtObservation" parameter with an ID of any other specific `dimension`. Only (this) one `dimension` would be presented at `observation` level for each series. +* attributes - *Array* *optional*. *[Attributes](#Attributes)* is a collection of *attribute values or indexes of the corresponding values*, depending on the presence of the `values` array in the component definition, of all `attributes` presented at the `series` level. Indexes correspond to the indexes in the `values` array of the respective `component` object within the `structure.attributes.series` array. This is typically the case for `attributes` that always have the same value for all the `observations` available in the series. In order to avoid repetition, that value can simply be presented at the `series` level. When an attribute has no value for a specific series, then *null* is used instead of the index. +* observations - *Object* *optional*. *[Observations](#observations)* is a collection of *measure and/or attribute values or indices of the corresponding values*, depending on the presence of the `values` array in the component definition, of all measures and of all attributes presented at the `observation` level. It also contains the indexes of annotations applying to observations. The `dimension` specified in the "dimensionAtObservation" parameter of the SDMX API is used to identify the observations of a series. By default that dimension is the time dimension (with ID "TIME_PERIOD"). + +For information on how to handle the indexes for `dimensions`, `measures`, `attributes` and `annotations` see the section dedicated to [handling indexes](#handling-indexes). Example: /* - For this example, to ease understanding, let's consider a CSV format with - horizontal time series (with header row): + For this example, to ease understanding, let's consider a CSV format with horizontal time series (with header row): DIM1,DIM2,Value for 2016,Value for 2017,ATTR1,ATTR2,ANNOT,ATTR3 for 2016,ATTR3 for 2017 - DIM1_VALUE_1,DIM2_VALUE_1,1.5931,1.5925,ATTR1_VALUE_2,ATTR2_VALUE_1,,ATTR3_VALUE_1, - DIM1_VALUE_1,DIM2_VALUE_2,40.3426,40.3000,ATTR1_VALUE_1,,ANNOT_VALUE1,ATTR3_VALUE_1,ATTR3_VALUE_1 + DIM1_VALUE_1,DIM2_VALUE_1,1.5931,1.5925,ATTR1_VALUE_1,"""en:English Text 1;fr:Texte français 1"";""en:English Text 2;fr:Texte français 2""",,ATTR3_VALUE_1, + DIM1_VALUE_1,DIM2_VALUE_2,40.3426,40.3000,ATTR1_VALUE_2,,ANNOT_VALUE1,ATTR3_VALUE_1,ATTR3_VALUE_1 - In SDMX-JSON, using "dimensionAtObservation=TIME_PERIOD" (default) the observations - are presented in a similar way, grouped by time series (with the TIME_PERIOD dimension - at observation level), but dimension and attribute values are replaced by their indices: + In SDMX-JSON, using "dimensionAtObservation=TIME_PERIOD" (default) the observations are presented in a similar way, grouped by time series (with the TIME_PERIOD dimension at observation level), but dimension values are replaced by their indices. Attribute values may also be replaced by their indexes, which - in this example - is done for ATTR1 and ATTR3 but **not** for ATTR2: */ "series": { "0:0": { - "attributes": [1, 0], + "attributes": [0, [{"en": "English Text 1", "fr": "Texte français 1"}, {"en": "English Text 2", "fr": "Texte français 2"}]], "observations": { "0": [1.5931, 0], "1": [1.5925] @@ -632,9 +974,14 @@ Example: } } + DIM1,DIM2,Value for 2016,Value for 2017,ATTR1,ATTR2,ANNOT,ATTR3 for 2016,ATTR3 for 2017 + DIM1_VALUE_1,DIM2_VALUE_1,1.5931,1.5925,ATTR1_VALUE_1,"""en:English Text 1;fr:Texte français 1"";""en:English Text 2;fr:Texte français 2""",,ATTR3_VALUE_1, + DIM1_VALUE_1,DIM2_VALUE_2,40.3426,40.3000,ATTR1_VALUE_2,,ANNOT_VALUE1,ATTR3_VALUE_1,ATTR3_VALUE_1 + + /* Series 1: "0:0" corresponds to the 2 indices for "DIM1":"DIM1_VALUE_1", "DIM2":"DIM2_VALUE_1" - The attributes for this series are: "ATTR1":"ATTR1_VALUE_2", "ATTR2":"ATTR2_VALUE_1" + The attributes for this series are: "ATTR1":"ATTR1_VALUE_1", "ATTR2":"""en:English Text 1;fr:Texte français 1"";""en:English Text 2;fr:Texte français 2""" This series has 2 observations: Observation 1: "0" corresponds to the index for "TIME_PERIOD":"2016" The value for this observation is: 1.5931 @@ -645,7 +992,7 @@ Example: (because this is the default value) Series 2: "0:1" corresponds to the 2 indices for "DIM1":"DIM1_VALUE_1", "DIM2":"DIM2_VALUE_2" The annotation for this series is: "ANNOT":"ANNOT_VALUE1" - The attributes for this series are: "ATTR1":"ATTR1_VALUE_1" (because this is the default value) + The attributes for this series are: "ATTR1":"ATTR1_VALUE_2" (omitted because this is the default value and since the only and last attribute) This series has 2 observations: Observation 1: "0" corresponds to the index for "TIME_PERIOD":"2016" The value for this observation is: 40.3426 @@ -715,7 +1062,7 @@ Example: "id": "ATTR1", "name": "Attribute 1", "names": { "en": "Attribute 1" }, - "default": "ATTR1_VALUE_1", + "default": "ATTR1_VALUE_2", "values": [ { "id": "ATTR1_VALUE_1", @@ -733,13 +1080,11 @@ Example: "id": "ATTR2", "name": "en": "Attribute 2", "names": { "en": "Attribute 2" }, - "values": [ - { - "id": "ATTR2_VALUE_1", - "name": "Attribute 2 - Value 1 with index 0", - "names": { "en": "Attribute 2 - Value 1 with index 0" } - } - ] + "format": { + "maxOccurs": 2, + "dataType": "String", + "isMultiLingual": true + } } ], "observation": [ @@ -772,73 +1117,72 @@ Example: "id": "ANNOT_VALUE1" } ] + + Note: + For attribute "ATTR2", the values are omitted in the attribute definition and thus presented directly in the dataSets' `observations` (instead of indexes). +### observations -For information on how to handle the indices for `annotations`, `attributes` or -`observations` see the section dedicated to [handling component values](#handling-component-values). +*Object* *optional*. Collection of observations in form of JSON *name/value pairs*. Each underlying observation is represented as a JSON *name/value pair* in the `observations` object. -### observations +The *name* in the JSON *name/value pair* represents the unique observation identifier, which is the concatenation of the indexes of the `values` of all `dimensions` presented at `observation` level (i.e. indexes of the fields in the `values` array of the respective *component* object within the `structure.dimensions.observation` array) separated by a colon character (":"). +The `dimension` specified in the "dimensionAtObservation" parameter of the SDMX API is used to identify the observations. By default that dimension is the time dimension (with ID "TIME_PERIOD"). Thus, there is only one single index in the observation identifier, e.g. "2". +With "dimensionAtObservation=allDimensions", when the data are represented as a flat view of observations, all dimensions with more than 1 value will be presented at observation level. Here, there can be several concatenated indexes in the observation identifier, e.g. "0:0:4:10:2". + +The *value* in the JSON *name/value pair* is an array containing: +- first: the corresponding values of **all** *measures* (as presented in the `structure.measures.observation` array) or the indexes of these values, depending on the presence of the `values` array in the component definition, +- followed by: the corresponding values of **all** *attributes* presented in the `structure.attributes.observation` array or the indexes of these values, depending on the presence of the `values` array in the component definition, +- and last: the indexes of the values of all `annotations` of that observation. -*Object* *optional*. Collection of observations. Each observation is represented as a -name/value pair in the `observations` object. - -An observation is uniquely identified through the content of the *name* in the name/value pair, -which is the indices of the corresponding values of all dimensions presented at observation -level (indices in the `values` array of the respective `component` object within the -`structure.dimensions.observation` array) separated by a colon (":"). -It's one single index for time series and cross-sections representations, but there will be -more than one when the data are represented as a flat view of observations. - -The *value* in the name/value pair is an array containing the observation value (first position), -the indices of the corresponding values of `attributes` presented at `observation` level -(any following position up to the number of `attributes` defined at `observation` level), and -the indices of the corresponding values of `annotations` of that observation (any following -position). Therefore, elements after the observation value are for the `observation` level -`attributes` and for `annotations` of that observation. Elements for `annotations` are only -included if there are `annotations` for that observation. **If `annotations` are present for an -observation, then all `attributes` defined at `observation` level must be included.** Otherwise, -if the observation has no `annotations`, then beginning from the end of the array, `observation` -level `attributes` can be omitted if: +Therefore, the array elements after the `measures` are for the `observation` level `attributes` and for `annotations` of that observation. Elements for `annotations` are only +included if there are `annotations` for that observation. **If `annotations` are present for an observation, then all `attributes` defined at `observation` level must be included.** Otherwise, if the observation has no `annotations`, then beginning from the end of the array, `observation` level `attributes` can be omitted if: - the `attribute` is not set for this observation (possible for optional attributes) or - the `attribute` value for this observation corresponds to the default value. -The data type for observation value is *number* or *string*. The data type for a reported missing -observation value is a *null*. The index for an `attribute` is the corresponding index in the -`values` array of the respective `component` object within the `structure.attributes.series` array. -It is *null*ed for unused optional `attributes` when the attribute index needs to be included. -The index for an `annotation` is the index in the array of `annotations` in the structure field. +The data type for the array `measure` and `attribute` elements is *integer*, *number*, *string*, *object of localised strings* (see: *[here](#names)*), arrays of these 4 types or *null*. The last is for a reported `measure` measure value or for unused optional `attributes` when the attribute position in the array needs to be filled. +Indexes for `measure` values are of type *integer* and correspond to the indexes in the `values` array of the respective `component` object within the `structure.measures.observation` array. +Indexes for `attribute` values are of type *integer* and correspond to the indexes in the `values` array of the respective `component` object within the `structure.attributes.observation` array. +The data type for the array `annotation` elements is *integer*. +Indexes for `annotation` values correspond to the indexes in the array of `annotations` in the `structure` element. + +For information on how to handle the indexes for `dimensions`, `measures`, `attributes` and `annotations` see the section dedicated to [handling indexes](#handling-indexes). Example: /* - For this example, to ease understanding, let's consider data in a - flat CSV format (with header row): + For this example, to ease understanding, let's consider data in a flat CSV format (with header row): - DIM1,DIM2,Observation Value,ATTR1,ATTR2,ANNOT - DIM1_VALUE_1,DIM2_VALUE_1,105.6,ATTR1_VALUE_1,,ANNOT_VALUE1 - DIM1_VALUE_1,DIM2_VALUE_2,105.9,ATTR1_VALUE_2,, + DIM1,DIM2,MEAS1,MEAS2,ATTR1,ATTR2,ATTR3,ANNOT + DIM1_VALUE_1,DIM2_VALUE_1,105.6,120.8,ATTR1_VALUE_1;ATTR1_VALUE_2,ATTR2_VALUE_1,,ANNOT_VALUE1 + DIM1_VALUE_1,DIM2_VALUE_2,105.9,120.2,ATTR1_VALUE_1,ATTR2_VALUE_2,, In SDMX-JSON, the observations are presented in a similar flattened way, but dimension and attribute values are replaced by their indices: */ "observations": { - "0:0": [105.6, 0, null, 0], - "0:1": [105.9, 1] + "0:0": [105.6, 120.8, ["ATTR1_VALUE_1","ATTR1_VALUE_2"], 0, null, 0], + "0:1": [105.9, 120.2, ["ATTR1_VALUE_1"], 1] } /* Observation 1: "0:0" corresponds to the 2 indices for "DIM1":"DIM1_VALUE_1", "DIM2":"DIM2_VALUE_1" - The value for this observation is: 105.6 + The measures for this observation are: + 105.6 + 120.8 The attributes for this observation are: - "ATTR1":"ATTR1_VALUE_1" - "ATTR2":"ATTR2_VALUE_1" (because this is the default value) - The annotation for this observation is: "ANNOT":"ANNOT_VALUE1" + "ATTR1": "ATTR1_VALUE_1", "ATTR1_VALUE_2" + "ATTR2": "ATTR2_VALUE_1" (0 is the index of the corresponding element in the attribute's "values" array) + "ATTR2": null (null is used as placeholder before the next array position for the following annotation) + The annotation for this observation is: + "ANNOT": "ANNOT_VALUE1" (0 is the index of the corresponding element in the annotation array) Observation 2: "0:1" corresponds to the 2 indices for "DIM1":"DIM1_VALUE_1", "DIM2":"DIM2_VALUE_2" - The value for this observation is: 105.9 + The measures for this observation are: + 105.9 + 120.2 The attributes for this observation are: "ATTR1":"ATTR1_VALUE_1" - "ATTR2":"ATTR2_VALUE_1" (because this is the default value) + "ATTR2":"ATTR2_VALUE_2" (1 is the index of the corresponding element in the attribute's "values" array) */ "dimensions": { @@ -884,29 +1228,38 @@ Example: "id": "ATTR1", "name": "Attribute 1", "names": { "en": "Attribute 1" }, - "values": [ - { - "id": "ATTR1_VALUE_1", - "name": "Attribute 1 - Value 1 with index 0", - "names": { "en": "Attribute 1 - Value 1 with index 0" } - }, - { - "id": "ATTR1_VALUE_2", - "name": "Attribute 1 - Value 2 with index 1", - "names": { "en": "Attribute 1 - Value 2 with index 1" } - } - ] + "format": { + "dataType": "String", + "maxValue": 2 + } }, { "id": "ATTR2", "name": "Attribute 2", "names": { "en": "Attribute 2" }, - "default": "ATTR2_VALUE_1", "values": [ { "id": "ATTR2_VALUE_1", "name": "Attribute 2 - Value 1 with index 0", "names": { "en": "Attribute 2 - Value 1 with index 0" } + }, + { + "id": "ATTR2_VALUE_2", + "name": "Attribute 2 - Value 2 with index 1", + "names": { "en": "Attribute 2 - Value 2 with index 1" } + } + ] + }, + { + "id": "ATTR3", + "name": "Attribute 3", + "names": { "en": "Attribute 3" }, + "default": "ATTR3_VALUE_1", + "values": [ + { + "id": "ATTR3_VALUE_1", + "name": "Attribute 3 - Value 1 with index 0", + "names": { "en": "Attribute 3 - Value 1 with index 0" } } ] } @@ -921,22 +1274,20 @@ Example: "id": "ANNOT_VALUE1" } ] - -For information on how to handle the indices for `observations` -see the section dedicated to [handling component values](#handling-component-values). + + Note: + For attribute "ATTR1", the values are omitted in the attribute definition and thus presented directly in the dataSets' `observations` (instead of indexes). ## error -*Object* *optional*. Used to provide a error message in addition -to RESTful web services HTTP error status codes. -The following pieces of information are to be provided: +*Object* *optional*. Used to provide status messages in addition to RESTful web services HTTP error status codes. The following pieces of information should be provided: -* code - *Number*. Provides a code number for the error message. Code numbers are defined in the SDMX 2.1 Web Services Guidelines. -* title - *String* *optional*. A short, human-readable (best-language-match) summary of the problem that SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization. -* titles - *Object* *optional*. A list of short, human-readable localised summaries (see *[names](#names)*) of the problem that SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization. -* detail - *String* *optional*. A human-readable (best-language-match) explanation specific to this occurrence of the problem. Like title, this field’s value can be localized. It is fully customizable by the service providers and should provide enough detail to ease understanding the reasons of the error. -* details - *Object* *optional*. A list of human-readable localised explanations (see *[names](#names)*) specific to this occurrence of the problem. Like titles, this field’s value can be localized. It is fully customizable by the service providers and should provide enough detail to ease understanding the reasons of the error. -* links - *Array* *optional*. *Links* field is an array of *[link](#link)* objects. If appropriate, a collection of links to additional external resources for the error. +* code - *Number*. Provides a code number for the status message if appropriate. Standard code numbers are defined in the SDMX 2.1 Web Services Guidelines. +* title - *String* *optional*. A short, human-readable (best-language-match) summary of the situation that SHOULD NOT change from occurrence to occurrence of the status, except for purposes of localization. +* titles - *Object* *optional*. A list of short, human-readable localised summaries (see *[names](#names)*) of the status that SHOULD NOT change from occurrence to occurrence of the status, except for purposes of localization. +* detail - *String* *optional*. A human-readable (best-language-match) explanation specific to this occurrence of the status. Like title, this field’s value can be localized. It is fully customizable by the service providers and should provide enough detail to ease understanding the reasons of the status. +* details - *Object* *optional*. A list of human-readable localised explanations (see *[names](#names)*) specific to this occurrence of the status. Like titles, this field’s value can be localized. It is fully customizable by the service providers and should provide enough detail to ease understanding the reasons of the status. +* links - *Array* *optional*. *Links* field is an array of *[link](#link)* objects. If appropriate, a collection of links to additional external resources for the status message. See the section on [localised text elements](#localised-text-elements) on how the message deals with languages. @@ -946,7 +1297,7 @@ Example: "code": 150, "title": "Invalid number of dimensions in the key parameter", "titles": { "en": "Invalid number of dimensions in the key parameter" - "fr": "Nombre invalide de dimensions dans le paramètre 'key'" } + "fr": "Nombre invalide de dimensions dans le paramètre 'key'" } } # Linking mechanism @@ -955,7 +1306,7 @@ Example: *Object* *optional*. A link to an external resource. -* href - *String*. Absolute or relative URL of the external resource. +* href - *String* or . Absolute or relative URL of the external resource. * rel - *String*. Relationship of the object to the external resource. See semantics below. * urn - *String* *optional*. The urn holds a valid SDMX Registry URN (see SDMX Registry Specification for details). * uri - *String* *optional*. The uri attribute holds a URI that contains a link to additional information about the resource, such as a web page. This uri is not an SDMX resource. @@ -996,7 +1347,7 @@ Examples: Collections of links can be attached to various elements in SDMX-JSON. -Similarly with standards such as HTML5 and Atom, link elements in SDMX-JSON *must* define a *URL* (the `href` attribute) and a *semantic* (the `rel` attribute). This allows clients to follow the links they care about and ignore the ones whose semantic they are not interested in. In addition, links in SDMX-JSON *may* define a `title` (a human-friendly description of the target link) and a `type` (a hint about the type of representation returned by the link). Please refer to the [list of Media Types and Subtypes](http://www.iana.org/assignments/media-types/media-types.xhtml) assigned and listed by the IANA for additional information about expected values for the `type` attribute. +Similarly with standards such as HTML5 and Atom, link elements in SDMX-JSON *must* define a *URL* (the `href` attribute) and a *semantic* (the `rel` attribute). This allows clients to understand the semantics of links, in order to follow those that are of interest to them. In addition, links in SDMX-JSON *may* define a `title` (a human-friendly description of the target link) and a `type` (a hint about the type of representation returned by the link). Please refer to the [list of Media Types and Subtypes](http://www.iana.org/assignments/media-types/media-types.xhtml) assigned and listed by the IANA for additional information about expected values for the `type` attribute. SDMX-JSON offers a list of predefined semantics, but implementers are free to extend it. The list of predefined semantics comes from the list of SDMX artefacts that can be returned by SDMX RESTful web services, semantics defined in [RFC5988](https://tools.ietf.org/rfc/rfc5988.txt) and additional items deemed to be useful in the context of statistical data dissemination. These semantics are: @@ -1006,180 +1357,195 @@ SDMX-JSON offers a list of predefined semantics, but implementers are free to ex The *URL* captured in the `href` attribute can be *absolute* or *relative*. **It is recommended to use absolute URLs in case the SDMX-JSON message is archived.** -# Handling component values +# Handling indexes + +The purpose of using indexes is to avoid the repetition of space-consuming values of measures, attributes, dimensions and annotations. For the first 2 types, whenever their values are provided directly in the `values` array of the component definition itself, then the datasets must only use the corresponding element indexes in those arrays instead of the real values. Dimensions and annotations will always use the indexes. Let's say that the following data content of a message needs to be processed: ```json { - "structure": { - "id": "ECB_EXR_WEB", - "links": [ - { - "href": "https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", - "rel": "dataflow" - } - ], - "dimensions": { - "dataSet": [ - { - "id": "FREQ", - "name": "Frequency", - "names": { "en": "Frequency" }, - "keyPosition": 0, - "values": [ - { - "id": "D", - "name": "Daily", - "names": { "en": "Daily" } - } - ] - }, - { - "id": "CURRENCY_DENOM", - "name": "Currency denominator", - "names": { "en": "Currency denominator" }, - "keyPosition": 2, - "values": [ - { - "id": "EUR", - "name": "Euro", - "names": { "en": "Euro" } - } - ] - }, - { - "id": "EXR_TYPE", - "name": "Exchange rate type", - "names": { "en": "Exchange rate type" }, - "keyPosition": 3, - "values": [ - { - "id": "SP00", - "name": "Spot rate", - "names": { "en": "Spot rate" } - } - ] - }, - { - "id": "EXR_SUFFIX", - "name": "Series variation - EXR context", - "names": { "en": "Series variation - EXR context" }, - "keyPosition": 4, - "values": [ - { - "id": "A", - "name": "Average or standardised measure", - "names": { "en": "Average or standardised measure" } - } - ] - } - ], - "series": [ + "structures": [ + { + "id": "ECB_EXR_WEB", + "links": [ { - "id": "CURRENCY", - "name": "Currency", - "names": { "en": "Currency" }, - "keyPosition": 1, - "values": [ - { - "id": "NZD", - "name": "New Zealand dollar", - "names": { "en": "New Zealand dollar" } - }, { - "id": "RUB", - "name": "Russian rouble", - "names": { "en": "Russian rouble" } - } - ] + "href": "https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", + "rel": "dataflow" } ], - "observation": [ + "dimensions": { + "dataSet": [ + { + "id": "FREQ", + "name": "Frequency", + "names": { "en": "Frequency" }, + "keyPosition": 0, + "values": [ + { + "id": "D", + "name": "Daily", + "names": { "en": "Daily" } + } + ] + }, + { + "id": "CURRENCY_DENOM", + "name": "Currency denominator", + "names": { "en": "Currency denominator" }, + "keyPosition": 2, + "values": [ + { + "id": "EUR", + "name": "Euro", + "names": { "en": "Euro" } + } + ] + }, + { + "id": "EXR_TYPE", + "name": "Exchange rate type", + "names": { "en": "Exchange rate type" }, + "keyPosition": 3, + "values": [ + { + "id": "SP00", + "name": "Spot rate", + "names": { "en": "Spot rate" } + } + ] + }, + { + "id": "EXR_SUFFIX", + "name": "Series variation - EXR context", + "names": { "en": "Series variation - EXR context" }, + "keyPosition": 4, + "values": [ + { + "id": "A", + "name": "Average or standardised measure", + "names": { "en": "Average or standardised measure" } + } + ] + } + ], + "series": [ + { + "id": "CURRENCY", + "name": "Currency", + "names": { "en": "Currency" }, + "keyPosition": 1, + "values": [ + { + "id": "NZD", + "name": "New Zealand dollar", + "names": { "en": "New Zealand dollar" } + }, { + "id": "RUB", + "name": "Russian rouble", + "names": { "en": "Russian rouble" } + } + ] + } + ], + "observation": [ + { + "id": "TIME_PERIOD", + "name": "Time period or range", + "names": { "en": "Time period or range" }, + "values": [ + { + "id": "2013-01-18", + "name": "2013-01-18", + "names": { "en": "2013-01-18" } + }, { + "id": "2013-01-21", + "name": "2013-01-21", + "names": { "en": "2013-01-21" } + } + ] + } + ] + }, + "attributes": { + "dataSet": [], + "series": [ + { + "id": "TITLE", + "name": "Series title", + "names": { "en": "Series title" }, + "values": [ + { + "name": "New Zealand dollar (NZD)", + "names": { "en": "New Zealand dollar (NZD)" } + }, { + "name": "Russian rouble (RUB)", + "name": { "en": "Russian rouble (RUB)" } + } + ] + } + ], + "observation": [ + { + "id": "OBS_STATUS", + "name": "Observation status", + "names": { "en": "Observation status" }, + "values": [ + { + "id": "A", + "name": "Normal value", + "names": { "en": "Normal value" } + } + ] + } + ] + }, + "annotations": [ { - "id": "TIME_PERIOD", - "name": "Time period or range", - "names": { "en": "Time period or range" }, - "values": [ - { - "id": "2013-01-18", - "name": "2013-01-18", - "names": { "en": "2013-01-18" } - }, { - "id": "2013-01-21", - "name": "2013-01-21", - "names": { "en": "2013-01-21" } - } - ] - } - ] - }, - "attributes": { - "dataSet": [], - "series": [ + "title": "Sample series annotation title", + "type": "example", + "text": "Sample series annotation text", + "texts": { "en": "Sample series annotation text" }, + "id": "ABC123456" + }, { - "id": "TITLE", - "name": "Series title", - "names": { "en": "Series title" }, - "values": [ - { - "name": "New Zealand dollar (NZD)", - "names": { "en": "New Zealand dollar (NZD)" } - }, { - "name": "Russian rouble (RUB)", - "name": { "en": "Russian rouble (RUB)" } - } - ] + "title": "Sample observation annotation title", + "type": "example", + "text": "Sample observation annotation text", + "texts": { "en": "Sample observation annotation text" }, + "id": "XYZ98765" } ], - "observation": [ - { - "id": "OBS_STATUS", - "name": "Observation status", - "names": { "en": "Observation status" }, - "values": [ - { - "id": "A", - "name": "Normal value", - "names": { "en": "Normal value" } - } - ] - } - ] - }, - "annotations": [ - { - "title": "Sample series annotation title", - "type": "example", - "text": "Sample series annotation text", - "texts": { "en": "Sample series annotation text" }, - "id": "ABC123456" - }, - { - "title": "Sample observation annotation title", - "type": "example", - "text": "Sample observation annotation text", - "texts": { "en": "Sample observation annotation text" }, - "id": "XYZ98765" - } - ] - }, + "dataSets": [0] + } + ], "dataSets": [ { + "structure": 0, "action": "Information", "series": { - "0": { - "annotations": [0], - "attributes": [0], + "0": { // 0 is the index of the first value of (series-level) CURRENCY dimension: "NZD" + "annotations": [0], // 0 is the index of the first value of annotations: "ABC123456" + "attributes": [0], // 0 is the index of the first value of the (first) (series-level) TITLE attribute: "New Zealand dollar (NZD)" "observations": { - "0": [1.5931, 0], - "1": [1.5925, 0] + "0": [1.5931, 0], // "0" corresponds to the first value of (obs-level) TIME_PERIOD dimension: "2013-01-18" + // 1.5931 is the corresponding observation value + // 0 is the index of the first value of (obs-level) OBS_STATUS attribute: "A" + "1": [1.5925, 0] // "1" corresponds to the second value of (obs-level) TIME_PERIOD dimension: "2013-01-21" + // 1.5925 is the corresponding observation value + // 0 is the index of the first value of (obs-level) OBS_STATUS attribute: "A" } }, - "1": { - "attributes": [1], + "1": { // 1 is the index of the second value of (series-level) CURRENCY dimension: "RUB" + "attributes": [1], // 1 is the index of the second value of the (first) (series-level) TITLE attribute: "Russian rouble (RUB)" "observations": { - "0": [40.3426, 0], - "1": [40.3000, 0, 1] + "0": [40.3426, 0], // "0" corresponds to the first value of (obs-level) TIME_PERIOD dimension: "2013-01-18" + // 40.3426 is the corresponding observation value + // 0 is the index of the first value of (obs-level) OBS_STATUS attribute: "A" + "1": [40.3000, 0, 1] // "1" corresponds to the second value of (obs-level) TIME_PERIOD dimension: "2013-01-21" + // 40.3000 is the corresponding observation value + // 0 is the index of the first value of (obs-level) OBS_STATUS attribute: "A" + // 1 is the index of the second value of annotations: "XYZ98765" (because there is no other obs-level attribute defined) } } } @@ -1208,15 +1574,15 @@ There is one `dataSet` in the message, and it contains two `series`. } ``` -The `structure.dimensions` field tells us that, out of the 6 dimensions, 4 have -the same value for the 2 series and are therefore attached to the `dataSet` level. +The `structure.dimensions` field tells us that, out of the 6 dimensions, 4 have the same value for the 2 series and are therefore attached to the `dataSet` level. We see that, for the first series, we get the value 0: +```json "0": { ... } +``` -From the structure.dimensions.series information, we know that CURRENCY is -the (only) series dimension. +From the structure.dimensions.series information, we know that CURRENCY is the (only) series dimension. ```json "series": [ @@ -1240,16 +1606,15 @@ the (only) series dimension. ] ``` -The value "0" identified previously is the index of the item in the -collection of values for this component. In this case, the dimension -value is therefore "New Zealand dollar". +The value "0" identified previously is the index of the item in the collection of values for this component. In this case, the dimension value is therefore "New Zealand dollar". Now, for the first observation of the first series, we get the value 0: +```json "0": [...], +``` -From the `structure.dimensions.observation` information, we know that -TIME_PERIOD is the (only) dimension at `observation` level. +From the `structure.dimensions.observation` information, we know that TIME_PERIOD is the (only) dimension at `observation` level. ```json "observation": [ @@ -1272,17 +1637,13 @@ TIME_PERIOD is the (only) dimension at `observation` level. ] ``` -The value "0" identified previously is the index of the item in the -collection of values for this component. In this case, the dimension value -is therefore "2013-01-18". +The value "0" identified previously is the index of the item in the collection of values for this component. In this case, the dimension value is therefore "2013-01-18". -Now, for the first (and only) attribute of the first observation of the -first series, we get the value 0 (here the last value in array): +Now, for the first (and only) attribute of the first observation of the first series, we get the value 0 (here the last value in array): "0": [1.5931, 0], -From the `structure.attributes.observation` information, we know that -OBS_STATUS is the (only) attribute at `observation` level. +From the `structure.attributes.observation` information, we know that OBS_STATUS is the (only) attribute at `observation` level. ```json "observation": [ @@ -1301,9 +1662,7 @@ OBS_STATUS is the (only) attribute at `observation` level. ] ``` -The value 0 identified previously is the index of the item in the -collection of values for this component. In this case, the attribute value -is therefore "Normal value". +The value 0 identified previously is the index of the item in the collection of values for this component. In this case, the attribute value is therefore "Normal value". The same logic applies for mapping the other observations, its attributes and annotations. @@ -1317,7 +1676,9 @@ This language matching type is called "Lookup", see allDimensions", - "series": [{ - "id": "CURRENCY", - "name": "Currency", - "names": {"en": "Currency"}, - "description": "Description for the dimension", - "descriptions": {"en": "Description for the dimension"}, - "keyPosition": 1, - "role": "unit", - "values": [ - { - "id": "NZD", - "name": "New Zealand dollar", - "names": {"en": "New Zealand dollar"} - }, - { - "id": "RUB", - "name": "Russian rouble", - "names": {"en": "Russian rouble"} - } - ] - }], - "comment for observation": "# only for dimensions used at observation level", - "observation": [{ - "id": "TIME_PERIOD", - "name": "Time period or range", - "names": {"en": "Time period or range"}, - "description": "Description for the dimension", - "descriptions": {"en": "Description for the dimension"}, - "keyPosition": 5, - "role": "time", - "values": [ - { - "id": "2013-01-18", - "name": "2013-01-18", - "names": {"en": "2013-01-18"}, - "start": "2013-01-18T00:00:00Z", - "end": "2013-01-18T23:59:59Z" - }, - { - "id": "2013-01-21", - "name": "2013-01-21", - "names": {"en": "2013-01-21"}, - "start": "2013-01-21T00:00:00Z", - "end": "2013-01-21T23:59:59Z" - } - ] - }] - }, - "attributes": { - "comment for dataSet": "# only for attributes returned at dataset level", - "dataSet": [{ - "id": "TIME_FORMAT", - "name": "Time Format", - "names": {"en": "Time Format"}, - "description": "Description for the attribute", - "descriptions": {"en": "Description for the attribute"}, - "relationship": {"none": {}}, - "role": "TIME_FORMAT", - "default": "P1D", - "values": [{ - "id": "P1D", - "name": "Daily", - "names": {"en": "Daily"} - }] - }], - "comment for series": "# only for attributes returned at series level", - "series": [{ - "id": "ID", - "name": "Attribute name", - "names": {"en": "Attribute name"}, - "description": "Description for the attribute", - "descriptions": {"en": "Description for the attribute"}, - "relationship": {"dimensions": [ - "FREQ", - "CURRENCY", - "CURRENCY_DENOM", - "EXR_TYPE", - "EXR_SUFFIX" - ]}, - "role": null, - "default": "ID1", - "comment for values": "# inclusion of attachment level and its format to be decided, e.g. \"attachment\": [ true, true, true, true, true, true, false ],", - "values": [ - { - "comment for id": "# id property is optional to allow for uncoded attributes", - "id": "ID1", - "name": "New Zealand dollar (NZD)", - "names": {"en": "New Zealand dollar (NZD)"} - }, - { - "id": "ID2", - "name": "Russian rouble (RUB)", - "names": {"en": "Russian rouble (RUB)"} - } - ] - }], - "observation": [{ - "id": "OBS_STATUS", - "name": "Observation status", - "names": {"en": "Observation status"}, - "description": "Description for the attribute", - "descriptions": {"en": "Description for the attribute"}, - "relationship": {"primaryMeasure": "OBS_VALUE"}, - "role": null, - "comment for default": "# optional", - "default": "A", - "comment for values": "# a null attribute can be used to shorten the message by using O index later in message", - "values": [ - null, - { - "id": "A", - "name": "Normal value", - "names": {"en": "Normal value"}, - "description": "Normal value", - "descriptions": {"en": "Normal value"} - } - ] - }] - }, - "annotations": [{ - "title": "AnnotationTitle provides a title for the annotation.", - "type": "AnnotationType is used to distinguish between annotations.", - "text": "AnnotationText contains the text of the annotation.", - "texts": {"en": "AnnotationText contains the text of the annotation."}, - "id": "Non-standard identification of an annotation.", - "links": [{ - "href": "http://www.myorg.org/ws/uri/for/this/annotation", - "rel": "description" - }] - }] - }, - "dataSets": [ - { - "links": [{ - "href": "https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", - "rel": "datastructure" - }], - "action": "Information", - "comment for reportingBegin": "# optional first time period in returned message", - "reportingBegin": "2012-05-04", - "comment for reportingEnd": "# optional last time period in returned message", - "reportingEnd": "2012-06-01", - "comment for validFrom": "# optional only for version history", - "validFrom": "2012-01-01T10:00:00Z", - "comment for validTo": "# optional only for version history", - "validTo": "2013-01-01T10:00:00Z", - "comment for publicationYear": "# optional only for publication release calendars", - "publicationYear": "2005", - "comment for publicationPeriod": "# optional only for publication release calendars", - "publicationPeriod": "2005-Q1", - "comment for annotations": "# optional as per annotations", - "annotations": [0], - "comment for attributes": "# optional as per attributes at dataset level", - "attributes": [0], - "comment for series": "# 1st alternative (only if series level (dimensionAtObservation <> allDimensions))", - "series": { - "0": { - "annotations": [], - "attributes": [0], - "observations": { - "0": [ - 1.5931, - 0 - ], - "1": [ - 1.5925, - 0 - ] - } - }, - "1": { - "annotations": [0], - "attributes": [1], - "observations": { - "0": [ - 40.3426, - 0 - ], - "1": [ - 40.3, - 0 - ] - } - } - } - }, - { - "links": [{ - "href": "https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", - "rel": "datastructure" - }], - "action": "Information", - "comment for observations": "# 2nd alternative (only if no series level (dimensionAtObservation == allDimensions))", - "observations": { - "0:0": [ - 1.5931, - 0 - ], - "0:1": [ - 1.5925, - 0 - ], - "1:0": [ - 40.3426, - 0, - 0 - ], - "1:1": [ - 40.3, - 0, - 0 - ] - } - }, - { - "links": [{ - "href": "https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", - "rel": "datastructure" - }], - "action": "Information", - "comment for dataSet(s)": "# In case that the server does not group dimensions with single values at dataset level", - "comment for series": "# 1st alternative (only if series level (dimensionAtObservation <> allDimensions))", - "series": { - "0:0:0:0:0": { - "annotations": [], - "attributes": [0], - "observations": { - "0": [ - 1.5931, - 0 - ], - "1": [ - 1.5925, - 0 - ] - } - }, - "0:0:0:0:1": { - "annotations": [0], - "attributes": [1], - "observations": { - "0": [ - 40.3426, - 0 - ], - "1": [ - 40.3, - 0 - ] - } - } - } - }, - { - "links": [{ - "href": "https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", - "rel": "datastructure" - }], - "action": "Information", - "comment for dataSet(s)": "# 2nd alternative (only if no series level (dimensionAtObservation == allDimensions))", - "observations": { - "0:0:0:0:0:0": [ - 1.5931, - 0 - ], - "0:0:0:0:0:1": [ - 1.5925, - 0 - ], - "0:0:0:0:1:0": [ - 40.3426, - 0, - 0 - ], - "0:0:0:0:1:1": [ - 40.3, - 0, - 0 - ] - } - }, - { - "links": [{ - "href": "https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", - "rel": "datastructure" - }], - "action": "Information", - "comment for dataSet(s)": "# In case the client is using the detail parameter and the server supports it. # Detail parameter: serieskeysonly. No observation values, attributes or annotations.", - "observations": { - "0:0": [], - "0:1": [], - "1:0": [], - "1:1": [] - } - }, - { - "links": [{ - "href": "https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", - "rel": "datastructure" - }], - "action": "Information", - "comment for dataSet(s)": "# Detail parameter: dataonly. No attributes or annotations.", - "observations": { - "0:0": [1.5931], - "0:1": [1.5925], - "1:0": [40.3426], - "1:1": [40.3] - } - }, - { - "links": [{ - "href": "https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", - "rel": "datastructure" - }], - "action": "Information", - "comment for dataSet(s)": "# Detail parameter: nodata. No observation values, just attributes and annotations.", - "observations": { - "0:0": [0], - "0:1": [0], - "1:0": [ - 0, - 0 - ], - "1:1": [ - 0, - 0 - ] - } - } - ] - } - } -``` diff --git a/data-message/samples/agri.json b/data-message/samples/agri.json index 0ab577b..00458b0 100644 --- a/data-message/samples/agri.json +++ b/data-message/samples/agri.json @@ -1,309 +1,629 @@ { - "meta": { - "schema": "https://raw.githubusercontent.com/sdmx-twg/sdmx-json/develop/data-message/tools/schemas/1.0/sdmx-json-data-schema.json", - "id": "IT1001", - "prepared": "2018-03-11T14:30:47", - "test": true, - "contentLanguages": ["en"], - "sender": { - "id": "NIS", - "name": "National Institute of Statistics of Cambodia", - "names": {"en": "National Institute of Statistics of Cambodia"} - }, - "receiver": { - "id": "IMF", - "name": "International Monetary Fund", - "names": {"en": "International Monetary Fund"} - }, - "links": [{ - "href": "http://ws-root/data/MA_545,MILLED_RICE,1.0/ASIKHM002+ASIKHM001../?dimensionAtObservation=AllDimensions&startPeriod=2013&endPeriod=2018", - "rel": "self" - }] - }, - "data": { - "dataSets": [{ - "links": [{ - "href": "http://ws-root/datastructure/MA_545/AGRI_DSD/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=MA_545:AGRI_DSD(1.0)", - "rel": "datastructure" - }], - "action": "Information", - "observations": { - "0:0": [ - 350.154, - 0 - ], - "0:1": [ - 389.385, - 1 - ], - "0:2": [ - 395.729, - 2 - ], - "0:3": [ - 433.638, - 3 - ], - "1:0": [ - 442.996, - 0 - ], - "1:1": [ - 426.588, - 1 - ], - "1:2": [ - 479.686, - 2 - ], - "1:3": [ - 522.296, - 3 - ] - } - }], - "structure": { - "links": [ - { - "href": "http://ws-root/datastructure/MA_545/AGRI_DSD/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=MA_545:AGRI_DSD(1.0)", - "rel": "datastructure" - }, - { - "href": "http://ws-root/dataflow/MA_545/MILLED_RICE/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=MA_545:MILLED_RICE(1.0)", - "rel": "dataflow" - } - ], - "name": "Milled rice", - "names": {"en": "Milled rice"}, - "description": "Milled rice description", - "descriptions": {"en": "Milled rice description"}, - "dimensions": { - "dataset": [{ - "id": "FREQ", - "name": "Frequency", - "names": {"en": "Frequency"}, - "keyPosition": 2, - "role": "FREQ", - "values": [{ - "id": "A", - "name": "Annual", - "names": {"en": "Annual"}, - "links": [{ - "href": "http://ws-root/codelist/MA_545/FREQ/1.0/A", - "urn": "urn:sdmx:org.sdmx.infomodel.codelist.Codelist=MA_545:FREQ(1.0).A", - "rel": "self" - }] - }], - "links": [{ - "href": "http://ws-root/codelist/MA_545/FREQ/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.codelist.Codelist=MA_545:FREQ(1.0)", - "rel": "self" - }] - }], - "series": [], - "observation": [ - { - "id": "REF_AREA", - "name": "Reference area", - "names": {"en": "Reference area"}, - "keyPosition": 0, - "role": ["REF_AREA"], - "values": [ - { - "id": "ASIKHM001", - "name": "Banteay Meanchey", - "names": {"en": "Banteay Meanchey"}, - "parent": "ASIKHM", - "order": 2, - "links": [{ - "href": "http://ws-root/codelist/MA_545/CL_PROVINCES/1.0/ASIKHM001", - "urn": "urn:sdmx:org.sdmx.infomodel.codelist.Codelist=MA_545:CL_PROVINCES(1.0)ASIKHM001", - "rel": "self" - }], - "annotations": [0] - }, - { - "id": "ASIKHM002", - "name": "Battambang", - "names": {"en": "Battambang"}, - "parent": "ASIKHM", - "order": 1, - "links": [{ - "href": "http://ws-root/codelist/MA_545/CL_PROVINCES/1.0/ASIKHM002", - "urn": "urn:sdmx:org.sdmx.infomodel.codelist.Codelist=MA_545:CL_PROVINCES(1.0).ASIKHM", - "rel": "self" - }], - "annotations": [1] - }, - { - "id": "ASIKHM", - "name": "Cambodia", - "names": {"en": "Cambodia"}, - "order": 0, - "links": [{ - "href": "http://ws-root/codelist/MA_545/CL_PROVINCES/1.0/ASIKHM", - "urn": "urn:sdmx:org.sdmx.infomodel.codelist.Codelist=MA_545:CL_PROVINCES(1.0).ASIKHM", - "rel": "self" - }] - } - ], - "links": [{ - "href": "http://ws-root/codelist/MA_545/CL_PROVINCES/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.codelist.Codelist=MA_545:CL_PROVINCES(1.0)", - "rel": "self" - }] - }, - { - "id": "TIME_PERIOD", - "name": "Time Period", - "names": {"en": "Time Period"}, - "keyPosition": 3, - "role": ["TIME_PERIOD"], - "values": [ - { - "start": "2014-01-01T00:00:00Z", - "end": "2014-12-31T23:59:59Z", - "id": "2014", - "name": "2014", - "names": {"en": "2014"} - }, - { - "start": "2015-01-01T00:00:00Z", - "end": "2015-12-31T23:59:59Z", - "id": "2015", - "name": "2015", - "names": {"en": "2015"} - }, - { - "start": "2016-01-01T00:00:00Z", - "end": "2016-12-31T23:59:59Z", - "id": "2016", - "name": "2016", - "names": {"en": "2016"} - }, - { - "start": "2017-01-01T00:00:00Z", - "end": "2017-12-31T23:59:59Z", - "id": "2017", - "name": "2017", - "names": {"en": "2017"} - } - ] - } - ] - }, - "attributes": { - "dataset": [ - { - "id": "UNIT_MEASURE", - "name": "Unit of measure", - "names": {"en": "Unit of measure"}, - "role": ["UNIT_MEASURE"], - "relationship": {"none": {}}, - "values": [{ - "id": "TONES", - "name": "Tones", - "names": {"en": "Tones"} - }] - }, - { - "id": "UNIT_MULT", - "name": "Unit multiplier", - "names": {"en": "Unit multiplier"}, - "role": ["UNIT_MULT"], - "relationship": {"none": {}}, - "values": [{ - "id": "3", - "name": "Thousands", - "names": {"en": "Thousands"} - }] - }, - { - "id": "BASE_PER", - "name": "Base Period", - "names": {"en": "Base Period"}, - "role": ["BASE_PER"], - "relationship": {"none": {}}, - "values": [{ - "id": "2010_100", - "name": "2010=100", - "names": {"en": "2010=100"} - }] - }, - { - "id": "PREF_SCALE", - "name": "Preferred scale", - "names": {"en": "Preferred scale"}, - "role": ["PREF_SCALE"], - "relationship": {"none": {}}, - "values": [{ - "id": "-3", - "name": "Thousandth", - "names": {"en": "Thousandth"} - }] - }, - { - "id": "DECIMALS", - "name": "Decimals", - "names": {"en": "Decimals"}, - "role": ["DECIMALS"], - "default": "1", - "relationship": {"none": {}}, - "values": [{ - "id": "1", - "name": "One decimal", - "names": {"en": "One decimal"} - }] - } - ], - "series": [], - "observation": [ - { - "id": "SOURCE", - "name": "Source", - "names": {"en": "Source"}, - "relationship": {"dimensions": ["TIME_PERIOD"]}, - "values": [ - {"name": "MAFF_Agricultural Statistics_2014"}, - {"name": "MAFF_Agricultural Statistics_2015"}, - {"name": "MAFF_Agricultural Statistics_2016"}, - {"name": "MAFF_Agricultural Statistics_2017"} - ] - }, - { - "id": "OBS_STATUS", - "name": "Observation status", - "names": {"en": "Observation status"}, - "roles": ["OBS_STATUS"], - "default": "A", - "relationship": {"primaryMeasure": "OBS_VALUE"}, - "values": [{ - "id": "A", - "name": "Normal value", - "names": {"en": "Normal value"} - }] - } - ] - }, - "annotations": [ - { - "title": "Hierarchical name", - "type": "Alternative name", - "text": "Banteay Meanchey", - "texts": {"en": "Banteay Meanchey"}, - "id": "ALT_NAME" - }, - { - "title": "Hierarchical name", - "type": "Alternative name", - "text": "Battambang", - "texts": {"en": "Battambang"}, - "id": "ALT_NAME" - } - ] - } - } + "meta":{ + "schema":"https://raw.githubusercontent.com/sdmx-twg/sdmx-json/master/data-message/tools/schemas/2.0.0/sdmx-json-data-schema.json", + "id":"IT1001", + "prepared":"2018-03-11T14:30:47", + "test":true, + "contentLanguages":[ + "en" + ], + "sender":{ + "id":"NIS", + "name":"National Institute of Statistics of Cambodia", + "names":{ + "en":"National Institute of Statistics of Cambodia" + } + }, + "receiver":{ + "id":"IMF", + "name":"International Monetary Fund", + "names":{ + "en":"International Monetary Fund" + } + }, + "links":[ + { + "href":"http://ws-root/data/MA_545,MILLED_RICE,1.0/ASIKHM002+ASIKHM001../?dimensionAtObservation=AllDimensions&startPeriod=2013&endPeriod=2018", + "rel":"self" + } + ] + }, + "data":{ + "dataSets":[ + { + "structure":0, + "links":[ + { + "href":"http://ws-root/datastructure/MA_545/AGRI_DSD/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=MA_545:AGRI_DSD(1.0)", + "rel":"datastructure" + } + ], + "action":"Information", + "attributes":[ + 0, + 0, + 0, + 0, + 0, + "contact@organisation.org" + ], + "dimensionGroupAttributes":{ + "::0":[ + [ + "MAFF_Agricultural Statistics_2014" + ], + null + ], + "::1":[ + [ + "MAFF_Agricultural Statistics_2015", + "Other sources" + ], + null + ], + "::2":[ + [ + "MAFF_Agricultural Statistics_2016" + ], + null + ], + "::3":[ + [ + "MAFF_Agricultural Statistics_2017" + ], + null + ], + "0:0:":[ + null, + { + "en":"Comment for Annual data for Banteay Meanchey", + "km":"ផ្តល់យោបល់សម្រាប់ទិន្នន័យប្រចាំឆ្នាំសម្រាប់ខេត្តបន្ទាយមានជ័យ" + } + ], + "0:1:":[ + null, + { + "en":"Comment for Annual data for Battambang", + "km":"ផ្តល់យោបល់សម្រាប់ទិន្នន័យប្រចាំឆ្នាំសម្រាប់ខេត្តបាត់ដំបង" + } + ], + "0:2:":[ + null, + { + "en":"Comment for Annual data for Cambodia", + "km":"ផ្តល់យោបល់សម្រាប់ទិន្នន័យប្រចាំឆ្នាំសម្រាប់ប្រទេសកម្ពុជា" + } + ] + }, + "observations":{ + "0:0":[ + 350.154, + null, + "2018-03-18T11:00:00" + ], + "0:1":[ + 389.385, + null, + "2019-03-18T11:00:00" + ], + "0:2":[ + 395.729, + null, + "2020-03-18T11:00:00" + ], + "0:3":[ + 433.638, + null, + "2021-03-18T11:00:00" + ], + "1:0":[ + 442.996, + null, + "2018-03-18T11:00:00" + ], + "1:1":[ + 426.588, + null, + "2019-03-18T11:00:00" + ], + "1:2":[ + 479.686, + null, + "2020-03-18T11:00:00" + ], + "1:3":[ + 522.296, + null, + "2021-03-18T11:00:00" + ], + "2:0":[ + 5228.33, + null, + "2018-03-18T11:00:00" + ], + "2:1":[ + 5191.833, + null, + "2019-03-18T11:00:00" + ], + "2:2":[ + 5197.887, + null, + "2020-03-18T11:00:00" + ], + "2:3":[ + 5541.424, + null, + "2021-03-18T11:00:00" + ] + } + } + ], + "structures":[ + { + "links":[ + { + "href":"http://ws-root/datastructure/MA_545/AGRI_DSD/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=MA_545:AGRI_DSD(1.0)", + "rel":"datastructure" + }, + { + "href":"http://ws-root/dataflow/MA_545/MILLED_RICE/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=MA_545:MILLED_RICE(1.0)", + "rel":"dataflow" + } + ], + "name":"Milled rice", + "names":{ + "en":"Milled rice" + }, + "description":"Milled rice description", + "descriptions":{ + "en":"Milled rice description" + }, + "dimensions":{ + "dataSet":[ + { + "id":"FREQ", + "name":"Frequency", + "names":{ + "en":"Frequency" + }, + "keyPosition":2, + "role":"FREQ", + "values":[ + { + "id":"A", + "name":"Annual", + "names":{ + "en":"Annual" + }, + "links":[ + { + "href":"http://ws-root/codelist/MA_545/FREQ/1.0/A", + "urn":"urn:sdmx:org.sdmx.infomodel.codelist.Codelist=MA_545:FREQ(1.0).A", + "rel":"self" + } + ] + } + ], + "links":[ + { + "href":"http://ws-root/codelist/MA_545/FREQ/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.codelist.Codelist=MA_545:FREQ(1.0)", + "rel":"self" + } + ] + } + ], + "series":[ + + ], + "observation":[ + { + "id":"REF_AREA", + "name":"Reference area", + "names":{ + "en":"Reference area" + }, + "keyPosition":0, + "role":[ + "REF_AREA" + ], + "values":[ + { + "id":"ASIKHM001", + "name":"Banteay Meanchey", + "names":{ + "en":"Banteay Meanchey" + }, + "parent":"ASIKHM", + "order":2, + "links":[ + { + "href":"http://ws-root/codelist/MA_545/CL_PROVINCES/1.0/ASIKHM001", + "urn":"urn:sdmx:org.sdmx.infomodel.codelist.Codelist=MA_545:CL_PROVINCES(1.0)ASIKHM001", + "rel":"self" + } + ], + "annotations":[ + 0 + ] + }, + { + "id":"ASIKHM002", + "name":"Battambang", + "names":{ + "en":"Battambang" + }, + "parent":"ASIKHM", + "order":1, + "links":[ + { + "href":"http://ws-root/codelist/MA_545/CL_PROVINCES/1.0/ASIKHM002", + "urn":"urn:sdmx:org.sdmx.infomodel.codelist.Codelist=MA_545:CL_PROVINCES(1.0).ASIKHM", + "rel":"self" + } + ], + "annotations":[ + 1 + ] + }, + { + "id":"ASIKHM", + "name":"Cambodia", + "names":{ + "en":"Cambodia" + }, + "order":0, + "links":[ + { + "href":"http://ws-root/codelist/MA_545/CL_PROVINCES/1.0/ASIKHM", + "urn":"urn:sdmx:org.sdmx.infomodel.codelist.Codelist=MA_545:CL_PROVINCES(1.0).ASIKHM", + "rel":"self" + } + ] + } + ], + "links":[ + { + "href":"http://ws-root/codelist/MA_545/CL_PROVINCES/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.codelist.Codelist=MA_545:CL_PROVINCES(1.0)", + "rel":"self" + } + ] + }, + { + "id":"TIME_PERIOD", + "name":"Time Period", + "names":{ + "en":"Time Period" + }, + "keyPosition":3, + "role":[ + "TIME_PERIOD" + ], + "values":[ + { + "start":"2014-01-01T00:00:00Z", + "end":"2014-12-31T23:59:59Z", + "id":"2014", + "name":"2014", + "names":{ + "en":"2014" + } + }, + { + "start":"2015-01-01T00:00:00Z", + "end":"2015-12-31T23:59:59Z", + "id":"2015", + "name":"2015", + "names":{ + "en":"2015" + } + }, + { + "start":"2016-01-01T00:00:00Z", + "end":"2016-12-31T23:59:59Z", + "id":"2016", + "name":"2016", + "names":{ + "en":"2016" + } + }, + { + "start":"2017-01-01T00:00:00Z", + "end":"2017-12-31T23:59:59Z", + "id":"2017", + "name":"2017", + "names":{ + "en":"2017" + } + } + ] + } + ] + }, + "measures":{ + "observation":[ + { + "id":"OBS_VALUE", + "name":"Observation Value", + "names":{ + "en":"Observation Value" + }, + "description":"Description for the measure", + "descriptions":{ + "en":"Description for the measure" + }, + "role":"PRIMARY", + "isMandatory":true, + "format":{ + "dataType":"Double", + "minOccurs":1, + "maxOccurs":1, + "isMultiLingual":false + } + } + ] + }, + "attributes":{ + "dataSet":[ + { + "id":"UNIT_MEASURE", + "name":"Unit of measure", + "names":{ + "en":"Unit of measure" + }, + "role":[ + "UNIT_MEASURE" + ], + "relationship":{ + "observation":{ + + } + }, + "values":[ + { + "id":"TONES", + "name":"Tones", + "names":{ + "en":"Tones" + } + } + ] + }, + { + "id":"UNIT_MULT", + "name":"Unit multiplier", + "names":{ + "en":"Unit multiplier" + }, + "role":[ + "UNIT_MULT" + ], + "relationship":{ + "observation":{ + + } + }, + "values":[ + { + "id":"3", + "name":"Thousands", + "names":{ + "en":"Thousands" + } + } + ] + }, + { + "id":"BASE_PER", + "name":"Base Period", + "names":{ + "en":"Base Period" + }, + "role":[ + "BASE_PER" + ], + "relationship":{ + "observation":{ + + } + }, + "values":[ + { + "id":"2010_100", + "name":"2010=100", + "names":{ + "en":"2010=100" + } + } + ] + }, + { + "id":"PREF_SCALE", + "name":"Preferred scale", + "names":{ + "en":"Preferred scale" + }, + "role":[ + "PREF_SCALE" + ], + "relationship":{ + "dataflow":{ + + } + }, + "values":[ + { + "id":"-3", + "name":"Thousandth", + "names":{ + "en":"Thousandth" + } + } + ] + }, + { + "id":"DECIMALS", + "name":"Decimals", + "names":{ + "en":"Decimals" + }, + "role":[ + "DECIMALS" + ], + "default":"1", + "relationship":{ + "dataflow":{ + + } + }, + "values":[ + { + "id":"1", + "name":"One decimal", + "names":{ + "en":"One decimal" + } + } + ] + }, + { + "id":"CONTACT_EMAIL", + "name":"Contact E-mail", + "names":{ + "en":"Contact E-mail" + }, + "relationship":{ + "dataflow":{ + + } + }, + "format":{ + "dataType":"String", + "maxOccurs":1, + "pattern":"^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}$", + "isMultiLingual":false + } + } + ], + "dimensionGroup":[ + { + "id":"SOURCE", + "name":"Source", + "names":{ + "en":"Source" + }, + "relationship":{ + "dimensions":[ + "TIME_PERIOD" + ] + }, + "format":{ + "dataType":"String", + "minOccurs":1, + "maxOccurs":2, + "isMultiLingual":false + } + }, + { + "id":"SERIES_COMMENT", + "name":"Time series comment", + "names":{ + "en":"Time series comment" + }, + "relationship":{ + "dimensions":[ + "FREQ", + "REF_AREA" + ] + }, + "format":{ + "dataType":"String", + "minOccurs":1, + "maxOccurs":1, + "isMultiLingual":true + } + } + ], + "series":[ + + ], + "observation":[ + { + "id":"OBS_STATUS", + "name":"Observation status", + "names":{ + "en":"Observation status" + }, + "roles":[ + "OBS_STATUS" + ], + "default":"A", + "relationship":{ + "observation":{ + + } + }, + "values":[ + { + "id":"A", + "name":"Normal value", + "names":{ + "en":"Normal value" + } + } + ] + }, + { + "id":"EMBARGO_TIME", + "name":"Embargo time", + "names":{ + "en":"Embargo time" + }, + "roles":[ + "EMBARGO_TIME" + ], + "relationship":{ + "observation":{ + + } + }, + "format":{ + "dataType":"BasicTimePeriod", + "maxOccurs":1, + "isMultiLingual":false + } + } + ] + }, + "annotations":[ + { + "title":"Hierarchical name", + "type":"ALT_NAME", + "text":"Banteay Meanchey", + "texts":{ + "en":"Banteay Meanchey" + }, + "id":"ALT_NAME" + }, + { + "title":"Hierarchical name", + "type":"ALT_NAME", + "text":"Battambang", + "texts":{ + "en":"Battambang" + }, + "id":"ALT_NAME" + } + ], + "dataSets":[ + 0 + ] + } + ] + } } diff --git a/data-message/samples/constructed-sample-full.json b/data-message/samples/constructed-sample-full.json new file mode 100644 index 0000000..b983fbe --- /dev/null +++ b/data-message/samples/constructed-sample-full.json @@ -0,0 +1,758 @@ +{ + "meta":{ + "schema":"https://raw.githubusercontent.com/sdmx-twg/sdmx-json/master/data-message/tools/schemas/2.0.0/sdmx-json-data-schema.json", + "id":"62b5f19d-f1c9-495d-8446-a3661ed24753", + "prepared":"2021-03-17T22:57:33Z", + "test":false, + "contentLanguages":[ + "en" + ], + "sender":{ + "id":"ECB", + "name":"European Central Bank", + "names":{ + "en":"European Central Bank" + }, + "contact":[ + { + "name":"Statistics hotline", + "names":{ + "en":"Statistics hotline" + }, + "department":"Statistics Department", + "departments":{ + "en":"Statistics Department" + }, + "role":"helpdesk", + "roles":{ + "en":"helpdesk" + }, + "telephone":[ + "+00-00-99999" + ], + "fax":[ + "+00-00-88888" + ], + "uri":[ + "http://www.xyz.org" + ], + "email":[ + "statistics@xyz.org" + ] + } + ] + }, + "receiver":{ + "id":"SDMX", + "name":"SDMX", + "names":{ + "en":"SDMX" + }, + "contact":[ + { + "name":"name", + "names":{ + "en":"name" + }, + "department":"department", + "departments":{ + "en":"department" + }, + "role":"role", + "roles":{ + "en":"role" + }, + "telephone":[ + "telephone" + ], + "fax":[ + "fax" + ], + "uri":[ + "uri" + ], + "email":[ + "sdmx@xyz.org" + ] + } + ] + }, + "links":[ + { + "href":"http://www.myorg.org/ws/data/ECB_ICP1/M.PT.N.071100.4.INX", + "rel":"request", + "title":"Link to the url that returns this response", + "titles":{ + "en":"Link to the url that returns this response" + }, + "type":"application/json" + } + ] + }, + "errors":[ + { + "code":123, + "title":"Invalid number of dimensions in parameter key", + "titles":{ + "en":"Invalid number of dimensions in parameter key" + } + } + ], + "data":{ + "structures":[ + { + "links":[ + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", + "rel":"datastructure", + "title":"resolvable uri to datastructure", + "titles":{ + "en":"resolvable uri to datastructure" + } + }, + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=ECB:EXR(1.0)", + "rel":"dataflow", + "title":"resolvable uri to dataflow", + "titles":{ + "en":"resolvable uri to dataflow" + } + }, + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/provisionagreement/ECB/PA_EXR", + "urn":"urn:sdmx:org.sdmx.infomodel.provisionagreement.ProvisionAgreement=ECB:PA_EXR(1.0)", + "rel":"provisionagreement", + "title":"resolvable uri to provision agreement", + "titles":{ + "en":"resolvable uri to provision agreement" + } + } + ], + "name":"dataflow name", + "names":{ + "en":"dataflow name" + }, + "description":"dataflow description", + "descriptions":{ + "en":"dataflow description" + }, + "dimensions":{ + "dataSet":[ + { + "id":"FREQ", + "name":"Frequency", + "names":{ + "en":"Frequency" + }, + "description":"Description for the dimension", + "descriptions":{ + "en":"Description for the dimension" + }, + "comment for keyPosition":"# 0-based position of dimension in key in user request url", + "keyPosition":0, + "comment for role":"# restricted list of dimension and attribute roles (time, frequency, geo, unit, scalefactor, referenceperiod, ...)", + "role":"frequency", + "values":[ + { + "id":"D", + "name":"Daily", + "names":{ + "en":"Daily" + } + } + ] + }, + { + "id":"CURRENCY_DENOM", + "name":"Currency denominator", + "names":{ + "en":"Currency denominator" + }, + "description":"Description for the dimension", + "descriptions":{ + "en":"Description for the dimension" + }, + "keyPosition":2, + "values":[ + { + "id":"EUR", + "name":"Euro", + "names":{ + "en":"Euro" + } + } + ] + }, + { + "id":"EXR_TYPE", + "name":"Exchange rate type", + "names":{ + "en":"Exchange rate type" + }, + "description":"Description for the dimension", + "descriptions":{ + "en":"Description for the dimension" + }, + "keyPosition":3, + "values":[ + { + "id":"SP00", + "name":"Spot rate", + "names":{ + "en":"Spot rate" + } + } + ] + }, + { + "id":"EXR_SUFFIX", + "name":"Series variation - EXR context", + "names":{ + "en":"Series variation - EXR context" + }, + "description":"Description for the dimension", + "descriptions":{ + "en":"Description for the dimension" + }, + "keyPosition":4, + "values":[ + { + "id":"A", + "name":"Average or standardised measure for given frequency", + "names":{ + "en":"Average or standardised measure for given frequency" + } + } + ] + } + ], + "series":[ + { + "id":"CURRENCY", + "name":"Currency", + "names":{ + "en":"Currency" + }, + "description":"Description for the dimension", + "descriptions":{ + "en":"Description for the dimension" + }, + "keyPosition":1, + "role":"unit", + "values":[ + { + "id":"NZD", + "name":"New Zealand dollar", + "names":{ + "en":"New Zealand dollar" + } + }, + { + "id":"RUB", + "name":"Russian rouble", + "names":{ + "en":"Russian rouble" + } + } + ] + } + ], + "observation":[ + { + "id":"TIME_PERIOD", + "name":"Time period or range", + "names":{ + "en":"Time period or range" + }, + "description":"Description for the dimension", + "descriptions":{ + "en":"Description for the dimension" + }, + "keyPosition":5, + "role":"time", + "values":[ + { + "id":"2013-01-18", + "name":"2013-01-18", + "names":{ + "en":"2013-01-18" + }, + "start":"2013-01-18T00:00:00Z", + "end":"2013-01-18T23:59:59Z" + }, + { + "id":"2013-01-21", + "name":"2013-01-21", + "names":{ + "en":"2013-01-21" + }, + "start":"2013-01-21T00:00:00Z", + "end":"2013-01-21T23:59:59Z" + } + ] + } + ] + }, + "measures":{ + "observation":[ + { + "id":"OBS_VALUE", + "name":"Observation Value", + "names":{ + "en":"Observation Value" + }, + "description":"Description for the measure", + "descriptions":{ + "en":"Description for the measure" + }, + "relationship":{ + "observation":{ + + } + }, + "role":"PRIMARY", + "isMandatory":true, + "format":{ + "dataType":"Double", + "minOccurs":1, + "maxOccurs":1, + "isMultiLingual":false + } + } + ] + }, + "attributes":{ + "dataSet":[ + { + "id":"TIME_FORMAT", + "name":"Time Format", + "names":{ + "en":"Time Format" + }, + "description":"Description for the attribute", + "descriptions":{ + "en":"Description for the attribute" + }, + "relationship":{ + "dataflow":{ + + } + }, + "role":"TIME_FORMAT", + "default":"P1D", + "values":[ + { + "id":"P1D", + "name":"Daily", + "names":{ + "en":"Daily" + } + } + ] + }, + { + "id":"DESCRIPTION", + "name":"Description", + "names":{ + "en":"Description" + }, + "description":"Description for the attribute", + "descriptions":{ + "en":"Description for the attribute" + }, + "relationship":{ + "dataflow":{ + + } + }, + "format":{ + "dataType":"String", + "minOccurs":1, + "maxOccurs":2, + "minLength":5, + "maxLength":3000, + "isMultiLingual":false + } + } + ], + "dimensionGroup":[ + { + "id":"UNIT_MEAS", + "name":"Unit of Measure", + "names":{ + "en":"Unit of Measure" + }, + "description":"Description for the attribute", + "descriptions":{ + "en":"Description for the attribute" + }, + "relationship":{ + "dimensions":[ + "FREQ", + "EXR_TYPE", + "CURRENCY" + ] + }, + "role":"UNIT_MEAS", + "values":[ + { + "id":"NC", + "name":"National Currency", + "names":{ + "en":"National Currency" + } + } + ] + } + ], + "series":[ + { + "id":"ID", + "name":"Attribute name", + "names":{ + "en":"Attribute name" + }, + "description":"Description for the attribute", + "descriptions":{ + "en":"Description for the attribute" + }, + "relationship":{ + "dimensions":[ + "FREQ", + "CURRENCY", + "CURRENCY_DENOM", + "EXR_TYPE", + "EXR_SUFFIX" + ] + }, + "role":null, + "default":"ID1", + "comment for values":"# inclusion of attachment level and its format to be decided, e.g. \"attachment\": [ true, true, true, true, true, true, false ],", + "values":[ + { + "comment for id":"# id property is optional to allow for uncoded attributes", + "id":"ID1", + "name":"New Zealand dollar (NZD)", + "names":{ + "en":"New Zealand dollar (NZD)" + } + }, + { + "id":"ID2", + "name":"Russian rouble (RUB)", + "names":{ + "en":"Russian rouble (RUB)" + } + } + ] + } + ], + "observation":[ + { + "id":"EMBARGO_TIME", + "name":"Embargo time", + "names":{ + "en":"Embargo time" + }, + "roles":[ + "EMBARGO_TIME" + ], + "relationship":{ + "observation":{} + }, + "format":{ + "dataType":"BasicTimePeriod", + "maxOccurs":1, + "isMultiLingual":false + } + }, + { + "id":"OBS_STATUS", + "name":"Observation status", + "names":{ + "en":"Observation status" + }, + "description":"Description for the attribute", + "descriptions":{ + "en":"Description for the attribute" + }, + "relationship":{ + "primaryMeasure":"OBS_VALUE" + }, + "role":null, + "comment for default":"# optional", + "default":"A", + "comment for values":"# a null attribute can be used to shorten the message by using O index later in message", + "values":[ + null, + { + "id":"A", + "name":"Normal value", + "names":{ + "en":"Normal value" + }, + "description":"Normal value", + "descriptions":{ + "en":"Normal value" + } + } + ] + } + ] + }, + "annotations":[ + { + "title":"A title for the annotation.", + "type":"Used to distinguish between annotations.", + "value":"A non-localised value text of the annotation.", + "text":"A human-readable (best-language-match) text of the annotation.", + "texts":{ + "en":"A human-readable localised text (English) of the annotation." + }, + "id":"Non-standard identification of an annotation.", + "links":[ + { + "href":"http://www.myorg.org/ws/uri/for/this/annotation", + "rel":"description" + } + ] + } + ], + "dataSets":[ + 0, + 1, + 2, + 3, + 4 + ] + } + ], + "dataSets":[ + { + "structure":0, + "links":[ + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", + "rel":"datastructure" + } + ], + "action":"Information", + "reportingBegin":"2012-05-04", + "reportingEnd":"2012-06-01", + "validFrom":"2012-01-01T10:00:00Z", + "validTo":"2013-01-01T10:00:00Z", + "publicationYear":"2005", + "publicationPeriod":"2005-Q1", + "annotations":[ + 0 + ], + "attributes":[ + 0, + [ + "Description value 1", + "Description value 2" + ] + ], + "dimensionGroupAttributes":{ + "0::0::0:":[ + 0 + ], + "0::0::1:":[ + 0 + ] + }, + "series":{ + "0":{ + "annotations":[ + + ], + "attributes":[ + 0 + ], + "observations":{ + "0":[ + 1.5931, + "2013-03-18T11:00:00", + 0 + ], + "1":[ + 1.5925, + "2013-03-21T11:00:00", + 0 + ] + } + }, + "1":{ + "annotations":[ + 0 + ], + "attributes":[ + 1 + ], + "observations":{ + "0":[ + 40.3426, + "2013-03-18T11:00:00", + 0 + ], + "1":[ + 40.3, + "2013-03-21T11:00:00", + 0 + ] + } + } + } + }, + { + "structure":0, + "links":[ + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", + "rel":"datastructure" + } + ], + "action":"Information", + "attributes":[ + 0, + [ + "Description value 1", + "Description value 2" + ] + ], + "dimensionGroupAttributes":{ + "0::0::0:":[ + 0 + ], + "0::0::1:":[ + 0 + ] + }, + "comment for observations":"# 2nd alternative instead of series if no series level (dimensionAtObservation == allDimensions)", + "observations":{ + "0:0":[ + 1.5931, + "2013-03-18T11:00:00", + 0 + ], + "0:1":[ + 1.5925, + "2013-03-21T11:00:00", + 0 + ], + "1:0":[ + 40.3426, + "2013-03-18T11:00:00", + 0, + 0 + ], + "1:1":[ + 40.3, + "2013-03-21T11:00:00", + 0, + 0 + ] + } + }, + { + "structure":0, + "links":[ + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", + "rel":"datastructure" + } + ], + "action":"Information", + "comment for dataSet(s)":"# In case the client is using the detail parameter and the server supports it. # Detail parameter: serieskeysonly. No observation values, attributes or annotations.", + "observations":{ + "0:0":[ + ], + "0:1":[ + ], + "1:0":[ + ], + "1:1":[ + ] + } + }, + { + "structure":0, + "links":[ + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", + "rel":"datastructure" + } + ], + "action":"Information", + "comment for dataSet(s)":"# Detail parameter: dataonly. No attributes or annotations.", + "observations":{ + "0:0":[ + 1.5931 + ], + "0:1":[ + 1.5925 + ], + "1:0":[ + 40.3426 + ], + "1:1":[ + 40.3 + ] + } + }, + { + "structure":0, + "links":[ + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", + "rel":"datastructure" + } + ], + "action":"Information", + "attributes":[ + 0, + [ + "Description value 1", + "Description value 2" + ] + ], + "dimensionGroupAttributes":{ + "0::0::0:":[ + 0 + ], + "0::0::1:":[ + 0 + ] + }, + "comment for dataSet(s)":"# Detail parameter: nodata. No observation values, just attributes and annotations.", + "observations":{ + "0:0":[ + "2013-03-18T11:00:00", + 0 + ], + "0:1":[ + "2013-03-21T11:00:00", + 0 + ], + "1:0":[ + "2013-03-18T11:00:00", + 0, + 0 + ], + "1:1":[ + "2013-03-21T11:00:00", + 0, + 0 + ] + } + } + ] + } +} diff --git a/data-message/samples/exr/exr-action-delete.json b/data-message/samples/exr/exr-action-delete.json index d45433f..5fcee23 100644 --- a/data-message/samples/exr/exr-action-delete.json +++ b/data-message/samples/exr/exr-action-delete.json @@ -1,220 +1,327 @@ { - "meta": { - "schema": "https://raw.githubusercontent.com/sdmx-twg/sdmx-json/develop/data-message/tools/schemas/1.0/sdmx-json-data-schema.json", - "id": "62b5f19d-f1c9-495d-8446-a3661ed24753", - "prepared": "2012-11-29T08:40:26Z", - "contentLanguages": [ - "en", - "fr-fr" - ], - "sender": { - "id": "ECB", - "name": "European Central Bank", - "names": {"en": "European Central Bank"} - } - }, - "data": { - "structure": { - "links": [ - { - "href": "https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=ECB:EXR(1.0)", - "rel": "dataflow", - "title": "resolvable uri to dataflow", - "titles": {"en": "resolvable uri to dataflow"} - }, - { - "href": "https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", - "rel": "datastructure", - "title": "resolvable uri to datastructure", - "titles": {"en": "resolvable uri to datastructure"} - }, - { - "href": "https://sdw-wsrest.ecb.europa.eu/service/provisionagreement/ECB/PA_EXR", - "urn": "urn:sdmx:org.sdmx.infomodel.provisionagreement.ProvisionAgreement=ECB:PA_EXR(1.0)", - "rel": "provisionagreement", - "title": "resolvable uri to provision agreement", - "titles": {"en": "resolvable uri to provision agreement"} - } - ], - "dimensions": { - "dataSet": [ - { - "id": "FREQ", - "name": "Frequency", - "names": {"en": "Frequency"}, - "role": "FREQ", - "keyPosition": 0, - "values": [{ - "id": "D", - "name": "Daily", - "names": {"en": "Daily"} - }] - }, - { - "id": "CURRENCY_DENOM", - "name": "Currency denominator", - "names": {"en": "Currency denominator"}, - "keyPosition": 2, - "values": [{ - "id": "EUR", - "name": "Euro", - "names": {"en": "Euro"} - }] - }, - { - "id": "EXR_TYPE", - "name": "Exchange rate type", - "names": {"en": "Exchange rate type"}, - "keyPosition": 3, - "values": [{ - "id": "SP00", - "name": "Spot rate", - "names": {"en": "Spot rate"} - }] - }, - { - "id": "EXR_SUFFIX", - "name": "Series variation - EXR context", - "names": {"en": "Series variation - EXR context"}, - "keyPosition": 4, - "values": [{ - "id": "A", - "name": "Average or standardised measure for given frequency", - "names": {"en": "Average or standardised measure for given frequency"} - }] - } - ], - "series": [{ - "id": "TIME_PERIOD", - "name": "Time period or range", - "names": {"en": "Time period or range"}, - "role": "TIME_PERIOD", - "keyPosition": 5, - "values": [ - { - "id": "2013-01-18", - "name": "2013-01-18", - "names": {"en": "2013-01-18"}, - "start": "2013-01-18T00:00:00.000Z", - "end": "2013-01-18T23:59:59.999Z" - }, - { - "id": "2013-01-21", - "name": "2013-01-21", - "names": {"en": "2013-01-21"}, - "start": "2013-01-21T00:00:00.000Z", - "end": "2013-01-21T23:59:59.999Z" - } - ] - }], - "observation": [{ - "id": "CURRENCY", - "name": "Currency", - "names": {"en": "Currency"}, - "keyPosition": 1, - "values": [ - { - "id": "NZD", - "name": "New Zealand dollar", - "names": {"en": "New Zealand dollar"} - }, - { - "id": "RUB", - "name": "Russian rouble", - "names": {"en": "Russian rouble"} - } - ] - }] - }, - "attributes": { - "dataSet": [{ - "id": "TIME_FORMAT", - "name": "Time Format", - "names": {"en": "Time Format"}, - "description": "Description for the attribute", - "descriptions": {"en": "Description for the attribute"}, - "relationship": {"none": {}}, - "role": "TIME_FORMAT", - "default": "P1D", - "values": [{ - "id": "P1D", - "name": "Daily", - "names": {"en": "Daily"} - }] - }], - "series": [], - "observation": [ - { - "id": "TITLE", - "name": "Series title", - "names": {"en": "Series title"}, - "relationship": {"dimensions": [ - "FREQ", - "CURRENCY", - "CURRENCY_DENOM", - "EXR_TYPE", - "EXR_SUFFIX" - ]}, - "role": "TITLE", - "values": [ - {"name": "New Zealand dollar (NZD)"}, - {"name": "Russian rouble (RUB)"} - ] - }, - { - "id": "OBS_STATUS", - "name": "Observation status", - "names": {"en": "Observation status"}, - "relationship": {"primaryMeasure": "OBS_VALUE"}, - "values": [{ - "id": "A", - "name": "Normal value", - "names": {"en": "Normal value"} - }] - } - ] - } - }, - "dataSets": [ - { - "links": [{ - "href": "https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=ECB:EXR(1.0)", - "rel": "dataflow" - }], - "action": "Replace", - "validFrom": "2012-03-20T15:00:16.000+01:00", - "series": { - "0": { - "attributes": [], - "observations": {"1": [ - 40.3426, - 0, - 1 - ]} - }, - "1": { - "attributes": [], - "observations": {"1": [ - 40.3, - 0, - 1 - ]} - } - } - }, - { - "links": [{ - "href": "https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=ECB:EXR(1.0)", - "rel": "dataflow" - }], - "action": "Delete", - "validTo": "2012-03-20T10:07:58.000+01:00", - "series": {"0": {"observations": {"0": []}}} - } - ] - } + "meta":{ + "schema":"https://raw.githubusercontent.com/sdmx-twg/sdmx-json/master/data-message/tools/schemas/2.0.0/sdmx-json-data-schema.json", + "id":"62b5f19d-f1c9-495d-8446-a3661ed24753", + "prepared":"2021-03-17T22:57:33Z", + "contentLanguages":[ + "en", + "fr-fr" + ], + "sender":{ + "id":"ECB", + "name":"European Central Bank", + "names":{ + "en":"European Central Bank" + } + } + }, + "data":{ + "structures":[ + { + "dataSets":[ + 0, + 1 + ], + "links":[ + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=ECB:EXR(1.0)", + "rel":"dataflow", + "title":"resolvable uri to dataflow", + "titles":{ + "en":"resolvable uri to dataflow" + } + }, + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", + "rel":"datastructure", + "title":"resolvable uri to datastructure", + "titles":{ + "en":"resolvable uri to datastructure" + } + }, + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/provisionagreement/ECB/PA_EXR", + "urn":"urn:sdmx:org.sdmx.infomodel.provisionagreement.ProvisionAgreement=ECB:PA_EXR(1.0)", + "rel":"provisionagreement", + "title":"resolvable uri to provision agreement", + "titles":{ + "en":"resolvable uri to provision agreement" + } + } + ], + "dimensions":{ + "dataSet":[ + { + "id":"FREQ", + "name":"Frequency", + "names":{ + "en":"Frequency" + }, + "role":"FREQ", + "keyPosition":0, + "values":[ + { + "id":"D", + "name":"Daily", + "names":{ + "en":"Daily" + } + } + ] + }, + { + "id":"CURRENCY_DENOM", + "name":"Currency denominator", + "names":{ + "en":"Currency denominator" + }, + "keyPosition":2, + "values":[ + { + "id":"EUR", + "name":"Euro", + "names":{ + "en":"Euro" + } + } + ] + }, + { + "id":"EXR_TYPE", + "name":"Exchange rate type", + "names":{ + "en":"Exchange rate type" + }, + "keyPosition":3, + "values":[ + { + "id":"SP00", + "name":"Spot rate", + "names":{ + "en":"Spot rate" + } + } + ] + }, + { + "id":"EXR_SUFFIX", + "name":"Series variation - EXR context", + "names":{ + "en":"Series variation - EXR context" + }, + "keyPosition":4, + "values":[ + { + "id":"A", + "name":"Average or standardised measure for given frequency", + "names":{ + "en":"Average or standardised measure for given frequency" + } + } + ] + } + ], + "series":[ + { + "id":"TIME_PERIOD", + "name":"Time period or range", + "names":{ + "en":"Time period or range" + }, + "role":"TIME_PERIOD", + "keyPosition":5, + "values":[ + { + "id":"2013-01-18", + "name":"2013-01-18", + "names":{ + "en":"2013-01-18" + }, + "start":"2013-01-18T00:00:00.000Z", + "end":"2013-01-18T23:59:59.999Z" + }, + { + "id":"2013-01-21", + "name":"2013-01-21", + "names":{ + "en":"2013-01-21" + }, + "start":"2013-01-21T00:00:00.000Z", + "end":"2013-01-21T23:59:59.999Z" + } + ] + } + ], + "observation":[ + { + "id":"CURRENCY", + "name":"Currency", + "names":{ + "en":"Currency" + }, + "keyPosition":1, + "values":[ + { + "id":"NZD", + "name":"New Zealand dollar", + "names":{ + "en":"New Zealand dollar" + } + }, + { + "id":"RUB", + "name":"Russian rouble", + "names":{ + "en":"Russian rouble" + } + } + ] + } + ] + }, + "attributes":{ + "dataSet":[ + { + "id":"TIME_FORMAT", + "name":"Time Format", + "names":{ + "en":"Time Format" + }, + "description":"Description for the attribute", + "descriptions":{ + "en":"Description for the attribute" + }, + "relationship":{ + "dataflow":{ + } + }, + "role":"TIME_FORMAT", + "default":"P1D", + "values":[ + { + "id":"P1D", + "name":"Daily", + "names":{ + "en":"Daily" + } + } + ] + } + ], + "series":[ + + ], + "observation":[ + { + "id":"TITLE", + "name":"Series title", + "names":{ + "en":"Series title" + }, + "relationship":{ + "dimensions":[ + "FREQ", + "CURRENCY", + "CURRENCY_DENOM", + "EXR_TYPE", + "EXR_SUFFIX" + ] + }, + "role":"TITLE", + "values":[ + { + "value":"New Zealand dollar (NZD)" + }, + { + "value":"Russian rouble (RUB)" + } + ] + }, + { + "id":"OBS_STATUS", + "name":"Observation status", + "names":{ + "en":"Observation status" + }, + "relationship":{ + "primaryMeasure":"OBS_VALUE" + }, + "values":[ + { + "id":"A", + "name":"Normal value", + "names":{ + "en":"Normal value" + } + } + ] + } + ] + } + } + ], + "dataSets":[ + { + "structure":0, + "links":[ + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=ECB:EXR(1.0)", + "rel":"dataflow" + } + ], + "action":"Replace", + "validFrom":"2012-03-20T15:00:16.000+01:00", + "series":{ + "0":{ + "attributes":[ + + ], + "observations":{ + "1":[ + 40.3426, + 0, + 1 + ] + } + }, + "1":{ + "attributes":[ + + ], + "observations":{ + "1":[ + 40.3, + 0, + 1 + ] + } + } + } + }, + { + "structure":0, + "links":[ + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=ECB:EXR(1.0)", + "rel":"dataflow" + } + ], + "action":"Delete", + "validTo":"2012-03-20T10:07:58.000+01:00", + "series":{ + "0":{ + "observations":{ + "0":[ + + ] + } + } + } + } + ] + } } diff --git a/data-message/samples/exr/exr-cross-section.json b/data-message/samples/exr/exr-cross-section.json index 8b3644a..a15dc24 100644 --- a/data-message/samples/exr/exr-cross-section.json +++ b/data-message/samples/exr/exr-cross-section.json @@ -1,228 +1,329 @@ { - "meta": { - "schema": "https://raw.githubusercontent.com/sdmx-twg/sdmx-json/develop/data-message/tools/schemas/1.0/sdmx-json-data-schema.json", - "id": "62b5f19d-f1c9-495d-8446-a3661ed24753", - "prepared": "2012-11-29T08:40:26Z", - "contentLanguages": [ "en", "fr-fr" ], - "sender": { - "id": "ECB", - "name": "European Central Bank", - "names": {"en": "European Central Bank"} - } - }, - "data": { - "structure": { - "links": [ - { - "href": "https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=ECB:EXR(1.0)", - "rel": "dataflow", - "title": "resolvable uri to dataflow", - "titles": {"en": "resolvable uri to dataflow"} - }, - { - "href": "https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", - "rel": "datastructure", - "title": "resolvable uri to datastructure", - "titles": {"en": "resolvable uri to datastructure"} - }, - { - "href": "https://sdw-wsrest.ecb.europa.eu/service/provisionagreement/ECB/PA_EXR", - "urn": "urn:sdmx:org.sdmx.infomodel.provisionagreement.ProvisionAgreement=ECB:PA_EXR(1.0)", - "rel": "provisionagreement", - "title": "resolvable uri to provision agreement", - "titles": {"en": "resolvable uri to provision agreement"} - } - ], - "dimensions": { - "dataSet": [ - { - "id": "FREQ", - "name": "Frequency", - "names": {"en": "Frequency"}, - "role": "FREQ", - "keyPosition": 0, - "values": [{ - "id": "D", - "name": "Daily", - "names": {"en": "Daily"} - }] - }, - { - "id": "CURRENCY_DENOM", - "name": "Currency denominator", - "names": {"en": "Currency denominator"}, - "keyPosition": 2, - "values": [{ - "id": "EUR", - "name": "Euro", - "names": {"en": "Euro"} - }] - }, - { - "id": "EXR_TYPE", - "name": "Exchange rate type", - "names": {"en": "Exchange rate type"}, - "keyPosition": 3, - "values": [{ - "id": "SP00", - "name": "Spot rate", - "names": {"en": "Spot rate"} - }] - }, - { - "id": "EXR_SUFFIX", - "name": "Series variation - EXR context", - "names": {"en": "Series variation - EXR context"}, - "keyPosition": 4, - "values": [{ - "id": "A", - "name": "Average or standardised measure for given frequency", - "names": {"en": "Average or standardised measure for given frequency"} - }] - } - ], - "series": [{ - "id": "TIME_PERIOD", - "name": "Time period or range", - "names": {"en": "Time period or range"}, - "keyPosition": 5, - "role": "TIME_PERIOD", - "keyPosition": 5, - "values": [ - { - "id": "2013-01-18", - "name": "2013-01-18", - "names": {"en": "2013-01-18"}, - "start": "2013-01-18T00:00:00.000Z", - "end": "2013-01-18T23:59:59.999Z" - }, - { - "id": "2013-01-21", - "name": "2013-01-21", - "names": {"en": "2013-01-21"}, - "start": "2013-01-21T00:00:00.000Z", - "end": "2013-01-21T23:59:59.999Z" - } - ] - }], - "observation": [{ - "id": "CURRENCY", - "name": "Currency", - "names": {"en": "Currency"}, - "keyPosition": 1, - "values": [ - { - "id": "NZD", - "name": "New Zealand dollar", - "names": {"en": "New Zealand dollar"} - }, - { - "id": "RUB", - "name": "Russian rouble", - "names": {"en": "Russian rouble"} - } - ] - }] - }, - "attributes": { - "dataSet": [{ - "id": "TIME_FORMAT", - "name": "Time Format", - "names": {"en": "Time Format"}, - "description": "Description for the attribute", - "descriptions": {"en": "Description for the attribute"}, - "relationship": { - "none": { - } + "meta":{ + "schema":"https://raw.githubusercontent.com/sdmx-twg/sdmx-json/master/data-message/tools/schemas/2.0.0/sdmx-json-data-schema.json", + "id":"62b5f19d-f1c9-495d-8446-a3661ed24753", + "prepared":"2021-03-17T22:57:33Z", + "contentLanguages":[ + "en", + "fr-fr" + ], + "sender":{ + "id":"ECB", + "name":"European Central Bank", + "names":{ + "en":"European Central Bank" + } + } + }, + "data":{ + "structures":[ + { + "dataSets":[ + 0 + ], + "links":[ + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=ECB:EXR(1.0)", + "rel":"dataflow", + "title":"resolvable uri to dataflow", + "titles":{ + "en":"resolvable uri to dataflow" + } + }, + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", + "rel":"datastructure", + "title":"resolvable uri to datastructure", + "titles":{ + "en":"resolvable uri to datastructure" + } + }, + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/provisionagreement/ECB/PA_EXR", + "urn":"urn:sdmx:org.sdmx.infomodel.provisionagreement.ProvisionAgreement=ECB:PA_EXR(1.0)", + "rel":"provisionagreement", + "title":"resolvable uri to provision agreement", + "titles":{ + "en":"resolvable uri to provision agreement" + } + } + ], + "dimensions":{ + "dataSet":[ + { + "id":"FREQ", + "name":"Frequency", + "names":{ + "en":"Frequency" + }, + "role":"FREQ", + "keyPosition":0, + "values":[ + { + "id":"D", + "name":"Daily", + "names":{ + "en":"Daily" + } + } + ] + }, + { + "id":"CURRENCY_DENOM", + "name":"Currency denominator", + "names":{ + "en":"Currency denominator" + }, + "keyPosition":2, + "values":[ + { + "id":"EUR", + "name":"Euro", + "names":{ + "en":"Euro" + } + } + ] }, - "role": "TIME_FORMAT", - "default": "P1D", - "values": [{ - "id": "P1D", - "name": "Daily", - "names": {"en": "Daily"} - }] - }], - "series": [], - "observation": [ - { - "id": "OBS_STATUS", - "name": "Observation status", - "names": {"en": "Observation status"}, - "relationship": {"primaryMeasure": "OBS_VALUE"}, - "values": [{ - "id": "A", - "name": "Normal value", - "names": {"en": "Normal value"} - }] - }, - { - "id": "TITLE", - "name": "Series title", - "names": {"en": "Series title"}, - "relationship": { - "dimensions": [ - "FREQ", "CURRENCY", "CURRENCY_DENOM", "EXR_TYPE", "EXR_SUFFIX" + { + "id":"EXR_TYPE", + "name":"Exchange rate type", + "names":{ + "en":"Exchange rate type" + }, + "keyPosition":3, + "values":[ + { + "id":"SP00", + "name":"Spot rate", + "names":{ + "en":"Spot rate" + } + } ] }, - "role": "TITLE", - "values": [ - {"name": "New Zealand dollar (NZD)"}, - {"name": "Russian rouble (RUB)"} - ] - } - ] - }, - "annotations": [{ - "title": "Sample series annotation title", - "type": "example", - "text": "Sample series annotation text", - "texts": {"en": "Sample series annotation text"}, - "id": "ABC123456" - }] - }, - "dataSets": [{ - "links": [{ - "href": "https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=ECB:EXR(1.0)", - "rel": "dataflow" - }], - "action": "Information", - "series": { - "0": { - "annotations": [0], - "attributes": [], - "observations": { - "0": [ - 1.5931, - 0, - 0 - ], - "1": [ - 40.3426, - 0, - 1 - ] - } - }, - "1": { - "attributes": [], - "observations": { - "0": [ - 1.5925, - 0, - 0 - ], - "1": [ - 40.3, - 0, - 1 - ] - } - } - } - }] - } + { + "id":"EXR_SUFFIX", + "name":"Series variation - EXR context", + "names":{ + "en":"Series variation - EXR context" + }, + "keyPosition":4, + "values":[ + { + "id":"A", + "name":"Average or standardised measure for given frequency", + "names":{ + "en":"Average or standardised measure for given frequency" + } + } + ] + } + ], + "series":[ + { + "id":"TIME_PERIOD", + "name":"Time period or range", + "names":{ + "en":"Time period or range" + }, + "keyPosition":5, + "role":"TIME_PERIOD", + "values":[ + { + "id":"2013-01-18", + "name":"2013-01-18", + "names":{ + "en":"2013-01-18" + }, + "start":"2013-01-18T00:00:00.000Z", + "end":"2013-01-18T23:59:59.999Z" + }, + { + "id":"2013-01-21", + "name":"2013-01-21", + "names":{ + "en":"2013-01-21" + }, + "start":"2013-01-21T00:00:00.000Z", + "end":"2013-01-21T23:59:59.999Z" + } + ] + } + ], + "observation":[ + { + "id":"CURRENCY", + "name":"Currency", + "names":{ + "en":"Currency" + }, + "keyPosition":1, + "values":[ + { + "id":"NZD", + "name":"New Zealand dollar", + "names":{ + "en":"New Zealand dollar" + } + }, + { + "id":"RUB", + "name":"Russian rouble", + "names":{ + "en":"Russian rouble" + } + } + ] + } + ] + }, + "attributes":{ + "dataSet":[ + { + "id":"TIME_FORMAT", + "name":"Time Format", + "names":{ + "en":"Time Format" + }, + "description":"Description for the attribute", + "descriptions":{ + "en":"Description for the attribute" + }, + "relationship":{ + "dataflow":{ + + } + }, + "role":"TIME_FORMAT", + "default":"P1D", + "values":[ + { + "id":"P1D", + "name":"Daily", + "names":{ + "en":"Daily" + } + } + ] + } + ], + "series":[ + + ], + "observation":[ + { + "id":"OBS_STATUS", + "name":"Observation status", + "names":{ + "en":"Observation status" + }, + "relationship":{ + "primaryMeasure":"OBS_VALUE" + }, + "values":[ + { + "id":"A", + "name":"Normal value", + "names":{ + "en":"Normal value" + } + } + ] + }, + { + "id":"TITLE", + "name":"Series title", + "names":{ + "en":"Series title" + }, + "relationship":{ + "dimensions":[ + "FREQ", + "CURRENCY", + "CURRENCY_DENOM", + "EXR_TYPE", + "EXR_SUFFIX" + ] + }, + "role":"TITLE", + "values":[ + { + "value":"New Zealand dollar (NZD)" + }, + { + "value":"Russian rouble (RUB)" + } + ] + } + ] + }, + "annotations":[ + { + "title":"Sample series annotation title", + "type":"example", + "text":"Sample series annotation text", + "texts":{ + "en":"Sample series annotation text" + }, + "id":"ABC123456" + } + ] + } + ], + "dataSets":[ + { + "structure":0, + "links":[ + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=ECB:EXR(1.0)", + "rel":"dataflow" + } + ], + "action":"Information", + "series":{ + "0":{ + "annotations":[ + 0 + ], + "attributes":[ + + ], + "observations":{ + "0":[ + 1.5931, + 0, + 0 + ], + "1":[ + 40.3426, + 0, + 1 + ] + } + }, + "1":{ + "attributes":[ + + ], + "observations":{ + "0":[ + 1.5925, + 0, + 0 + ], + "1":[ + 40.3, + 0, + 1 + ] + } + } + } + } + ] + } } diff --git a/data-message/samples/exr/exr-flat.json b/data-message/samples/exr/exr-flat.json index f840510..d2d3728 100644 --- a/data-message/samples/exr/exr-flat.json +++ b/data-message/samples/exr/exr-flat.json @@ -1,217 +1,315 @@ - { - "header": { - "id": "62b5f19d-f1c9-495d-8446-a3661ed24753", - "prepared": "2012-11-29T08:40:26Z", - "sender": { - "id": "ECB", - "name": "European Central Bank", - "names": {"en": "European Central Bank"} - } - }, - "structure": { - "links": [ - { - "href": "https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=ECB:EXR(1.0)", - "rel": "dataflow", - "title": "resolvable uri to dataflow", - "titles": {"en": "resolvable uri to dataflow"} - }, - { - "href": "https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", - "rel": "datastructure", - "title": "resolvable uri to datastructure", - "titles": {"en": "resolvable uri to datastructure"} - }, - { - "href": "https://sdw-wsrest.ecb.europa.eu/service/provisionagreement/ECB/PA_EXR", - "urn": "urn:sdmx:org.sdmx.infomodel.provisionagreement.ProvisionAgreement=ECB:PA_EXR(1.0)", - "rel": "provisionagreement", - "title": "resolvable uri to provision agreement", - "titles": {"en": "resolvable uri to provision agreement"} - } - ], - "dimensions": { - "dataSet": [ - { - "id": "FREQ", - "name": "Frequency", - "names": {"en": "Frequency"}, - "keyPosition": 0, - "role": "FREQ", - "values": [{ - "id": "D", - "name": "Daily", - "names": {"en": "Daily"} - }] - }, - { - "id": "CURRENCY_DENOM", - "name": "Currency denominator", - "names": {"en": "Currency denominator"}, - "keyPosition": 2, - "values": [{ - "id": "EUR", - "name": "Euro", - "names": {"en": "Euro"} - }] - }, - { - "id": "EXR_TYPE", - "name": "Exchange rate type", - "names": {"en": "Exchange rate type"}, - "keyPosition": 3, - "values": [{ - "id": "SP00", - "name": "Spot rate", - "names": {"en": "Spot rate"} - }] - }, - { - "id": "EXR_SUFFIX", - "name": "Series variation - EXR context", - "names": {"en": "Series variation - EXR context"}, - "keyPosition": 4, - "values": [{ - "id": "A", - "name": "Average or standardised measure for given frequency", - "names": {"en": "Average or standardised measure for given frequency"} - }] - } - ], - "series": [], - "observation": [ - { - "id": "CURRENCY", - "name": "Currency", - "names": {"en": "Currency"}, - "keyPosition": 1, - "values": [ - { - "id": "NZD", - "name": "New Zealand dollar", - "names": {"en": "New Zealand dollar"} - }, - { - "id": "RUB", - "name": "Russian rouble", - "names": {"en": "Russian rouble"} - } - ] - }, - { - "id": "TIME_PERIOD", - "name": "Time period or range", - "names": {"en": "Time period or range"}, - "role": "TIME_PERIOD", - "keyPosition": 5, - "values": [ - { - "id": "2013-01-18", - "name": "2013-01-18", - "names": {"en": "2013-01-18"}, - "start": "2013-01-18T00:00:00.000Z", - "end": "2013-01-18T23:59:59.999Z" - }, - { - "id": "2013-01-21", - "name": "2013-01-21", - "names": {"en": "2013-01-21"}, - "start": "2013-01-21T00:00:00.000Z", - "end": "2013-01-21T23:59:59.999Z" - } - ] - } - ] - }, - "attributes": { - "dataSet": [{ - "id": "TIME_FORMAT", - "name": "Time Format", - "names": {"en": "Time Format"}, - "description": "Description for the attribute", - "descriptions": {"en": "Description for the attribute"}, - "relationship": {"none": {}}, - "role": "TIME_FORMAT", - "default": "P1D", - "values": [{ - "id": "P1D", - "name": "Daily", - "names": {"en": "Daily"} - }] - }], - "series": [], - "observation": [ - { - "id": "TITLE", - "name": "Series title", - "names": {"en": "Series title"}, - "relationship": {"dimensions": [ - "FREQ", - "CURRENCY", - "CURRENCY_DENOM", - "EXR_TYPE", - "EXR_SUFFIX" - ]}, - "role": "TITLE", - "values": [ - {"name": "New Zealand dollar (NZD)"}, - {"name": "Russian rouble (RUB)"} - ] - }, - { - "id": "OBS_STATUS", - "name": "Observation status", - "names": {"en": "Observation status"}, - "relationship": {"primaryMeasure": "OBS_VALUE"}, - "role": "OBS_STATUS", - "values": [{ - "id": "A", - "name": "Normal value", - "names": {"en": "Normal value"} - }] - } - ] - }, - "annotations": [{ - "title": "Sample observation annotation title", - "type": "example", - "text": "Sample observation annotation text", - "texts": {"en": "Sample observation annotation text"}, - "id": "XYZ98765" - }] - }, - "dataSets": [{ - "links": [{ - "href": "https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=ECB:EXR(1.0)", - "rel": "dataflow" - }], - "action": "Information", - "observations": { - "0:0": [ - 1.5931, - 0, - 0 - ], - "0:1": [ - 1.5925, - 0, - 0, - 0 - ], - "1:0": [ - 40.3426, - 1, - 0 - ], - "1:1": [ - 40.3, - 1, - 0 - ] - } - } - ] +{ + "meta":{ + "schema":"https://raw.githubusercontent.com/sdmx-twg/sdmx-json/master/data-message/tools/schemas/2.0.0/sdmx-json-data-schema.json", + "id":"IT1001", + "prepared":"2018-03-11T14:30:47", + "test":true, + "contentLanguages":[ + "en" + ], + "sender":{ + "id":"IMF", + "name":"European Central Bank", + "names":{ + "en":"European Central Bank" + } + } + }, + "data":{ + "structures":[ + { + "dataSets":[ + 0 + ], + "links":[ + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=ECB:EXR(1.0)", + "rel":"dataflow", + "title":"resolvable uri to dataflow", + "titles":{ + "en":"resolvable uri to dataflow" + } + }, + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", + "rel":"datastructure", + "title":"resolvable uri to datastructure", + "titles":{ + "en":"resolvable uri to datastructure" + } + }, + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/provisionagreement/ECB/PA_EXR", + "urn":"urn:sdmx:org.sdmx.infomodel.provisionagreement.ProvisionAgreement=ECB:PA_EXR(1.0)", + "rel":"provisionagreement", + "title":"resolvable uri to provision agreement", + "titles":{ + "en":"resolvable uri to provision agreement" + } + } + ], + "dimensions":{ + "dataSet":[ + { + "id":"FREQ", + "name":"Frequency", + "names":{ + "en":"Frequency" + }, + "keyPosition":0, + "role":"FREQ", + "values":[ + { + "id":"D", + "name":"Daily", + "names":{ + "en":"Daily" + } + } + ] + }, + { + "id":"CURRENCY_DENOM", + "name":"Currency denominator", + "names":{ + "en":"Currency denominator" + }, + "keyPosition":2, + "values":[ + { + "id":"EUR", + "name":"Euro", + "names":{ + "en":"Euro" + } + } + ] + }, + { + "id":"EXR_TYPE", + "name":"Exchange rate type", + "names":{ + "en":"Exchange rate type" + }, + "keyPosition":3, + "values":[ + { + "id":"SP00", + "name":"Spot rate", + "names":{ + "en":"Spot rate" + } + } + ] + }, + { + "id":"EXR_SUFFIX", + "name":"Series variation - EXR context", + "names":{ + "en":"Series variation - EXR context" + }, + "keyPosition":4, + "values":[ + { + "id":"A", + "name":"Average or standardised measure for given frequency", + "names":{ + "en":"Average or standardised measure for given frequency" + } + } + ] + } + ], + "series":[ + + ], + "observation":[ + { + "id":"CURRENCY", + "name":"Currency", + "names":{ + "en":"Currency" + }, + "keyPosition":1, + "values":[ + { + "id":"NZD", + "name":"New Zealand dollar", + "names":{ + "en":"New Zealand dollar" + } + }, + { + "id":"RUB", + "name":"Russian rouble", + "names":{ + "en":"Russian rouble" + } + } + ] + }, + { + "id":"TIME_PERIOD", + "name":"Time period or range", + "names":{ + "en":"Time period or range" + }, + "role":"TIME_PERIOD", + "keyPosition":5, + "values":[ + { + "id":"2013-01-18", + "name":"2013-01-18", + "names":{ + "en":"2013-01-18" + }, + "start":"2013-01-18T00:00:00.000Z", + "end":"2013-01-18T23:59:59.999Z" + }, + { + "id":"2013-01-21", + "name":"2013-01-21", + "names":{ + "en":"2013-01-21" + }, + "start":"2013-01-21T00:00:00.000Z", + "end":"2013-01-21T23:59:59.999Z" + } + ] + } + ] + }, + "attributes":{ + "dataSet":[ + { + "id":"TIME_FORMAT", + "name":"Time Format", + "names":{ + "en":"Time Format" + }, + "description":"Description for the attribute", + "descriptions":{ + "en":"Description for the attribute" + }, + "relationship":{ + "dataflow":{ + + } + }, + "role":"TIME_FORMAT", + "default":"P1D", + "values":[ + { + "id":"P1D", + "name":"Daily", + "names":{ + "en":"Daily" + } + } + ] + } + ], + "series":[ + + ], + "observation":[ + { + "id":"TITLE", + "name":"Series title", + "names":{ + "en":"Series title" + }, + "relationship":{ + "dimensions":[ + "FREQ", + "CURRENCY", + "CURRENCY_DENOM", + "EXR_TYPE", + "EXR_SUFFIX" + ] + }, + "role":"TITLE", + "values":[ + { + "value":"New Zealand dollar (NZD)" + }, + { + "value":"Russian rouble (RUB)" + } + ] + }, + { + "id":"OBS_STATUS", + "name":"Observation status", + "names":{ + "en":"Observation status" + }, + "relationship":{ + "primaryMeasure":"OBS_VALUE" + }, + "role":"OBS_STATUS", + "values":[ + { + "id":"A", + "name":"Normal value", + "names":{ + "en":"Normal value" + } + } + ] + } + ] + }, + "annotations":[ + { + "title":"Sample observation annotation title", + "type":"example", + "text":"Sample observation annotation text", + "texts":{ + "en":"Sample observation annotation text" + }, + "id":"XYZ98765" + } + ] + } + ], + "dataSets":[ + { + "structure":0, + "links":[ + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=ECB:EXR(1.0)", + "rel":"dataflow" + } + ], + "action":"Information", + "observations":{ + "0:0":[ + 1.5931, + 0, + 0 + ], + "0:1":[ + 1.5925, + 0, + 0, + 0 + ], + "1:0":[ + 40.3426, + 1, + 0 + ], + "1:1":[ + 40.3, + 1, + 0 + ] + } + } + ] + } } diff --git a/data-message/samples/exr/exr-time-series.json b/data-message/samples/exr/exr-time-series.json index eb75397..9d98b49 100644 --- a/data-message/samples/exr/exr-time-series.json +++ b/data-message/samples/exr/exr-time-series.json @@ -1,225 +1,335 @@ - { - "header": { - "id": "62b5f19d-f1c9-495d-8446-a3661ed24753", - "prepared": "2012-11-29T08:40:26Z", - "sender": { - "id": "ECB", - "name": "European Central Bank", - "names": {"en": "European Central Bank"} - } - }, - "structure": { - "links": [ - { - "href": "https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=ECB:EXR(1.0)", - "rel": "dataflow", - "title": "resolvable uri to dataflow", - "titles": {"en": "resolvable uri to dataflow"} - }, - { - "href": "https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", - "rel": "datastructure", - "title": "resolvable uri to datastructure", - "titles": {"en": "resolvable uri to datastructure"} - }, - { - "href": "https://sdw-wsrest.ecb.europa.eu/service/provisionagreement/ECB/PA_EXR", - "urn": "urn:sdmx:org.sdmx.infomodel.provisionagreement.ProvisionAgreement=ECB:PA_EXR(1.0)", - "rel": "provisionagreement", - "title": "resolvable uri to provision agreement", - "titles": {"en": "resolvable uri to provision agreement"} - } - ], - "dimensions": { - "dataSet": [ - { - "id": "FREQ", - "name": "Frequency", - "names": {"en": "Frequency"}, - "role": "FREQ", - "keyPosition": 0, - "values": [{ - "id": "D", - "name": "Daily", - "names": {"en": "Daily"} - }] - }, - { - "id": "CURRENCY_DENOM", - "name": "Currency denominator", - "names": {"en": "Currency denominator"}, - "keyPosition": 2, - "values": [{ - "id": "EUR", - "name": "Euro", - "names": {"en": "Euro"} - }] - }, - { - "id": "EXR_TYPE", - "name": "Exchange rate type", - "names": {"en": "Exchange rate type"}, - "keyPosition": 3, - "values": [{ - "id": "SP00", - "name": "Spot rate", - "names": {"en": "Spot rate"} - }] - }, - { - "id": "EXR_SUFFIX", - "name": "Series variation - EXR context", - "names": {"en": "Series variation - EXR context"}, - "keyPosition": 4, - "values": [{ - "id": "A", - "name": "Average or standardised measure for given frequency", - "names": {"en": "Average or standardised measure for given frequency"} - }] - } - ], - "series": [{ - "id": "CURRENCY", - "name": "Currency", - "names": {"en": "Currency"}, - "keyPosition": 1, - "values": [ - { - "id": "NZD", - "name": "New Zealand dollar", - "names": {"en": "New Zealand dollar"} - }, - { - "id": "RUB", - "name": "Russian rouble", - "names": {"en": "Russian rouble"} - } - ] - }], - "observation": [{ - "id": "TIME_PERIOD", - "name": "Time period or range", - "names": {"en": "Time period or range"}, - "role": "TIME_PERIOD", - "values": [ - { - "id": "2013-01-18", - "name": "2013-01-18", - "names": {"en": "2013-01-18"}, - "start": "2013-01-18T00:00:00.000Z", - "end": "2013-01-18T23:59:59.999Z" - }, - { - "id": "2013-01-21", - "name": "2013-01-21", - "names": {"en": "2013-01-21"}, - "start": "2013-01-21T00:00:00.000Z", - "end": "2013-01-21T23:59:59.999Z" - } - ] - }] - }, - "attributes": { - "dataSet": [{ - "id": "TIME_FORMAT", - "name": "Time Format", - "names": {"en": "Time Format"}, - "description": "Description for the attribute", - "descriptions": {"en": "Description for the attribute"}, - "relationship": {"none": {}}, - "role": "TIME_FORMAT", - "default": "P1D", - "values": [{ - "id": "P1D", - "name": "Daily", - "names": {"en": "Daily"} - }] - }], - "series": [{ - "id": "TITLE", - "name": "Series title", - "names": {"en": "Series title"}, - "relationship": {"dimensions": [ - "FREQ", - "CURRENCY", - "CURRENCY_DENOM", - "EXR_TYPE", - "EXR_SUFFIX" - ]}, - "role": "TITLE", - "values": [ - {"name": "New Zealand dollar (NZD)"}, - {"name": "Russian rouble (RUB)"} - ] - }], - "observation": [{ - "id": "OBS_STATUS", - "name": "Observation status", - "names": {"en": "Observation status"}, - "relationship": {"primaryMeasure": "OBS_VALUE"}, - "role": "OBS_STATUS", - "values": [{ - "id": "A", - "name": "Normal value", - "names": {"en": "Normal value"} - }] - }] - }, - "annotations": [ - { - "title": "Sample series annotation title", - "type": "example", - "text": "Sample series annotation text", - "texts": {"en": "Sample series annotation text"}, - "id": "ABC123456" - }, - { - "title": "Sample observation annotation title", - "type": "example", - "text": "Sample observation annotation text", - "texts": {"en": "Sample observation annotation text"}, - "id": "XYZ98765" - } - ] - }, - "dataSets": [{ - "links": [{ - "href": "https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", - "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=ECB:EXR(1.0)", - "rel": "dataflow" - }], - "action": "Information", - "series": { - "0": { - "annotations": [0], - "attributes": [0], - "observations": { - "0": [ - 1.5931, - 0 - ], - "1": [ - 1.5925, - 0 - ] - } - }, - "1": { - "attributes": [1], - "observations": { - "0": [ - 40.3426, - 0 - ], - "1": [ - 40.3, - 0, - 1 - ] - } - } - } - }] +{ + "meta":{ + "schema":"https://raw.githubusercontent.com/sdmx-twg/sdmx-json/master/data-message/tools/schemas/2.0.0/sdmx-json-data-schema.json", + "id":"IT1001", + "prepared":"2018-03-11T14:30:47", + "test":true, + "contentLanguages":[ + "en" + ], + "sender":{ + "id":"IMF", + "name":"European Central Bank", + "names":{ + "en":"European Central Bank" + } + } + }, + "data":{ + "structures":[ + { + "dataSets":[ + 0 + ], + "links":[ + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=ECB:EXR(1.0)", + "rel":"dataflow", + "title":"resolvable uri to dataflow", + "titles":{ + "en":"resolvable uri to dataflow" + } + }, + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)", + "rel":"datastructure", + "title":"resolvable uri to datastructure", + "titles":{ + "en":"resolvable uri to datastructure" + } + }, + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/provisionagreement/ECB/PA_EXR", + "urn":"urn:sdmx:org.sdmx.infomodel.provisionagreement.ProvisionAgreement=ECB:PA_EXR(1.0)", + "rel":"provisionagreement", + "title":"resolvable uri to provision agreement", + "titles":{ + "en":"resolvable uri to provision agreement" + } + } + ], + "dimensions":{ + "dataSet":[ + { + "id":"FREQ", + "name":"Frequency", + "names":{ + "en":"Frequency" + }, + "role":"FREQ", + "keyPosition":0, + "values":[ + { + "id":"D", + "name":"Daily", + "names":{ + "en":"Daily" + } + } + ] + }, + { + "id":"CURRENCY_DENOM", + "name":"Currency denominator", + "names":{ + "en":"Currency denominator" + }, + "keyPosition":2, + "values":[ + { + "id":"EUR", + "name":"Euro", + "names":{ + "en":"Euro" + } + } + ] + }, + { + "id":"EXR_TYPE", + "name":"Exchange rate type", + "names":{ + "en":"Exchange rate type" + }, + "keyPosition":3, + "values":[ + { + "id":"SP00", + "name":"Spot rate", + "names":{ + "en":"Spot rate" + } + } + ] + }, + { + "id":"EXR_SUFFIX", + "name":"Series variation - EXR context", + "names":{ + "en":"Series variation - EXR context" + }, + "keyPosition":4, + "values":[ + { + "id":"A", + "name":"Average or standardised measure for given frequency", + "names":{ + "en":"Average or standardised measure for given frequency" + } + } + ] + } + ], + "series":[ + { + "id":"CURRENCY", + "name":"Currency", + "names":{ + "en":"Currency" + }, + "keyPosition":1, + "values":[ + { + "id":"NZD", + "name":"New Zealand dollar", + "names":{ + "en":"New Zealand dollar" + } + }, + { + "id":"RUB", + "name":"Russian rouble", + "names":{ + "en":"Russian rouble" + } + } + ] + } + ], + "observation":[ + { + "id":"TIME_PERIOD", + "name":"Time period or range", + "names":{ + "en":"Time period or range" + }, + "keyPosition":5, + "role":"TIME_PERIOD", + "values":[ + { + "id":"2013-01-18", + "name":"2013-01-18", + "names":{ + "en":"2013-01-18" + }, + "start":"2013-01-18T00:00:00.000Z", + "end":"2013-01-18T23:59:59.999Z" + }, + { + "id":"2013-01-21", + "name":"2013-01-21", + "names":{ + "en":"2013-01-21" + }, + "start":"2013-01-21T00:00:00.000Z", + "end":"2013-01-21T23:59:59.999Z" + } + ] + } + ] + }, + "attributes":{ + "dataSet":[ + { + "id":"TIME_FORMAT", + "name":"Time Format", + "names":{ + "en":"Time Format" + }, + "description":"Description for the attribute", + "descriptions":{ + "en":"Description for the attribute" + }, + "relationship":{ + "dataflow":{ + + } + }, + "role":"TIME_FORMAT", + "default":"P1D", + "values":[ + { + "id":"P1D", + "name":"Daily", + "names":{ + "en":"Daily" + } + } + ] + } + ], + "series":[ + { + "id":"TITLE", + "name":"Series title", + "names":{ + "en":"Series title" + }, + "relationship":{ + "dimensions":[ + "FREQ", + "CURRENCY", + "CURRENCY_DENOM", + "EXR_TYPE", + "EXR_SUFFIX" + ] + }, + "role":"TITLE", + "values":[ + { + "value":"New Zealand dollar (NZD)" + }, + { + "value":"Russian rouble (RUB)" + } + ] + } + ], + "observation":[ + { + "id":"OBS_STATUS", + "name":"Observation status", + "names":{ + "en":"Observation status" + }, + "relationship":{ + "primaryMeasure":"OBS_VALUE" + }, + "role":"OBS_STATUS", + "values":[ + { + "id":"A", + "name":"Normal value", + "names":{ + "en":"Normal value" + } + } + ] + } + ] + }, + "annotations":[ + { + "title":"Sample series annotation title", + "type":"example", + "text":"Sample series annotation text", + "texts":{ + "en":"Sample series annotation text" + }, + "id":"ABC123456" + }, + { + "title":"Sample observation annotation title", + "type":"example", + "text":"Sample observation annotation text", + "texts":{ + "en":"Sample observation annotation text" + }, + "id":"XYZ98765" + } + ] + } + ], + "dataSets":[ + { + "structure":0, + "links":[ + { + "href":"https://sdw-wsrest.ecb.europa.eu/service/dataflow/ECB/EXR/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=ECB:EXR(1.0)", + "rel":"dataflow" + } + ], + "action":"Information", + "series":{ + "0":{ + "annotations":[ + 0 + ], + "attributes":[ + 0 + ], + "observations":{ + "0":[ + 1.5931, + 0 + ], + "1":[ + 1.5925, + 0 + ] + } + }, + "1":{ + "attributes":[ + 1 + ], + "observations":{ + "0":[ + 40.3426, + 0 + ], + "1":[ + 40.3, + 0, + 1 + ] + } + } + } + } + ] } +} diff --git a/data-message/samples/generated-sample.json b/data-message/samples/generated-sample.json new file mode 100644 index 0000000..3278b70 --- /dev/null +++ b/data-message/samples/generated-sample.json @@ -0,0 +1,2944 @@ +{ + "errors":[ + { + "code":90483457.7170785, + "links":[ + { + "href":"http://pUJaPHEeINvtthHXFshGsGCbxaW.szfPda3", + "rel":"anim Lorem", + "titles":{ + "i-hak":"sed do ipsum ut", + "x-nhux4":"cupidatat Ut eiusmod", + "x-n0je9dq-3aqokbe":"sint sunt dolore nisi", + "cel-gaulish":"velit aute Duis" + }, + "uri":"https://ecEURTeqagBYutUm.uwlzZwaz", + "hreflang":"sgn-CH-DE", + "title":"Ut do quis", + "type":"laborum" + }, + { + "href":"http://RXVX.wdRy", + "rel":"Ut Excepteur adipisicing reprehenderit ullamco", + "title":"dolor voluptate esse laborum adipisicing", + "hreflang":"x-dow1xuf", + "titles":{ + "jqgkycua-wexi-r-fgyizqgk-3krxhoa":"pariatur", + "aaylw-911-x-pmwgil-dlfjg":"mollit nisi" + }, + "type":"magna reprehenderit voluptate qui sit", + "uri":"https://nvHiZbucDAGvpzxoOdgRpeoCwMSv.ctkkDZ0" + } + ], + "detail":"mollit occaecat enim", + "title":"nisi", + "details":{ + "hpmsqkii-hcny-yz-xpq8z6":"laboris dolore", + "x-h-sloz1":"nulla ex" + }, + "titles":{ + "x-7wheu3f":"Duis qui tempor sint consequat", + "x-btj1js-hg":"do enim dolor veniam" + } + }, + { + "code":-46883339.466014504, + "details":{ + "vbbo-x-pis":"nostrud velit cillum" + }, + "title":"ad reprehenderit veniam", + "links":[ + { + "urn":"https://oQOiQaOGSOrSfT.bjgszV", + "rel":"dataflow", + "titles":{ + "swxdrk-wphs":"ipsum dolore reprehenderit proident" + }, + "type":"magna", + "hreflang":"lgpf-xyqn-814-n-07a327-x-rq24qhc-lpjwro", + "title":"mollit pariatur ut", + "uri":"http://JVlhx.ocfE" + }, + { + "href":"https://EvHrfFoTokOmopTGvWW.waklM", + "rel":"ut ea in laborum ex", + "title":"pariatur anim ipsum minim", + "type":"adipisicing pariatur dolor sed", + "titles":{ + "x-e6y-p":"mollit sint", + "pxyja-mshs-it-x-k4w6v4tx-q":"nisi in Ut reprehenderit ut" + }, + "uri":"http://hHkVxdZFllrDONJvBK.xsILb0", + "hreflang":"px-wpi-goe-dto-gkhh-x-lh7wlfy-n3nhq1" + } + ], + "titles":{ + "x-xj8p8ypx-g2hk175r":"consequat id commodo", + "pzug-ydnf":"dolor", + "zh-hakka":"labore est nisi consectetur", + "i-ami":"nulla" + }, + "detail":"consectetur magna adipisicing dolor" + } + ], + "data":{ + "dataSets":[ + { + "structure":0, + "links":[ + { + "href":"http://AOjHuXevagjEzwQYWh.twlfIDT", + "rel":"predecessor-version", + "title":"et", + "titles":{ + "x-3":"deserunt nulla", + "i-tsu":"ut fugiat" + }, + "hreflang":"x-26rej", + "uri":"http://h.iqiAds5", + "type":"pariatur magna sit Ut" + }, + { + "urn":"https://WYAMBRdnIjcAnMQGgog.xaNB", + "rel":"last", + "type":"eiusmod", + "uri":"http://nEevwlHFlPgODmMo.ajdmk", + "hreflang":"fm-oxy-epj-rkf-fhfo-uk-fnmsm-q-pb401eg-hfk41lm", + "titles":{ + "sgn-CH-DE":"Ut consequat Excepteur" + }, + "title":"ad" + } + ], + "reportingBegin":"eu officia", + "series":{ + "72:10":{ + "attributes":[ + { + "aep-elih-ev-1z16-x-a-op1ax1jj":"ipsum fugiat adipisicing aliquip nisi", + "fuhi-565":"labore Ut", + "x-jxzt3-bs9z":"do sunt" + }, + "aute" + ], + "annotations":[ + 56463713, + 44352289 + ], + "observations":{ + "31":[ + null, + 2075588 + ] + } + } + }, + "observations":{ + "45":[ + null, + "Lorem dolore dolor Ut" + ] + }, + "dimensionGroupAttributes":{ + "80:":[ + 66315537.574401654, + null + ] + }, + "validTo":"1955-07-16T00:22:42.891Z", + "publicationYear":"consectetur ad nostrud", + "validFrom":"1970-01-28T19:36:02.114Z", + "publicationPeriod":"eu elit sunt", + "annotations":[ + 38166713, + 35208007 + ], + "attributes":[ + [ + { + "x-cuwvl2b3-evb0":"qui ipsum dolor mollit", + "x-n5qzmyi-nhi3":"officia" + }, + { + "no-nyn":"dolor qui quis", + "yurg-448-750413-x-fksv-qra52":"Lorem culpa ut irure veniam" + } + ], + [ + { + "x-y7kzm":"dolor" + }, + { + "x-a5bkt":"in proident nulla Ut do", + "en-GB-oed":"tempor enim" + } + ] + ], + "action":"Delete", + "reportingEnd":"exercitation" + }, + { + "structure":0, + "links":[ + { + "urn":"https://FjyyfJgaZIctxKERLZGEieuLzKeJpAQZk.vcYj", + "rel":"structureset", + "hreflang":"x-85ybs0l", + "type":"Excepteur irure nostrud nisi qui", + "titles":{ + "siqtkkut":"tempor est Lorem deserunt dolor" + }, + "title":"magna", + "uri":"https://bzlYdtWIrfVgUkEgXIgtoMCjHgh.zkkdM" + }, + { + "href":"http://eKfGLpUtmbWxMdVYJWRyjtxiPMjjyMRB.xijhrc", + "rel":"categorisation", + "uri":"http://juCsOOTcePdXOaQjJLnW.sjp", + "type":"elit sunt cupidatat proident dolore", + "title":"do exercitation consectetur est sint", + "titles":{ + "te-jorq-b-d9z2fnti-x-z3u29lt":"culpa proident commodo eiusmod", + "x-op7yu1-6m8r":"voluptate exercitation ut pariatur minim", + "pbumffzo-hith-6d8v-f-fmff8ql-x-5v-zsjpm":"cupidatat in ut", + "x-c3":"dolor aliqua" + }, + "hreflang":"x-z90vs" + } + ], + "validTo":"1944-12-03T11:01:04.743Z", + "dimensionGroupAttributes":{ + ":0:98:6":[ + "ad", + { + "x-5hq0web-ladxq0yr":"sed aute Duis laboris" + } + ] + }, + "reportingBegin":"non anim est Ut adipisicing", + "observations":{ + "7:54":[ + null, + 40894874 + ] + }, + "publicationPeriod":"Excepteur", + "attributes":[ + { + "nqn-871-4doeup-x-biuf-ju5x":"dolor fugiat ut", + "zddczu-leaa-yrbj89-x-kmtt1":"dolor deserunt sit", + "sgn-CH-DE":"voluptate enim velit dolore" + }, + null + ], + "action":"Information", + "publicationYear":"et mollit magna consequat", + "series":{ + "1":{ + "observations":{ + "8":[ + 29083297, + 4039392.2015168965 + ] + }, + "annotations":[ + 22411628, + 84407520 + ], + "attributes":[ + { + "ugiag-tnjv-x-wqjzkqq-j0p":"voluptate nisi", + "x-2":"culpa ut", + "sgn-CH-DE":"elit sunt cillum deserunt" + }, + 43494865 + ] + } + }, + "reportingEnd":"in sit nulla et velit", + "annotations":[ + 54943372, + 50888476 + ], + "validFrom":"1973-08-28T02:53:45.631Z" + } + ], + "structures":[ + { + "dimensions":{ + "series":[ + { + "id":"o", + "keyPosition":25331115, + "values":[ + { + "annotations":[ + 53091293, + 75136896 + ], + "parent":"I2", + "end":"2007-08-26T08:40:05.499Z", + "description":"amet do", + "id":"Rk", + "links":[ + { + "href":"http://yIDNAlZn.sxvYN", + "rel":"eiusmod enim pariatur", + "type":"Duis", + "hreflang":"x-0m-a5", + "titles":{ + "eh-tfqn":"officia", + "i-ami":"pariatur incididunt voluptate culpa" + }, + "title":"non eu", + "uri":"https://irFbhNlyMzrPPlKjNZ.bcnaa1Lx" + }, + { + "href":"http://LVzzIkuejQUvcikcxhMjENCf.wjftvlZ", + "rel":"section", + "hreflang":"zjiissf-sett-1k0s-l-l76lj53-p2eqj", + "type":"esse laborum sunt", + "title":"deserunt", + "titles":{ + "x-hzg-iwp":"minim Lorem culpa", + "byj-cvb-gkpe-lo6xrd8w":"eu tempor", + "zh-guoyu":"sed occaecat nulla dolor", + "erzl-xzpl-zq-0dij-g-imo-bjt1gvgx":"laboris labore voluptate sint", + "affd-775":"in" + }, + "uri":"http://FrHvivjtjfIbtSDyMhLSeDTSJhjsli.qhZq" + } + ], + "order":36768717, + "names":{ + "art-lojban":"consequat sed cillum consectetur" + }, + "start":"2009-11-19T22:53:37.357Z", + "descriptions":{ + "x-k5-x0lg2":"id nostrud", + "ljfo-nmpb-0r8bb":"enim adipisicing non", + "art-lojban":"Excepteur non dolor commodo laboris" + }, + "name":"ut" + }, + { + "description":"aute consectetur", + "descriptions":{ + "urnf-syhy-x-izl80yu-4":"in" + }, + "annotations":[ + 48774402, + 47941835 + ], + "links":[ + { + "urn":"https://xcixDhMBG.avosN", + "rel":"in consequat dolore Duis", + "title":"in", + "type":"laborum", + "titles":{ + "x-6a9-fy4":"ut incididunt do elit" + }, + "hreflang":"vxkmlpmq-vusv-zc-x-rxbyjt9", + "uri":"https://EfjPdRRBSsykz.ebxVy" + }, + { + "href":"http://FpIJjCSOZaKBDudaRrnrRVNddZjqtt.thZogM", + "rel":"constraint", + "hreflang":"art-lojban", + "type":"fugiat dolor adipisicing reprehenderit et", + "uri":"http://INBKUNiMExNs.jawoyr", + "title":"non commodo", + "titles":{ + "cccve-x-hhtgu6-es":"enim id in sint fugiat", + "x-z6-tvaxbw":"dolore", + "x-w":"aliquip sed laboris" + } + } + ], + "name":"velit", + "start":"1994-11-18T03:25:00.335Z", + "parent":"H", + "names":{ + "x-6lc3-en903i":"sed adipisicing", + "aaxoki-x-b1j437-jv95qql0":"voluptate" + }, + "id":"4", + "end":"2010-11-03T03:26:35.578Z", + "order":68886464 + } + ], + "description":"ut ut Lorem non", + "roles":[ + "M", + "A" + ], + "format":{ + "pattern":"Excepteur reprehenderit", + "maxLength":87817361, + "minValue":65951864, + "minLength":78376264, + "dataType":"ReportingQuarter", + "maxValue":74939381 + }, + "annotations":[ + 94363, + 9914457 + ], + "descriptions":{ + "ryvj-bvhp-x-k-t35":"amet ea sunt consectetur", + "knusg-gaii":"adipisicing Excepteur officia", + "uaf-gaw-dnw-fpc-353-x-o3yet378":"deserunt nisi sit", + "x-n6ju-y":"Duis tempor", + "pfgogbf-wuok-179-3f9frnq-u-4i3mt2q":"proident cillum" + }, + "links":[ + { + "href":"http://Epw.eniwd", + "rel":"ut ipsum labore", + "hreflang":"pcsbrn-vr-1dkm6", + "title":"aliquip do cillum irure in", + "type":"sit nostrud proident aliquip in", + "uri":"http://PD.umcuy2", + "titles":{ + "xj-xko-wsz-nhb-vuxt-3-hp-x-zemq0u-pyo9kfz":"laborum Lorem minim irure nisi", + "hxlzwfp-ey-x-jj-9":"aliqua consequat reprehenderit in aliquip", + "iuck-psqp-289":"minim cupidatat", + "x-4i1mpb-2zd":"incididunt anim velit laborum", + "x-n58o11z":"deserunt eu laboris", + "nzacpqnm-450-7mf6":"ut in Excepteur tempor occaecat" + } + }, + { + "urn":"https://JRxkxkX.iiQB9", + "rel":"chapter", + "type":"irure in", + "title":"Excepteur aliquip", + "hreflang":"x-se29km4-otbp8", + "titles":{ + "fvd-yxk-wh-7-l8b0quq-x52u1obd-x-3cc7k-dvp":"ullamco labore elit anim in" + }, + "uri":"https://kRNKjtXw.xhpH" + } + ], + "names":{ + "x-fuckt-slw1ccc":"mollit cillum eu" + }, + "name":"elit" + }, + { + "id":"B", + "keyPosition":68241760, + "values":[ + { + "id":"4", + "name":"magna veniam", + "descriptions":{ + "x-c9":"consectetur non deserunt exercitation", + "x-y-dh":"dolore ut sint nulla" + }, + "annotations":[ + 26723461, + 64282871 + ], + "description":"Duis consequat enim", + "order":67567960, + "links":[ + { + "urn":"https://ptXvIslfGCiYRujytmpOtZpDsFKlRud.zgnabyU", + "rel":"successor-version", + "hreflang":"nfebd-k-62xte-c5p-x-q5gmc-sh8qsdx", + "title":"qui in Lorem reprehenderit", + "type":"nulla amet", + "titles":{ + "guf-hul-ixd-749":"non et occaecat voluptate in" + }, + "uri":"http://pAmMmKwNRyCuVZd.poQ" + }, + { + "href":"http://UlykxeLKigeFzpVazBtnDFfsPCZR.rut", + "rel":"via", + "title":"consectetur adipisicing", + "hreflang":"x-f-s", + "uri":"https://THEQomYOJZMyApQeAGBHVwVvpSRSoT.mpbt", + "type":"mollit Lorem reprehenderit", + "titles":{ + "sgn-CH-DE":"in Duis ad elit proident", + "x-fp0n":"cillum commodo qui nulla non" + } + } + ], + "end":"1955-01-03T16:42:21.849Z", + "parent":"x", + "start":"1961-02-18T01:46:49.044Z" + }, + { + "value":-21537902.716531128, + "descriptions":{ + "x-q8v-o2vv7ox4":"ex magna esse incididunt" + }, + "order":94536261, + "parent":"J", + "links":[ + { + "href":"https://ivvDlIznRIyVhAlnwZbgjpmVZdpx.yiCx", + "rel":"incididunt sunt", + "titles":{ + "i-lux":"Duis", + "cqcit-z-ggziiwx":"Duis cupidatat et" + }, + "hreflang":"x-wf-ers006", + "type":"exercitation", + "title":"consectetur", + "uri":"http://BPSJUYhOzvDwFTjTuKyVPpnsZLCZEePyo.sfLK" + }, + { + "href":"https://tCfbVLgbyFTAayJrpcsmJbSPJjncaXVOO.xbAA", + "rel":"organisationunitscheme", + "hreflang":"jaff-gole-0t7a", + "titles":{ + "i-ami":"Excepteur enim eu id", + "x-i-gahwn":"nisi", + "i-tsu":"culpa" + }, + "uri":"http://IQcRXEJzZbd.hsze3", + "title":"officia ullamco exercitation sint aliqua", + "type":"in" + } + ], + "start":"1993-05-28T10:02:21.026Z", + "end":"1993-05-30T20:14:27.617Z", + "annotations":[ + 26517773, + 22827212 + ], + "description":"laboris in" + } + ], + "links":[ + { + "urn":"http://J.ouvJL8", + "rel":"ullamco ut qui sit", + "titles":{ + "en-GB-oed":"eu reprehenderit eiusmod", + "vrgd-bd-37we-x-1xc-vj48sa":"adipisicing" + }, + "type":"officia laborum adipisicing eiusmod", + "uri":"http://CgJdYTXJREUfsHJHoyPvBfXJQh.ditgIE", + "title":"in Lorem mollit id adipisicing", + "hreflang":"i-tay" + }, + { + "urn":"https://SiF.lelgDB", + "rel":"cupidatat", + "hreflang":"zh-guoyu", + "type":"irure Lorem", + "titles":{ + "x-1v93":"commodo pariatur ad", + "x-xhkdqtm-neb":"ea dolor nulla proident", + "sgn-BE-NL":"non dolor pariatur" + }, + "uri":"https://zfEgfnVTJdCyGCXqEJWrI.vgi", + "title":"in incididunt nulla Excepteur" + } + ], + "annotations":[ + 27127277, + 62677303 + ], + "description":"amet", + "name":"anim labore mollit", + "names":{ + "sgn-BE-NL":"sunt ut", + "x-m-7i63":"nostrud aliquip consequat qui", + "cel-gaulish":"aute ad consectetur amet eu" + }, + "format":{ + "dataType":"TimeRange", + "maxLength":30391044, + "pattern":"Lorem", + "minLength":68216687, + "maxValue":7586958, + "minValue":23383826 + }, + "descriptions":{ + "en-GB-oed":"esse aute", + "zh-min":"Excepteur minim adipisicing dolore", + "x-8rjpn":"laborum reprehenderit commodo" + }, + "roles":[ + "w", + "OI" + ] + } + ], + "dataSet":[ + { + "id":"wp", + "keyPosition":82888946, + "values":[ + { + "id":"AA", + "parent":"_k", + "descriptions":{ + "x-iwwya3":"in dolore dolor" + }, + "annotations":[ + 27605319, + 98534026 + ], + "names":{ + "art-lojban":"minim" + }, + "order":32376760, + "links":[ + { + "href":"http://dChkHUcKgpPdGoraeRQKnpOqHlU.edSk", + "rel":"codelist", + "uri":"https://LYMyCYuqruw.ddvbAj", + "title":"sit consequat pariatur commodo", + "titles":{ + "i-klingon":"non laboris dolore ad" + }, + "hreflang":"pwfv-6sd6-x-9r", + "type":"adipisicing ut" + }, + { + "href":"https://fMEpiLiVdDLxCsM.xrKb", + "rel":"proident ut ea deserunt id", + "titles":{ + "vhpi-xpvx-vq":"nisi consequat dolore proident", + "x-cbv37ntv-q624vg":"pariatur" + }, + "uri":"http://iuxeQAjVdrNROXfmSrERvXRASAphM.jveuc", + "title":"consectetur Duis", + "type":"dolor", + "hreflang":"x-wy4r-afi3" + } + ], + "end":"2017-08-06T17:33:48.072Z", + "description":"reprehenderit qui Excepteur occaecat", + "name":"consectetur laboris elit", + "start":"1944-05-01T20:39:07.538Z" + }, + { + "links":[ + { + "href":"https://ISflbSUgcKVzATKBdBZ.qlbreC", + "rel":"license", + "title":"quis cupidatat in", + "uri":"https://WVkwqAsVcdYJcxUKSBwcHnqaXSeKaXxwq.wxnJvu0", + "hreflang":"bgy-xap-lfs-vg-x-hueb-eh", + "titles":{ + "x-i-cd7":"pariatur dolor ea adipisicing", + "wfrv":"velit commodo dolore cillum", + "x-qreiha1":"pariatur exercitation sit adipisicing dolore", + "i-mingo":"voluptate elit", + "x-byp6":"ut pariatur Ut esse minim", + "x-6-i7":"aliquip eiusmod ut" + }, + "type":"do id dolore proident eu" + }, + { + "urn":"https://NYVRhMfBEsN.muwsQ", + "rel":"occaecat nisi consequat mollit", + "title":"consectetur Excepteur enim amet", + "type":"exercitation minim velit", + "uri":"http://vFCWdTmtHDYzs.gbmcX", + "titles":{ + "x-gccrkcvw-8gd":"in", + "i-bnn":"commodo reprehenderit irure labore", + "zh-xiang":"in cillum non enim" + }, + "hreflang":"zh-guoyu" + } + ], + "end":"1977-04-12T12:47:34.916Z", + "description":"proident cillum", + "name":"ullamco anim", + "parent":"FV", + "names":{ + "zh-xiang":"ipsum", + "art-lojban":"sint voluptate magna nisi eu" + }, + "descriptions":{ + "x-x-n1m2bfxz":"eu consequat commodo enim", + "x-vl451sm-v490":"do proident et nulla" + }, + "annotations":[ + 20908759, + 89755185 + ], + "order":86718978, + "start":"1996-02-20T12:53:53.742Z", + "id":"s" + } + ], + "description":"qui proident nostrud ut et", + "links":[ + { + "urn":"http://cedmY.djaegW", + "rel":"consequat", + "titles":{ + "sgn-CH-DE":"aliqua mollit", + "zdxj-0n0s-x-sg":"fugiat adipisicing cupidatat magna" + }, + "uri":"http://LwlSOdwlYCAZGnfHKCXbiKNhjB.kjTWw", + "hreflang":"ppp-twf-xns-nbpm-to-x-ud6ez", + "title":"ad Excepteur exercitation ut enim", + "type":"ut laboris" + }, + { + "urn":"https://DmBuNwSwQixYwzvQNYddsLakisXglzl.rnyts", + "rel":"stylesheet", + "uri":"https://yMnZKVQRmNUGH.tdjuu", + "hreflang":"x-tvhdvv", + "type":"et id velit irure sed", + "title":"est dolor quis dolore in", + "titles":{ + "x-poy9vi3-t":"irure cupidatat" + } + } + ], + "format":{ + "maxValue":61724411, + "maxLength":31243213, + "minLength":10554550, + "minValue":80087476, + "pattern":"laboris irure veniam officia", + "dataType":"URI" + }, + "annotations":[ + 19020132, + 77646206 + ], + "roles":[ + "kd", + "xc" + ], + "names":{ + "ldb-xhut-x-4":"Duis do et" + }, + "descriptions":{ + "x-9l-b0rb4":"sunt dolor", + "x-ly3x-3poc":"ullamco", + "i-tsu":"sunt ipsum commodo mollit laboris" + }, + "name":"sint officia Ut sed" + }, + { + "id":"M", + "keyPosition":48346869, + "values":[ + { + "id":"-p", + "name":"est ut", + "names":{ + "fbm-fub-fbm-ibe-441":"quis", + "i-hak":"ut minim", + "mkvpwhxo-xl":"in reprehenderit", + "x-t51llz6-bidhg":"Lorem", + "i-bnn":"ut" + }, + "description":"veniam nostrud", + "annotations":[ + 12159078, + 70108358 + ], + "end":"1965-02-01T10:09:18.719Z", + "order":40526228, + "start":"1949-07-24T14:32:58.514Z", + "descriptions":{ + "zfgfaop-x-dw462jij":"commodo Excepteur adipisicing" + }, + "parent":"IN", + "links":[ + { + "href":"http://CT.sypfw", + "rel":"alternate", + "titles":{ + "i-bnn":"dolor laboris", + "kyfuqv-ukon-fw-x-wx-c66u88s3":"ipsum nisi mollit", + "enogbxv":"ut qui", + "sgn-BE-NL":"do" + }, + "uri":"http://OQxNMvOoddyGVyonj.qjP1", + "type":"Duis", + "title":"officia dolore Duis quis velit", + "hreflang":"x-08klh2" + }, + { + "urn":"https://IjNKLDgsuJXXOTlpsC.ueteNugk", + "rel":"ipsum dolore ut reprehenderit", + "title":"enim deserunt veniam", + "type":"sunt esse tempor deserunt", + "uri":"http://ijGCxFeJFgkoLXgLHvs.fwSI.", + "titles":{ + "lak-gex-dqa-kbov-qy-x-d0m4sq7":"est in exercitation sit", + "x-d":"Excepteur eiusmod veniam laborum in", + "x-6-4w5fhni9":"nulla" + }, + "hreflang":"x-fdl" + } + ] + }, + { + "value":"non esse commodo exercitation", + "parent":"f", + "end":"1993-01-16T03:46:44.536Z", + "order":42104438, + "description":"anim enim reprehenderit", + "start":"2012-11-08T22:55:25.82Z", + "links":[ + { + "href":"https://tzdyfavMq.uzzU", + "rel":"alternate", + "uri":"http://XmOgHjrqYiAXlEtMjy.tarMeF", + "title":"magna dolore non", + "type":"nostrud Ut ipsum", + "titles":{ + "i-hak":"labore aliqua anim do", + "vwco-ozvn-x-1r":"dolor magna" + }, + "hreflang":"x-qkp40-w3hteoys" + }, + { + "href":"http://FHojDwZttMOEQpPIpCPKCVRGeVIKh.eoaQXR", + "rel":"nisi reprehenderit irure dolor", + "hreflang":"no-nyn", + "titles":{ + "rpmxjc-ls":"quis laborum", + "i-default":"deserunt fugiat voluptate aliqua", + "mryjnmki-x-p92":"laboris", + "tcme-zt":"consequat sed", + "x-slc6jjtw":"elit sit esse in sed" + }, + "type":"elit consectetur ullamco in Ut", + "title":"Excepteur et adipisicing pariatur laborum", + "uri":"https://kDSNKkBOCAanmjQEkKvqFEoqF.cetPS" + } + ], + "annotations":[ + 91141372, + 92361096 + ], + "descriptions":{ + "fupnp-dfas-2zt5-l-mxegi-enuorkq-x-l78ss-3h":"esse tempor officia adipisicing aliquip", + "cxyutpt-s-a7x4zq-x-ov":"enim pariatur tempor anim eu" + } + } + ], + "descriptions":{ + "i-klingon":"Ut" + }, + "annotations":[ + 26380806, + 95447376 + ], + "links":[ + { + "href":"https://diCjnwx.udpQ8", + "rel":"successor-version", + "titles":{ + "x-kj8gac-8vlep3":"id Lorem enim consequat est" + }, + "title":"dolore cillum", + "type":"ipsum", + "hreflang":"zh-min-nan", + "uri":"http://pgkaEDBbcIVsEWuoI.zauowuO2" + }, + { + "href":"http://GbBUUVVERxpFgIkUnjvcfSHPKdKyjU.rxqrXFn", + "rel":"section", + "uri":"https://snSdQLvPYVJgWZxwAVzonjidbXSpo.refbRI", + "titles":{ + "x-lyzkq-dbp6e80":"velit adipisicing in" + }, + "title":"occaecat minim adipisicing", + "hreflang":"zh-min", + "type":"in reprehenderit qui fugiat labore" + } + ], + "names":{ + "sgn-BE-NL":"in mollit", + "x-q":"Excepteur ad mollit adipisicing cillum" + }, + "format":{ + "maxValue":-28099849, + "minValue":7353159, + "pattern":"magna proident esse", + "maxLength":23913204, + "dataType":"GregorianYear", + "minLength":89211486 + }, + "name":"nostrud quis qui exercitation consectetur", + "description":"voluptate ipsum commodo culpa", + "roles":[ + "Z", + "j" + ] + } + ], + "observation":[ + { + "id":"oE", + "keyPosition":44613157, + "values":[ + { + "id":"O", + "name":"sit id", + "names":{ + "xgeg-63md-x-hydbk":"irure Excepteur", + "x-w8-hj5":"aute irure voluptate", + "eyhb-d-xsvdahxd-wa":"deserunt" + }, + "end":"1946-03-03T14:00:10.217Z", + "annotations":[ + 25701270, + 70698852 + ], + "links":[ + { + "urn":"http://WKqOeAbAmhheISIJlnpceZsca.ollol", + "rel":"consequat laboris tempor irure in", + "uri":"http://VwgCwGicxtP.zajsA", + "title":"officia culpa", + "titles":{ + "optq-xapo-ez":"nulla irure tempor", + "x-rwsreb":"tempor esse", + "x-tj7":"dolor ut officia irure", + "sf-gbs-tii-mp-b-2swsy-om4a":"Ut reprehenderit" + }, + "type":"Lorem exercitation occaecat commodo ex", + "hreflang":"eqnh-lk-7ow8p-x-z-acm" + }, + { + "href":"http://ZyuXhUwNPQUWfXmUSUIEQoS.khdwBQ", + "rel":"first", + "hreflang":"x-beet0ouz-0487", + "title":"enim nulla", + "type":"nulla", + "uri":"https://uLEzxAuaZTV.xsuOV", + "titles":{ + "i-tao":"deserunt sint cupidatat", + "sgn-BE-FR":"anim in" + } + } + ], + "descriptions":{ + "i-bnn":"Ut dolor mollit tempor", + "x-nkj11ei-rnpf":"aliqua amet", + "x-up42o-61de":"exercitation et in", + "x-g":"officia laboris ad qui" + }, + "order":84946223, + "start":"2005-10-25T07:16:25.968Z", + "parent":"_u", + "description":"cillum aliquip" + }, + { + "id":"S", + "description":"fugiat", + "start":"1951-01-04T15:59:07.823Z", + "names":{ + "eaa-fsj-fgf-631-x-ex":"nostrud ea dolor eu pariatur", + "x-m43y6y0-1":"commodo in qui officia nisi", + "x-ct-yd":"exercitation", + "sgn-BE-FR":"ut sunt aliquip adipisicing esse" + }, + "order":29367672, + "links":[ + { + "href":"http://iOdFBIULUAYlzF.woohWml", + "rel":"organisationunitscheme", + "uri":"https://ycyXwbUAgz.yduoUK", + "titles":{ + "qvrm-x-47vreuid-ccwlov":"sed culpa fugiat incididunt" + }, + "hreflang":"x-lrr0-27", + "title":"sunt", + "type":"et nulla" + }, + { + "href":"http://affoNlSeaZZYP.wrtN", + "rel":"alternate", + "title":"dolore", + "uri":"http://shFTMcBUekKXknxDEUUnTbHUsQdflBgQc.wuDC", + "titles":{ + "fqfam-dx":"Ut officia quis ea", + "vgqvtewf":"mollit Lorem irure aliqua cupidatat", + "art-lojban":"sit incididunt Ut" + }, + "hreflang":"xyzmfio-x-2rnp8qq", + "type":"aute nostrud" + } + ], + "name":"in laboris incididunt laborum consequat", + "parent":"i@", + "descriptions":{ + "no-nyn":"laborum consectetur", + "aiev":"laboris Ut et deserunt labore", + "i-hak":"exercitation ea et" + }, + "end":"1943-10-21T14:37:37.813Z", + "annotations":[ + 24006007, + 53759201 + ] + } + ], + "name":"dolore veniam", + "descriptions":{ + "x-4fxd-3":"non" + }, + "annotations":[ + 50583370, + 65520276 + ], + "format":{ + "maxLength":52810832, + "minValue":60974920, + "maxValue":87647987, + "pattern":"dolore", + "minLength":29434655, + "dataType":"Long" + }, + "names":{ + "x-ff3916":"Excepteur" + }, + "description":"officia non aliquip Ut Excepteur", + "roles":[ + "lr", + "AY" + ], + "links":[ + { + "href":"https://wWLrPZZYMdQkICQeVHMBtdeh.hpcyKit", + "rel":"stylesheet", + "type":"culpa deserunt anim ea", + "title":"Excepteur", + "uri":"https://kTWHNLpQkQnBUvEhSerrLuprhj.uqrIM", + "titles":{ + "pm-fbt-wpa-tzs-x-njk":"Excepteur ullamco tempor" + }, + "hreflang":"x-2bdgydi-o" + }, + { + "urn":"http://tCqMOClhvMLtomgwwiYkyZYBDpJvahkWE.qrsw", + "rel":"consequat irure tempor in ut", + "title":"enim dolore officia ex", + "hreflang":"i-navajo", + "titles":{ + "x-vcfmv":"quis sint officia labore", + "zh-min":"incididunt dolor ut eiusmod", + "mdbk-822-x-vq-v3xn":"enim in ex consectetur sunt", + "i-pwn":"sed occaecat sunt", + "no-bok":"velit magna" + }, + "uri":"http://uvKmRYgchfaBZPdcnppkzCuayClRzHHwl.nmSl", + "type":"ut labore sit adipisicing" + } + ] + }, + { + "id":"Y7", + "keyPosition":98027062, + "values":[ + { + "id":"Yg", + "name":"consectetur aliquip sed nisi", + "names":{ + "x-tbw1":"sunt laborum dolor minim eiusmod" + }, + "start":"1990-05-21T12:23:08.557Z", + "annotations":[ + 52614174, + 78413980 + ], + "parent":"Is", + "descriptions":{ + "i-mingo":"amet et magna minim", + "wkekqmbc-dblf-084-6l63u":"anim officia enim" + }, + "end":"1943-06-30T12:12:57.797Z", + "description":"in commodo", + "order":98476527, + "links":[ + { + "urn":"https://Ea.pgpJiR", + "rel":"incididunt eiusmod do ipsum", + "titles":{ + "wcf-qfz-ohg-ezl-ioya-ze-p2fouqf-x-kzrywa":"consectetur" + }, + "type":"dolor velit dolore", + "uri":"http://YgLZQuAkARPsvmnEJwk.abybTB", + "title":"consequat", + "hreflang":"x-szv4" + }, + { + "urn":"http://MgCPhnwzJuHXtPKYbLlJodWp.mirT", + "rel":"previous", + "type":"nulla laboris ut dolor", + "uri":"https://jXlRKKpDIoExpdOZP.nrbtTK", + "hreflang":"lnethknn-qltt-x-3ezxte-2gd0gzj", + "title":"proident", + "titles":{ + "fayt-dnbh":"eu tempor cillum minim", + "iss-943-l-25d40d-x-xr07":"incididunt pariatur" + } + } + ] + }, + { + "id":"t", + "name":"ullamco sit enim deserunt", + "end":"1979-04-20T14:08:39.872Z", + "order":47572935, + "annotations":[ + 42528032, + 68345184 + ], + "parent":"Y", + "links":[ + { + "urn":"http://oGcSCtihGntodoBdaEGknklLHYRc.ihH", + "rel":"structureset", + "titles":{ + "i-navajo":"non Lorem et laborum" + }, + "title":"veniam dolore Duis ex", + "hreflang":"x-mle5sk", + "uri":"https://KkPLSTJVtFNca.zrJ9", + "type":"in labore cillum sunt incididunt" + }, + { + "href":"https://OjVkZsDRMX.fkbUZ", + "rel":"edit-media", + "type":"nostrud", + "uri":"https://LNfhCWlttNzscg.qdmnOF", + "titles":{ + "yktsy-bhcq-vo":"mollit ipsum ea reprehenderit", + "x-2hcb138-5x6n":"in in laborum sed ut" + }, + "hreflang":"nmwd-sf-x-ab9-7xyst1m", + "title":"mollit" + } + ], + "description":"ad eu sunt anim id", + "start":"2000-07-12T23:02:33.581Z", + "descriptions":{ + "i-tao":"consectetur Excepteur ullamco qui", + "x-1zm-gnhe2":"exercitation laboris non" + } + } + ], + "descriptions":{ + "art-lojban":"minim deserunt nisi do qui", + "quzl-qmig-x-wmodm5t-s71":"in commodo voluptate in dolore" + }, + "links":[ + { + "urn":"http://pwxNcpnCLpIGdVHSyQ.jbash", + "rel":"enclosure", + "titles":{ + "wrft-hijv-321-on776p9":"elit amet nostrud occaecat pariatur" + }, + "type":"sunt ut qui", + "hreflang":"cel-gaulish", + "uri":"https://WlfWsOibolwHlsPImNjVhQPDTmkazLPh.jurkD", + "title":"nulla" + }, + { + "urn":"https://ectzdgqUJhJOsrQGmsumKhBeKn.minKx", + "rel":"reportingtaxonomy", + "uri":"http://HuogxSTPcKtAIBrtLkBmCFbjvYIWySc.ghG5", + "titles":{ + "x-bmuhm6":"veniam laboris eu officia aute", + "x-s8gxrm-qdw":"dolore consequat pariatur cillum esse" + }, + "type":"ad Duis", + "title":"aliqua", + "hreflang":"x-rd7rmb" + } + ], + "description":"incididunt eu dolore", + "roles":[ + "H", + "q" + ], + "names":{ + "no-bok":"reprehenderit aliqua", + "ii":"est anim fugiat", + "zh-min":"Duis voluptate in consequat" + }, + "annotations":[ + 6831808, + 26192891 + ], + "format":{ + "minLength":93605314, + "maxValue":-96130951, + "pattern":"dolore sunt", + "minValue":-31861176, + "dataType":"BigInteger", + "maxLength":1492972 + }, + "name":"deserunt proident" + } + ] + }, + "names":{ + "kbek-t-a7isxo-x-9":"ipsum nulla et id" + }, + "description":"nostrud adipisicing consectetur sed qui", + "links":[ + { + "href":"https://SRPejxxUfBeTFoJbktYoLRXU.auacVak", + "rel":"enclosure", + "type":"voluptate in et aliquip sed", + "uri":"https://dIcEGfzfQgGeNtgqQFZdAPVyWjEyMzlYk.vuwgSm", + "titles":{ + "i-default":"magna ad ipsum sunt" + }, + "title":"Ut dolore incididunt deserunt aliqua", + "hreflang":"hotwguq-x-v2mt5ru-s3qwj" + }, + { + "href":"https://NPFeoMAveRBlTxsSSYX.scdVqQw", + "rel":"Lorem fugiat nulla reprehenderit", + "type":"irure culpa proident cillum adipisicing", + "hreflang":"i-navajo", + "uri":"https://tvdahXtLfFRTGdfPzYrZdyylAKKS.bhgv", + "title":"commodo consequat aliquip sunt", + "titles":{ + "x-ff6":"eu", + "biy-jhl-tfr-mmlh-ew4hjff-x-v4a-3sovxznt":"dolore" + } + } + ], + "annotations":[ + { + "text":"voluptate", + "id":"eiusmod incididunt consectetur dolore", + "title":"Ut", + "links":[ + { + "href":"https://wUxoqmmssyYLKmvxf.pbjF", + "rel":"index", + "titles":{ + "zh-xiang":"reprehenderit laboris cupidatat", + "zh-guoyu":"laborum elit velit" + }, + "type":"laborum mollit consectetur in", + "uri":"http://hC.tqkyb", + "hreflang":"zcth", + "title":"nostrud" + }, + { + "urn":"http://PhusTdeBrDJUTBcSyVEsDrQgmlz.pgve", + "rel":"nostrud", + "hreflang":"rkpgu-482-x-z2ndgx0", + "uri":"https://LjamKlcDqETVTfSS.unuyYC", + "title":"aute elit amet exercitation dolore", + "type":"nostrud non est", + "titles":{ + "eisv-x-7tfyeg-f":"consequat aliqua enim", + "x-2jk2at-10b8m":"in qui aute" + } + } + ], + "texts":{ + "kcwhyaov-heog-rqdj03-z-maum-x-ehy":"aliquip dolore laboris enim", + "sgn-BE-FR":"aute minim labore incididunt" + }, + "value":"Lorem sint ipsum sunt esse", + "type":"Lorem sint ipsum sunt esse" + }, + { + "text":"sed non aliqua in", + "title":"dolore laborum eu sint sit", + "texts":{ + "sgn-CH-DE":"laborum dolor in" + }, + "links":[ + { + "href":"http://mVtU.tbtwO6sg", + "rel":"officia deserunt cupidatat elit", + "title":"minim non Lorem", + "titles":{ + "zh-min":"magna irure", + "x-uvwajvv":"nisi cupidatat ex dolor", + "zpbjy-703-x-vzg-qa0":"aliqua irure amet do non", + "zdpe-czgn-4huz":"sint dolor in mollit", + "i-lux":"veniam amet", + "i-tsu":"cupidatat enim ex nostrud" + }, + "type":"aute ullamco qui dolor", + "uri":"https://zXDBMWmnGZxLgjrYTLdobzpUIQeW.pjkg", + "hreflang":"zh-min" + }, + { + "urn":"https://pnclhWzEfijwEUCrQjvHBRLdbn.bxndfv", + "rel":"ad ea ullamco", + "titles":{ + "i-tao":"proident" + }, + "type":"in irure", + "hreflang":"zh-xiang", + "title":"quis non sunt mollit", + "uri":"https://schteUVDB.qsnK" + } + ], + "value":"Lorem sint ipsum sunt esse", + "type":"culpa occaecat ipsum officia", + "id":"in sunt do Ut" + } + ], + "name":"deserunt quis velit", + "measures":{ + "observation":[ + { + "id":"kt", + "annotations":[ + 32247666, + 21081560 + ], + "descriptions":{ + "wvy":"labore pariatur minim Ut adipisicing", + "x-c2yf-4vk":"aute deserunt nisi sint", + "su-hrl-huu-zcm-kexd-x-whh":"eu", + "biic-ueff-591-f-9t2pf-h7x98l":"officia voluptate sunt" + }, + "description":"adipisicing commodo", + "format":{ + "maxValue":-53579621, + "maxLength":76687631, + "minLength":82083230, + "minOccurs":92509246, + "pattern":"in dolor dolore", + "minValue":-89562925, + "maxOccurs":33568217, + "isMultiLingual":true, + "dataType":"Integer" + }, + "name":"in ipsum Excepteur sed", + "values":[ + null, + { + "links":[ + { + "href":"https://iOYhoAoTPdCyPwLdSsq.autaju", + "rel":"conceptscheme", + "type":"est elit dolor cillum adipisicing", + "uri":"https://AOrzrwieItGI.ywyz", + "hreflang":"i-default", + "titles":{ + "no-bok":"sed consectetur tempor dolore" + }, + "title":"aliquip" + }, + { + "href":"http://FiWHKlBtN.ryyCS3", + "rel":"index", + "uri":"http://vbXWQhqogCdbgMuYk.mtfWi", + "titles":{ + "qc-537":"sunt culpa consequat tempor minim", + "x-v":"aliquip", + "x-6ses-pdkgp6t":"mollit minim in sint", + "cel-gaulish":"laboris Ut", + "xoksin-owpn-tb-x-cuo3q2hd-rn":"incididunt" + }, + "title":"nisi esse", + "type":"commodo ullamco aliquip", + "hreflang":"hjxmn-cqng-x-3hh0l" + } + ], + "id":"9", + "annotations":[ + 60097265, + 83428084 + ], + "descriptions":{ + "art-lojban":"fugiat dolor nostrud nisi culpa" + }, + "end":"2000-08-27T12:29:08.331Z", + "description":"Excepteur mollit", + "name":"pariatur in fugiat culpa proident", + "start":"1968-09-16T22:54:15.838Z", + "names":{ + "x-r07":"ea magna", + "i-ami":"ullamco consectetur mollit aliqua est", + "rmjs-mmtq-yx-zvlq0p":"commodo elit minim" + } + } + ], + "links":[ + { + "href":"https://yMapUzOfRlFUOASJBwDjt.hiYIU", + "rel":"minim consectetur in cillum sit", + "titles":{ + "x-4zr0sd":"et" + }, + "title":"ut est fugiat do", + "uri":"http://JvefCqoXWkkWuiVK.rccTZbA", + "type":"irure labore in id nisi", + "hreflang":"tsrq-eo-x-8vtt2" + }, + { + "urn":"https://Y.taYLU", + "rel":"dataproviderscheme", + "uri":"https://DmtouNwmbXIxbCrZnjMosoKdWUqTjF.jverkpV", + "type":"quis nostrud", + "title":"magna voluptate cupidatat", + "titles":{ + "nfms-djtk-x-7xsag-syqhxpw2":"elit in", + "igob-alqv":"fugiat in laborum do", + "xiio-phnf-030-x-svi-8z":"laboris exercitation qui" + }, + "hreflang":"i-pwn" + } + ], + "names":{ + "x-vmswfdi5-tb3um":"mollit", + "ixik-433-d-xkt-u5h0ke-x-zzo":"enim" + }, + "roles":[ + "kp", + "m3" + ], + "isMandatory":false + }, + { + "id":"l3", + "roles":[ + "x", + "m" + ], + "isMandatory":false, + "descriptions":{ + "x-oedv31":"velit" + }, + "links":[ + { + "urn":"https://xkfNj.aeUI", + "rel":"conceptscheme", + "hreflang":"tb-rpp-tdw-tcmg-x-udq3u", + "uri":"http://ZET.ijjsUQ", + "title":"voluptate ut aliqua pariatur", + "type":"aliqua occaecat elit reprehenderit incididunt", + "titles":{ + "x-tk4btjp-5e9j":"elit proident officia reprehenderit nisi", + "vfqz-acnu-do-x-ma4-3s9b34":"mollit amet laboris laborum ipsum", + "gchua-ajrs-ad":"ipsum deserunt", + "x-hix":"Ut pariatur mollit sed et" + } + }, + { + "href":"https://sGTiC.dxabd", + "rel":"in", + "hreflang":"spi-958-y10cq-x-2k3t7c2-ydbkn579", + "type":"consectetur sunt ea", + "uri":"http://WImcDcNZWfnlZacRfyETQt.geeoA7", + "title":"exercitation ea non pariatur", + "titles":{ + "x-3ey2ia9h":"pariatur in nulla id amet", + "no-bok":"qui pariatur voluptate", + "iy-uw":"amet in laborum", + "gwfa-jykk-dd-x-n31yfgz":"ad dolor magna" + } + } + ], + "values":[ + null, + { + "links":[ + { + "urn":"https://hhpGLzXjipMDOWOUUY.uxir", + "rel":"ea minim mollit veniam", + "titles":{ + "x-sar5g313":"irure Excepteur officia voluptate", + "msgqs-009-w30dz":"id deserunt commodo", + "x-gctfh-2jjjv6":"nulla" + }, + "type":"non", + "uri":"http://ZdxvjTRmipwobwlaAUY.rjAvgD", + "hreflang":"no-nyn", + "title":"non enim" + }, + { + "urn":"https://yJLyHSxeMmWGqvSxAcQtpPVzsgO.qfgME", + "rel":"eu qui in Lorem dolore", + "title":"dolor Excepteur pariatur", + "titles":{ + "x-8unmb-6opy09":"dolor et officia nulla" + }, + "hreflang":"x-wb2o-4j680m", + "uri":"https://mNCnuAMAQcgw.yyeuJj", + "type":"aute incididunt qui aliquip" + } + ], + "name":"quis sed amet nulla mollit", + "names":{ + "zh-hakka":"commodo elit", + "i-lux":"ullamco magna sint" + }, + "end":"1957-01-15T21:37:40.332Z", + "id":"G$", + "annotations":[ + 21081031, + 13047454 + ], + "descriptions":{ + "x-trcnep7":"aliquip non", + "sgn-BE-NL":"ex cupidatat elit" + }, + "start":"2014-06-03T17:19:20.423Z", + "description":"aliquip" + } + ], + "names":{ + "x-gj3xw64":"eu" + }, + "format":{ + "dataType":"GregorianTimePeriod", + "minValue":-2911495, + "minOccurs":48634440, + "maxLength":64793848, + "maxValue":-93984710, + "isMultiLingual":true, + "minLength":89292439, + "pattern":"dolor dolor irure anim", + "maxOccurs":7387046 + }, + "name":"eiusmod", + "annotations":[ + 71721823, + 30620451 + ], + "description":"est" + } + ] + }, + "attributes":{ + "series":[ + { + "id":"J", + "relationship":{ + "dimensions":[ + "h", + "O" + ], + "measures":[ + "D3", + "fy" + ] + }, + "format":{ + "minLength":2412964, + "maxLength":29045041, + "maxOccurs":44862661, + "dataType":"ReportingWeek", + "minOccurs":50087983, + "minValue":-44374902, + "isMultiLingual":true, + "pattern":"ut in in magna sit", + "maxValue":51245616 + }, + "isMandatory":true, + "name":"ea Ut ex est", + "values":[ + { + "id":"yT", + "name":"sunt", + "names":{ + "no-nyn":"consequat sint", + "i-lux":"est Excepteur" + }, + "descriptions":{ + "nmcudyi-qgru-x-6":"Duis exercitation ut", + "i-navajo":"minim ut dolore eu", + "art-lojban":"commodo" + }, + "description":"ut consectetur occaecat cillum", + "start":"1952-11-22T11:23:01.299Z", + "links":[ + { + "href":"https://IvehiQcpzoW.kuhryq", + "rel":"anim et", + "titles":{ + "muf-qci-xwt-weg":"eu" + }, + "hreflang":"zh-xiang", + "uri":"http://hNaoZMCvsoagqovfdItuMSyBvhiyOLO.jpzvHZ6", + "title":"ex non irure", + "type":"ut est dolor" + }, + { + "urn":"http://NHZNuDihvqJFIl.ieLKa", + "rel":"culpa irure dolore sunt officia", + "titles":{ + "i-enochian":"commodo dolor cupidatat ullamco culpa", + "xudysqo-hgqf-jq-x-6":"occaecat ex do ea nulla", + "olkr-349":"in ipsum in", + "zh-min-nan":"ex nisi eiusmod", + "x-q":"magna esse exercitation anim laboris" + }, + "uri":"https://CmmgcREWiraIEAjhYfcOrOrsdwQMP.pwjwuio", + "type":"in anim pariatur", + "hreflang":"x-u-pw6cnx", + "title":"magna sed non" + } + ], + "end":"1944-10-20T15:59:11.129Z", + "annotations":[ + 37973275, + 76432789 + ] + }, + { + "names":{ + "i-bnn":"proident in", + "x-45ik1":"aute sunt enim" + }, + "description":"magna non sunt nulla", + "end":"1979-09-20T11:07:40.2Z", + "name":"esse", + "annotations":[ + 27489442, + 25746360 + ], + "id":"sv", + "start":"1944-12-05T19:21:12.69Z", + "links":[ + { + "urn":"https://nmHEkuTMBAUcEaln.eoayon", + "rel":"metadataflow", + "type":"culpa", + "hreflang":"wngk-an", + "titles":{ + "kz-tp-7ujd-n-yw59rx-1bpnf0sw-x-f":"culpa sint cupidatat elit", + "no-bok":"dolor", + "x-sofok":"anim minim tempor exercitation ad", + "x-s0dkftl2":"nostrud tempor qui non", + "cel-gaulish":"fugiat" + }, + "uri":"http://rrXC.mmqg", + "title":"nulla" + }, + { + "urn":"http://JzhRvrx.wamgJ", + "rel":"previous", + "hreflang":"aaadcf-tzhv-053", + "titles":{ + "x-w1uk8um":"ullamco", + "ogkhqbs-x-5p-78o0501s":"commodo magna in tempor" + }, + "type":"nulla magna incididunt et consequat", + "uri":"https://iYXwepBTgEBaECYzaJ.hkfyzf", + "title":"tempor Lorem aute enim cillum" + } + ], + "descriptions":{ + "iejro-4riiiri-x-z":"eiusmod consectetur", + "iwxc-x-icni":"elit", + "x-8r6ypz":"irure dolore ullamco laborum" + } + } + ], + "default":"aliqua dolor", + "descriptions":{ + "bdekwv-nn-p17kbd7h":"commodo incididunt veniam minim aliquip", + "dvpa-qokg-9-6xmmm-x-p6xa4f":"sint eu laboris Excepteur" + }, + "annotations":[ + 16287791, + 94947738 + ], + "names":{ + "fome-zvkj":"aliqua culpa ea do", + "x-x1p2nk-iei9ihz2":"proident" + }, + "links":[ + { + "urn":"http://aTNIXKOIuQ.agprzzh", + "rel":"structure", + "type":"Duis mollit dolore aliquip sit", + "titles":{ + "x-8":"Lorem velit laboris laborum", + "x-736-2lhy7n6":"occaecat", + "xhhk-x-3cq-msu269":"anim laboris Duis", + "arelz-x-ffaay":"Excepteur", + "x-t0jo39-bp":"labore ullamco ex consectetur" + }, + "hreflang":"no-nyn", + "title":"velit labore incididunt consequat est", + "uri":"https://DzuBXrrWRRhUarcJKBnxEAUhsSe.rpbjF" + }, + { + "href":"https://tRwWexQoEXlKNBGwy.zhyzNQV", + "rel":"codelist", + "uri":"https://xPC.zpcuPUb3", + "title":"tempor", + "hreflang":"zh-min", + "titles":{ + "x-0":"minim" + }, + "type":"Lorem" + } + ], + "roles":[ + "wG", + "FA" + ], + "description":"fugiat incididunt commodo adipisicing" + }, + { + "id":"T", + "relationship":{ + "dimensions":[ + "i", + "E" + ] + }, + "default":"adipisicing in enim", + "roles":[ + "Px", + "p8" + ], + "names":{ + "gaahsb-753-x-pukws":"dolor Duis commodo sunt", + "i-bnn":"Ut", + "x-gb-ql6e":"eiusmod dolor fugiat deserunt aliqua" + }, + "values":[ + null, + { + "values":[ + { + "i-klingon":"consectetur", + "jybt-591-x-3bfmq2":"eiusmod", + "zh-hakka":"proident veniam", + "et-jg-x-3dzxkt0-b":"dolore ad consectetur" + }, + { + "sltbyvx-lkcu-611":"anim", + "cel-gaulish":"dolor", + "x-v4omva-8mys":"cupidatat in qui commodo", + "x-4j9gyr-simb9":"quis velit est incididunt" + } + ], + "description":"non id dolor sit", + "start":"1963-01-22T00:22:57.511Z", + "end":"2001-06-15T14:55:21.932Z", + "descriptions":{ + "owi-jtl-tjf-bmz-tjbr-1vtu":"in quis consectetur" + }, + "annotations":[ + 23904313, + 44622563 + ], + "links":[ + { + "urn":"http://XYlnK.jktfT", + "rel":"categorisation", + "titles":{ + "i-default":"labore occaecat officia do dolore", + "zh-guoyu":"aliquip quis Duis" + }, + "type":"ea exercitation fugiat in", + "hreflang":"x-0hnvwzyw", + "title":"sunt ut mollit", + "uri":"http://AHETyZIonelhaAqsXytOnrUauiVlBzF.doqWWF" + }, + { + "urn":"http://UznbDVOwMivwbWVvUkJtteHl.bbttUxF", + "rel":"minim Ut commodo ea culpa", + "titles":{ + "x-l9ss-2cd2in4a":"aliquip", + "x-6-h6c740":"proident sint aliqua", + "jdbzv-krbi":"in dolor veniam laborum", + "x-y-hm":"nulla occaecat sint Ut ullamco", + "x-44zupohp-o71":"qui", + "x-p-smfp":"in ullamco exercitation" + }, + "title":"do ut in ipsum", + "hreflang":"ejoa-rmvz-077", + "type":"laborum elit enim tempor", + "uri":"https://WrNmEaCjTbqSLxZDEsoIWAZ.ekgwwQ" + } + ] + } + ], + "annotations":[ + 49231160, + 75258483 + ], + "name":"esse", + "descriptions":{ + "yhusv-z-00f-3ra80sn-x-9b":"et cupidatat" + }, + "description":"voluptate aliqua Lorem in est", + "isMandatory":false, + "links":[ + { + "href":"http://qGSkjQzpnVvmbBGuuUZF.tkqkEw", + "rel":"stylesheet", + "uri":"http://rRGIhUTeZXAub.uokJnA", + "titles":{ + "x-14un5-u":"ad irure in fugiat", + "i-tao":"veniam ut ipsum culpa", + "no-nyn":"minim sed" + }, + "title":"exercitation", + "hreflang":"sgn-CH-DE", + "type":"aute non culpa" + }, + { + "urn":"https://BexkBxbjXbsmAurqxKcIzWyChZgppXIn.fjdbd", + "rel":"dataproviderscheme", + "title":"aliquip qui Excepteur culpa", + "hreflang":"zh-min", + "uri":"https://kEvIwdLSTIVLugPwwIlsGqluTovt.wjCbP", + "type":"mollit consequat exercitation sit", + "titles":{ + "x-dqtc":"ullamco anim ea sed non", + "bnuq-lhrn-vl-7zq7":"id laborum quis", + "ttkxuqhl-7369-6-0qzj-x-28a75":"Excepteur officia tempor", + "x-hz":"exercitation voluptate reprehenderit ipsum cupidatat" + } + } + ], + "format":{ + "minValue":75565310, + "dataType":"Time", + "minOccurs":98474407, + "pattern":"labore", + "maxLength":38162813, + "maxOccurs":89350832, + "minLength":68465509, + "maxValue":-87961146, + "isMultiLingual":true + } + } + ], + "dataSet":[ + { + "id":"S", + "relationship":{ + "primaryMeasure":"He", + "measures":[ + "bC", + "LB" + ] + }, + "default":"Duis sed adipisicing", + "roles":[ + "Vi", + "TI" + ], + "links":[ + { + "urn":"https://F.hsfrM", + "rel":"chapter", + "hreflang":"i-navajo", + "titles":{ + "gnvd-zmis-jx-0-8t0i7-x-inndy":"dolore", + "eixo-ejou-x-uu4laza-n2ea":"incididunt ut cillum magna do", + "x-fxi12ytc-ma5l5t1":"Ut cillum nisi", + "i-pwn":"commodo", + "x-ulj5":"non", + "x-6-cfiptj4":"adipisicing in cillum cupidatat enim" + }, + "uri":"https://woNtdZQxsd.crwFqe", + "type":"deserunt in cupidatat qui", + "title":"velit ea elit reprehenderit sunt" + }, + { + "urn":"https://obi.bdqgBO", + "rel":"voluptate in eu esse ipsum", + "type":"pariatur ad dolor", + "hreflang":"vy-j-w1c8zr-nkise", + "titles":{ + "nnq-4d41":"consectetur Duis ullamco quis deserunt" + }, + "title":"deserunt Lorem labore cillum", + "uri":"https://kasUzNKIdIAARlGIWcQtPiTR.wwitx" + } + ], + "format":{ + "isMultiLingual":false, + "minOccurs":5038256, + "maxLength":13180982, + "maxValue":8431325, + "pattern":"minim commodo aute voluptate irure", + "maxOccurs":15655825, + "minLength":88332769, + "minValue":9983585, + "dataType":"StandardTimePeriod" + }, + "annotations":[ + 63300620, + 46640871 + ], + "descriptions":{ + "gvpb-jgvg-b-9chish10":"adipisicing aute fugiat ullamco commodo", + "x-i67xc3aw-2":"Lorem esse", + "sgn-BE-FR":"et", + "i-hak":"sunt velit esse minim", + "ncnfrj-gwck-4vmhtkm-x-0tsnnl07":"elit" + }, + "names":{ + "gkwsjz-rr-e-nkj8-x-0":"dolor velit magna", + "x-d98u-z8o":"tempor" + }, + "description":"incididunt nostrud", + "values":[ + null, + { + "values":[ + "nostrud consequat", + "veniam elit sit" + ], + "description":"tempor qui adipisicing cillum eu", + "start":"1953-05-05T11:09:24.977Z", + "descriptions":{ + "wyoe-sr-x-7":"ex sed eu" + }, + "links":[ + { + "href":"http://lLtXulPtDRm.zbrdFl", + "rel":"categorisation", + "hreflang":"x-60vg", + "uri":"http://PIFfkTmEiMWlItCyFEDsQhgmMkcrSSt.eraH", + "titles":{ + "x-gaxexnb":"ipsum mollit dolor", + "dkg-khfz-wy-x-3":"id tempor" + }, + "title":"nostrud ad proident exercitation culpa", + "type":"exercitation non" + }, + { + "href":"https://WvjvbSqvxOEZvWNxlBLvhIHdnDTdclMkd.pvpaVk", + "rel":"next", + "hreflang":"zh-min", + "uri":"https://UkqkeZln.hupoz4", + "titles":{ + "vkbrgch-byho-le":"commodo", + "x-dij8":"fugiat dolor", + "art-lojban":"in consectetur ex eu", + "i-navajo":"Duis anim nisi proident", + "x-5y-jv7kqhn5":"dolore in irure exercitation id" + }, + "title":"incididunt aliqua esse", + "type":"in aliqua" + } + ], + "end":"1944-09-24T17:41:10.414Z", + "annotations":[ + 25068505, + 5050382 + ] + } + ], + "name":"non nulla Duis", + "isMandatory":false + }, + { + "id":"mA", + "relationship":{ + "dimensions":[ + "V7", + "q" + ], + "measures":[ + "V7", + "q" + ] + }, + "roles":[ + "v", + "TS" + ], + "name":"Duis ex", + "default":"do", + "description":"adipisicing aliquip", + "values":[ + null, + { + "id":"9j", + "name":"et tempor anim", + "descriptions":{ + "ikaz-tkjw":"irure", + "x-thr7j-znyb":"Excepteur ullamco nostrud nulla" + }, + "links":[ + { + "urn":"https://UcCu.drOW", + "rel":"payment", + "hreflang":"fqn-rtx-ffg-wqd-brwt-w9m0t-x-q", + "titles":{ + "yvyhdple-bjcw-x-0n1-bs0z":"aute in sunt exercitation", + "zzx-bft-ozf-jvkd-af-9-ml-owo7-x-knh":"nisi aute", + "x-7":"elit deserunt", + "no-nyn":"Ut" + }, + "uri":"http://jHDNvfEVQcwHhHB.jbHZ4", + "type":"Ut dolore tempor officia", + "title":"consectetur ullamco commodo do" + }, + { + "urn":"https://SCHjhyCeCyzaWlMJEHNNvkRGCOzPKT.kixgEE7", + "rel":"prev-archive", + "uri":"http://ZfWsVokxmkEwnqJDMjlOWPIjXiwZYZrOr.umvjZP", + "type":"occaecat deserunt culpa ipsum officia", + "title":"nulla dolore amet velit", + "titles":{ + "i-navajo":"Lorem", + "art-lojban":"cillum elit amet", + "ftlhfij-gs-1xw1-r-i3cch-sd7kfbm-x-vcq35w0-opwy":"aliqua" + }, + "hreflang":"x-6so6kk" + } + ], + "start":"1972-03-18T13:38:41.918Z", + "annotations":[ + 17808652, + 6862301 + ], + "description":"incididunt qui", + "end":"2009-06-30T17:45:57.298Z" + } + ], + "format":{ + "maxValue":-46553155, + "minValue":30825910, + "dataType":"GregorianTimePeriod", + "maxLength":25739229, + "minLength":71525002, + "minOccurs":35799500, + "maxOccurs":97224557, + "pattern":"ea nisi exercitation", + "isMultiLingual":false + }, + "isMandatory":false, + "names":{ + "i-mingo":"sint fugiat ad", + "zptng-nfes-or-x-oz-m":"eiusmod ex Excepteur", + "kkropt-znnf-x-a633":"reprehenderit ex Duis ut", + "x-8l":"culpa esse" + }, + "descriptions":{ + "x-2ahmp-3ej9slhm":"culpa", + "x-wkeu":"minim", + "zh-hakka":"aliqua in irure amet", + "art-lojban":"incididunt" + }, + "annotations":[ + 20781314, + 14758996 + ], + "links":[ + { + "urn":"https://CnmhAfdZzcSkZZZrLFcBM.tdjb", + "rel":"current", + "titles":{ + "zdvkw-azht-t-6e":"adipisicing", + "i-bnn":"Excepteur cillum", + "i-enochian":"consequat elit quis reprehenderit et" + }, + "uri":"http://zQjmbgPltlVKmHbrYIbbOELaILcPfJudf.pabE1R", + "hreflang":"mikw-wclf-ei-x-wjwx-0", + "title":"aute laboris minim", + "type":"id deserunt" + }, + { + "href":"https://WYRJkXcgiGvIkEKcRisNSNUt.hdbpI4C", + "rel":"structureset", + "hreflang":"x-t69nic-fovzu", + "titles":{ + "i-tay":"Ut incididunt commodo" + }, + "uri":"https://CbMQegwAqafKMuyvdtlGNTJQKifkqmmao.fwjW", + "title":"sed aute", + "type":"incididunt occaecat" + } + ] + } + ], + "observation":[ + { + "id":"l", + "relationship":{ + "primaryMeasure":"y", + "measures":[ + "L", + "CC" + ] + }, + "isMandatory":true, + "format":{ + "dataType":"Decimal", + "pattern":"Excepteur occaecat do ad aute", + "maxOccurs":8349412, + "maxValue":17985965, + "minValue":-91260626, + "maxLength":53208121, + "minLength":67284844, + "minOccurs":95847585, + "isMultiLingual":true + }, + "description":"dolor aliquip eu ipsum reprehenderit", + "names":{ + "sgn-BE-FR":"consectetur esse", + "x-qxj5-g6a1":"sit" + }, + "annotations":[ + 51658333, + 77539456 + ], + "roles":[ + "S", + "e2" + ], + "default":"deserunt", + "values":[ + { + "end":"1951-01-09T05:21:49.165Z", + "descriptions":{ + "x-fi-3ds7":"pariatur aliqua", + "i-mingo":"sint adipisicing", + "i-tsu":"do culpa exercitation dolore" + }, + "names":{ + "x-y1y4c":"ut" + }, + "name":"elit cillum deserunt in ut", + "annotations":[ + 22571665, + 28599395 + ], + "description":"voluptate", + "id":"Iz", + "start":"1998-08-25T02:58:40.163Z", + "links":[ + { + "urn":"https://chLtGk.hjLmC-", + "rel":"hub", + "hreflang":"nuwqg-rtbq-sl-3i43-s-otwww-x-1-pqo", + "type":"nisi Lorem Ut incididunt ut", + "uri":"https://TrXBuFFnhQUcTqjMTe.bkx", + "title":"qui aute sint", + "titles":{ + "x-blqmaq9-y0":"dolor eiusmod dolore sed nostrud", + "ifzvlcw":"Excepteur tempor cupidatat pariatur", + "x-7s4ki0-m":"exercitation", + "i-default":"ullamco veniam" + } + }, + { + "urn":"http://GMJNDHPEBNoaOoHjqEpcEiwxqGkBEjvK.kbiqcR", + "rel":"last", + "hreflang":"zh-xiang", + "uri":"http://SGCwnctBLxHFBCXJGJjJlUejvdjYDewo.dxpgaQhW", + "titles":{ + "x-m5jn4b8-m1ugitv":"aute in et dolor sed", + "sgn-CH-DE":"tempor laborum", + "x-q-7yc51t7":"enim eiusmod deserunt" + }, + "title":"do dolor magna cillum", + "type":"laborum commodo enim in" + } + ] + }, + { + "values":[ + 18243675.391518593, + 67066137.087922186 + ], + "description":"veniam culpa dolore occaecat tempor", + "annotations":[ + 4205826, + 31147731 + ], + "start":"1996-03-05T13:34:48.377Z", + "descriptions":{ + "x-0kd23x":"elit nisi aute eu", + "i-enochian":"enim veniam", + "x-icgy88s-ojlg1o":"labore officia ea dolor anim", + "x-053up":"fugiat ullamco consectetur elit", + "x-7jkby-82mfhret":"cupidatat enim aliquip" + }, + "links":[ + { + "href":"http://X.yijavV", + "rel":"cillum aliquip Ut dolore id", + "hreflang":"zh-min-nan", + "type":"aliquip labore", + "title":"elit", + "titles":{ + "sgn-BE-NL":"et sint", + "i-navajo":"laboris in ut", + "x-dpg-r56":"id" + }, + "uri":"http://shzVXYRJXubxyjFUBqaHYzarM.osz" + }, + { + "urn":"http://PAmtgaZNRU.dgfzqVEh", + "rel":"dataflow", + "hreflang":"ed-ehm-nfj-bbh-hsmg-zmwz2is", + "uri":"https://JfkfVybEOBXFoDrHjUT.bbce", + "type":"ipsum anim consectetur", + "titles":{ + "jo-129":"Excepteur exercitation nostrud minim cupidatat", + "x-n":"sint consectetur sunt mollit Excepteur" + }, + "title":"adipisicing Ut velit" + } + ], + "end":"2012-04-25T04:51:36.861Z" + } + ], + "descriptions":{ + "zh-min":"incididunt deserunt Lorem sunt consectetur", + "i-pwn":"fugiat proident", + "xxt-wiq-nki-qezy-x-xahwhyj7-rz4":"nulla qui" + }, + "name":"mollit laboris dolor officia", + "links":[ + { + "href":"https://PJwCKFYRdocgBorDnYmtSpQkwE.touma", + "rel":"ex fugiat Ut dolore cillum", + "titles":{ + "x-69n-enwdmos4":"cupidatat consequat proident" + }, + "uri":"https://Ep.msdOp", + "type":"incididunt mollit", + "hreflang":"x-xy", + "title":"qui" + }, + { + "urn":"http://ZzncSkTNEtLyaGuzw.vgp", + "rel":"describedby", + "titles":{ + "sgn-BE-NL":"aliqua nulla laboris et" + }, + "type":"nisi proident Ut ut in", + "uri":"https://POljTPciqGtbY.flbhx", + "hreflang":"no-bok", + "title":"elit incididunt ut non nulla" + } + ] + }, + { + "id":"yl", + "relationship":{ + "observation":{ + + }, + "measures":[ + "E", + "I" + ] + }, + "values":[ + null, + { + "id":"0", + "annotations":[ + 80359313, + 3227406 + ], + "end":"2000-09-04T03:26:25.421Z", + "description":"nostrud", + "links":[ + { + "urn":"http://HXzcfHKQnKzys.gnab", + "rel":"contents", + "titles":{ + "gbrvzsr-39gu":"fugiat" + }, + "uri":"http://vVgKnLJqCF.eyjJj", + "hreflang":"kgexlyw", + "title":"dolore irure quis pariatur dolor", + "type":"esse eu minim veniam" + }, + { + "href":"http://iFfTQDeqALLSJhjwggjJmdAmOpJQkkza.onlka", + "rel":"mollit est velit sit", + "uri":"http://jDtOzdzo.awOETM", + "titles":{ + "cel-gaulish":"aute eu ullamco commodo qui", + "vw-paqq-fd":"cupidatat aute incididunt non laborum", + "x-rvrz5-0cgjg2":"sed exercitation voluptate", + "rcd-skf-bje-wjxm-3wts-x-730ih0":"in dolor labore exercitation laborum" + }, + "type":"qui", + "title":"nostrud et laborum consectetur irure", + "hreflang":"art-lojban" + } + ], + "descriptions":{ + "csrp-ge-x-dk":"Ut amet Lorem deserunt eiusmod", + "x-6gl2-9vyz9":"ullamco aute", + "x-6aka":"velit Ut proident veniam dolor" + }, + "names":{ + "co-ata-q-o658w":"velit nulla", + "dgc-gugd-072":"irure aute eu commodo sint" + }, + "start":"1942-07-09T04:17:45.904Z", + "name":"amet ut" + } + ], + "name":"sed cillum", + "links":[ + { + "urn":"https://bTYqvxpkdZCWWBTwN.wljtx", + "rel":"quis", + "uri":"https://pFXqc.ggrdI", + "hreflang":"zh-hakka", + "type":"elit Lorem dolore velit", + "titles":{ + "x-zvpegnm":"velit reprehenderit tempor qui elit" + }, + "title":"do incididunt" + }, + { + "href":"https://qtwdeifXsHyPpIkKfcZzzcxVF.ovS", + "rel":"up", + "type":"dolore elit tempor deserunt", + "uri":"http://K.txJU", + "title":"enim pariatur", + "titles":{ + "wxux":"pariatur laborum Duis", + "zptwz-iqiv-652-x-grjto":"in aute" + }, + "hreflang":"fdibzs-sjds-214-sifd9" + } + ], + "default":"fugiat amet ut", + "names":{ + "en-GB-oed":"cillum anim cupidatat fugiat", + "ukkysehb":"ut sit non mollit aliqua" + }, + "annotations":[ + 74044904, + 83197635 + ], + "format":{ + "maxValue":-17944194, + "maxOccurs":66739862, + "pattern":"qui aliquip ullamco eiusmod", + "dataType":"DateTime", + "minValue":-70616818, + "isMultiLingual":true, + "maxLength":55480434, + "minOccurs":78780203, + "minLength":3731712 + }, + "isMandatory":true, + "descriptions":{ + "x-0w":"et", + "x-ze82o7l8":"ut commodo incididunt sit amet", + "x-7":"nostrud cupidatat ea" + }, + "roles":[ + "Gj", + "ya" + ], + "description":"deserunt aliqua in sed" + } + ], + "dimensionGroup":[ + { + "id":"ji", + "relationship":{ + "dataflow":{ + + }, + "measures":[ + "T", + "a5" + ] + }, + "name":"exercitation", + "format":{ + "minLength":72879285, + "maxLength":87318682, + "isMultiLingual":true, + "maxOccurs":13381426, + "dataType":"AlphaNumeric", + "minOccurs":99781523, + "maxValue":26166455, + "minValue":4885653, + "pattern":"aute esse ut laborum" + }, + "values":[ + null, + { + "end":"1948-08-28T20:19:35.063Z", + "annotations":[ + 72673381, + 45973808 + ], + "name":"in irure in commodo enim", + "id":"sJ", + "descriptions":{ + "sgn-CH-DE":"ipsum", + "i-hak":"Lorem esse Ut ullamco" + }, + "description":"non ut anim", + "links":[ + { + "urn":"https://FdVBYNLhuMNpCsXQ.dcnmI", + "rel":"incididunt tempor elit", + "type":"ea fugiat incididunt amet pariatur", + "uri":"http://WHSFXIxNNCbAutErtrknwJpwwF.hgZ", + "title":"laborum officia", + "titles":{ + "zh-min":"ex in labore do dolore" + }, + "hreflang":"x-etipyoyh-nraox" + }, + { + "href":"http://CLTPNeGyYmhfXARAZGMNxJlWRzWrSyR.qoixT", + "rel":"index", + "type":"ullamco", + "uri":"https://tTDpkhqtzdPZUbknkwFWaolNJdPkGT.ybtmpW", + "titles":{ + "zh-min":"ea non incididunt ullamco", + "uc-x-zcstf-yfu12i":"Excepteur sit tempor", + "en-GB-oed":"Excepteur pariatur do eu ad", + "x-up6g-q":"aute laboris irure dolore in" + }, + "title":"quis Ut", + "hreflang":"x-o9-2awc" + } + ], + "names":{ + "zh-min-nan":"aliquip tempor consectetur occaecat", + "zh-hakka":"esse dolore", + "x-ovj":"proident magna sunt mollit", + "nvnh-fh-x-5amq6z3q":"fugiat exercitation in reprehenderit veniam" + }, + "start":"1944-11-04T20:26:45.941Z" + } + ], + "links":[ + { + "href":"https://CkoLfEKtWuksfxYuhgtkElIlKQaJ.nzNk", + "rel":"appendix", + "titles":{ + "xiskn-fz-zsh80r-j-ser":"irure aliqua laboris", + "x-86uuyy-h34i7j85":"fugiat magna" + }, + "title":"sint", + "type":"nostrud eu", + "uri":"https://UXQejEkPjsbZTCcN.nyflxZ", + "hreflang":"sgn-BE-NL" + }, + { + "urn":"http://MJszWcxwWLGfLbBxCck.vnmN", + "rel":"reprehenderit officia", + "uri":"https://yHySDmfDNbVlkAALnxHQLsUpXWBmNEDv.mxJ", + "type":"eiusmod quis", + "titles":{ + "bhsnzari-bi-x-u0":"reprehenderit do mollit elit amet", + "x-t1vc-d":"cillum exercitation dolor", + "cvqm-aawd-pw-m-x2cd3-8pn4quf-x-1uvm-xlwe":"amet mollit eiusmod", + "x-pn33p-7cw1p2":"sit consequat Lorem irure" + }, + "hreflang":"i-bnn", + "title":"aute reprehenderit cupidatat magna" + } + ], + "default":"cupidatat incididunt", + "names":{ + "i-bnn":"sit anim dolor", + "gxrs-smqg-5z2n-g-ohik-3ghz-x-gof9mz-nc3wqp":"consequat sed minim" + }, + "isMandatory":false, + "description":"labore dolor enim", + "roles":[ + "p", + "G" + ], + "descriptions":{ + "rd-w-804x1ql4-x-2-0":"in reprehenderit ullamco", + "x-bqfxtq":"incididunt nostrud ullamco non", + "x-l6me-xdpbp7ui":"tempor et laboris officia in", + "dnegwwzl-liit-ncabaw-x-gpazl":"sint eiusmod Duis" + }, + "annotations":[ + 7489378, + 73049570 + ] + }, + { + "id":"aR", + "relationship":{ + "primaryMeasure":"nS", + "measures":[ + "G5", + "Y" + ] + }, + "format":{ + "minLength":12464488, + "maxValue":31514726, + "isMultiLingual":true, + "minValue":-94299643, + "pattern":"tempor", + "maxOccurs":18213425, + "maxLength":30829281, + "minOccurs":16580113, + "dataType":"Count" + }, + "isMandatory":false, + "values":[ + { + "value":-19824522.212344006, + "end":"1944-04-09T06:12:41.831Z", + "description":"enim id", + "links":[ + { + "href":"http://ibOzApjWpFutuNFwaHLNVMMqcK.gayWQ", + "rel":"start", + "type":"ex non", + "title":"nostrud dolore pariatur", + "uri":"http://UOxsgitbHJECrIJ.ojmf6G", + "hreflang":"x-p6", + "titles":{ + "i-tsu":"enim Excepteur commodo", + "zh-guoyu":"esse ad" + } + }, + { + "urn":"http://KEUcCGIFsmVBhCtBonSbkeshNn.vvlujTL", + "rel":"labore aute nostrud id consequat", + "uri":"http://zTGWpSXkRnUgjnchJR.ugnaHe0", + "hreflang":"czudvqd-plod-uu-e-d9xva49", + "title":"esse sunt", + "titles":{ + "x-rgqw-2":"tempor anim laboris laborum voluptate", + "zh-xiang":"amet ipsum tempor ex veniam", + "x-8rqrwx-e":"ea proident voluptate dolore nostrud", + "x-0l":"incididunt magna" + }, + "type":"in anim magna ex ipsum" + } + ], + "start":"1977-10-14T16:30:08.133Z", + "annotations":[ + 81279214, + 42844883 + ], + "descriptions":{ + "x-0-some":"ex voluptate dolore elit occaecat", + "x-33f":"dolore id Duis ipsum", + "desk-bzcg-ptgyb-j-ov0qv4-55feqs":"occaecat", + "zh-min-nan":"reprehenderit laboris adipisicing dolor" + } + }, + { + "values":[ + -4575999.870990306, + -2919302.085439801 + ], + "end":"2012-11-06T05:21:12.613Z", + "annotations":[ + 71386343, + 65514586 + ], + "links":[ + { + "urn":"http://Rsj.hrV", + "rel":"sed incididunt", + "uri":"http://MZvbbskZhbQdZbQddCuvPZlsvYEWteZX.iwogiDu", + "title":"in nostrud occaecat", + "hreflang":"i-ami", + "type":"dolor minim do qui", + "titles":{ + "x-1pxx62":"mollit in non quis", + "cel-gaulish":"adipisicing mollit tempor minim" + } + }, + { + "urn":"http://zPtswiEfBzJXGcBpLOCPiZDVDc.rxrYt", + "rel":"predecessor-version", + "uri":"http://cHMoDBqWseZkdkkHCO.hvs0", + "title":"Excepteur dolor sint", + "hreflang":"zkkg-ci-x-m7y", + "titles":{ + "felgpucp-qotl-012-z-2tvq1z77-w4n3z3-x-o-w8zasr":"Lorem labore" + }, + "type":"ea exercitation tempor officia aliqua" + } + ], + "start":"2003-12-24T19:49:59.605Z", + "descriptions":{ + "x-v-pybu3qqh":"nisi", + "vydd-wbli-wd-x-2-y":"irure ipsum magna" + }, + "description":"irure ipsum" + } + ], + "links":[ + { + "href":"http://QmZIzznWPquvwKAaTckQqbkpqf.facO", + "rel":"dataconsumerscheme", + "title":"mollit commodo laboris", + "type":"reprehenderit eu", + "titles":{ + "pyrc-531":"laborum ullamco in occaecat labore", + "x-8u4f7b-n":"magna", + "x-k-gg":"do velit dolor sit ut" + }, + "uri":"http://puIuZGLGYmopQncyjL.artR", + "hreflang":"i-tay" + }, + { + "urn":"http://yWcyOmljjGnGnSvEZLXsQuskQMjBnnuzm.amfqHf", + "rel":"process", + "type":"nulla dolore aute in ut", + "title":"occaecat", + "titles":{ + "x-jifgpvfx-f800":"veniam mollit pariatur cupidatat exercitation", + "x-1x4k5ze":"proident irure" + }, + "uri":"https://voaUCBp.lnzuW", + "hreflang":"x-o8dsbrr" + } + ], + "name":"culpa Ut deserunt elit id", + "default":"veniam labore elit non reprehenderit", + "annotations":[ + 95846509, + 6616027 + ], + "description":"minim occaecat cupidatat sint", + "names":{ + "zdt-jw-x-di":"sint ullamco amet", + "x-yuzau-hyo6":"velit esse culpa dolor", + "x-sv-7":"ut aliqua nisi do pariatur", + "x-6":"eu ut" + }, + "descriptions":{ + "i-mingo":"in occaecat in", + "ge-9-gwt7-wvizrnl9-x-0oe4u7-o":"consequat labore Ut quis" + }, + "roles":[ + "jY", + "Ss" + ] + } + ] + }, + "descriptions":{ + "bzwi-jgxe":"incididunt", + "sgn-CH-DE":"elit anim ipsum Ut consectetur" + }, + "dataSets":[ + 0, + 1 + ] + } + ] + }, + "meta":{ + "id":"S", + "prepared":"2011-07-30T17:08:24.586Z", + "sender":{ + "id":"au", + "names":{ + "x-1fh2":"sint", + "x-8wfymw":"ullamco est consectetur", + "i-default":"ad aliqua dolor non", + "zh-min":"exercitation irure" + }, + "name":"ea Ut mollit", + "contact":[ + { + "name":"ut", + "departments":{ + "x-s01ve1k-s331bou2":"ipsum dolore cupidatat commodo" + }, + "uris":[ + "https://xIpqh.lrMN", + "http://h.jfaJ" + ], + "role":"pariatur consectetur mollit", + "roles":{ + "i-pwn":"anim ut ea eu", + "i-lux":"pariatur" + }, + "telephones":[ + "aliquip sint reprehenderit ex", + "minim Ut adipisicing commodo" + ], + "x400s":[ + "in magna Ut dolor est", + "ipsum fugiat" + ], + "faxes":[ + "in dolore", + "magna elit Ut cillum" + ], + "names":{ + "ycow-ygru":"aliqua" + }, + "emails":[ + "iBmtQxV5@zCcyGZJJX.vn", + "pT-3WSuYKF@YkhJSFuzcOJOHWgBNBXsoMRBCC.aox" + ], + "department":"minim" + }, + { + "name":"fugiat veniam", + "role":"cillum exercitation irure amet", + "names":{ + "hfatbl-ty-5-xow7hp9-x-523acx4":"laborum", + "sin-bmn-gwd-cm-uh3uuhxs-x-ja-ohf":"ut mollit aliquip non", + "x-zj8":"ullamco consequat pariatur elit" + }, + "x400s":[ + "ut deserunt qui dolor", + "nulla veniam deserunt sint dolor" + ], + "uris":[ + "https://OEWCEHwGOToycnIpTaEWr.gncP", + "http://BsIQAKKjqxSrdPTzF.gybwVU" + ], + "departments":{ + "x-wfz8-n":"Duis" + }, + "department":"magna elit Duis laborum", + "emails":[ + "AbFn5jvl@XRaMXcVZwye.xed", + "12hrcbNeS7@HfKyBwoTrJQYePvp.toxa" + ], + "telephones":[ + "quis labore sint fugiat", + "Excepteur" + ], + "roles":{ + "x-ysrgd2u-y5qmpe2h":"fugiat dolor Ut anim" + }, + "faxes":[ + "cupidatat ut mollit", + "minim magna Lorem ut quis" + ] + } + ] + }, + "names":{ + "cel-gaulish":"id adipisicing", + "ulnyl-6vjj-v-h9lw1az":"sint in Lorem culpa adipisicing", + "eoqr-5-qbor6-x-gr4bf":"proident" + }, + "contentLanguages":[ + "zh-hakka", + "fq-haa-28gk" + ], + "test":true, + "receivers":[ + { + "id":"o", + "name":"consectetur reprehenderit laboris quis", + "contact":[ + { + "name":"esse mollit ad", + "role":"dolore", + "roles":{ + "ye-tvns-w-6a7g8dqn-x-4376":"fugiat", + "cogu-rjmq-x-q7vjal9":"quis" + }, + "faxes":[ + "commodo ut ea", + "occaecat amet" + ], + "telephones":[ + "tempor quis dolor in", + "nisi" + ], + "names":{ + "zh-guoyu":"laborum in commodo", + "x-37":"Duis nisi id sit mollit" + }, + "emails":[ + "CNGUfP7v@qPrGF.zsf", + "wlZai1gCAu0NNh1@nLehAnoflFXDdMyqSQCNQlVkc.qp" + ], + "x400s":[ + "sint occaecat elit", + "occaecat elit do cupidatat voluptate" + ], + "uris":[ + "https://YEjcyBcZgeWCvSKAOAeTgrUkHbcpM.wdbTWH", + "http://kuTJTYYuTLi.uoK" + ], + "departments":{ + "zh-min-nan":"veniam nisi mollit sint ea", + "x-te4":"in", + "x-fk4zl5a":"eiusmod in ipsum do" + }, + "department":"ex" + }, + { + "name":"dolor cupidatat incididunt consectetur commodo", + "role":"consectetur enim cupidatat tempor dolor", + "uris":[ + "https://eVLMpVa.twzns", + "http://HWSWKdaXFSjAzokhFxFzlwRTwonCPE.totW" + ], + "department":"nulla dolore velit Lorem", + "faxes":[ + "ipsum non veniam", + "cillum sit" + ], + "x400s":[ + "esse exercitation non", + "aute amet cillum anim culpa" + ], + "emails":[ + "uN1Qrt7@ivfSRmRnBBBBNXy.uacs", + "W2T@YzUCUvkKOfEUxXpsVAF.ib" + ], + "telephones":[ + "Lorem sit nulla esse ex", + "dolor commodo magna eu" + ], + "departments":{ + "x-pyevd":"proident sunt officia", + "x-jn4-l8":"dolor consectetur non in", + "zh-xiang":"in sed exercitation" + }, + "roles":{ + "wgu-ohv-pir-hfxj-p-01-x-jf51faz-8ju":"fugiat ex eu" + }, + "names":{ + "x-ftcxscuy-dbwzhsm":"pariatur sunt nostrud adipisicing in", + "esckj-kosb-009-n7c21-n-ycf305-x-cul6-np2geg":"aliqua magna ipsum nulla" + } + } + ], + "names":{ + "vuigyqop-394-x-eu-zzf3m":"in aliquip sint est", + "sgn-CH-DE":"esse" + } + }, + { + "id":"91", + "contact":[ + { + "name":"officia ex dolor aliquip", + "uris":[ + "https://oHTIrQGivsfGMIDtFOWXMem.xsly4", + "https://fsbMMAWOBPcLShfGr.pdduU" + ], + "departments":{ + "x-29":"reprehenderit" + }, + "department":"laborum", + "roles":{ + "zvjq-01vf2u3u-x-yvhf-auisl":"esse occaecat aliquip exercitation", + "en-GB-oed":"non" + }, + "role":"dolor dolore cupidatat eu", + "x400s":[ + "occaecat", + "irure dolore" + ], + "emails":[ + "TYpAg2TeNrAx0up@dlXadyuGRKRGseHVHvACDipnO.tty", + "4AGkiUeK9PwPPwJ@zxXJddSxrRwcGeMlYqhXtVWwxJcKP.vf" + ], + "faxes":[ + "elit sint velit ut", + "labore" + ], + "names":{ + "i-hak":"enim pariatur ut", + "zh-guoyu":"aliqua in", + "omhdcm-ikxz-x-bcj826g-xnin6":"occaecat velit enim mollit", + "offt-xkcf-061-e-1ltd28r-260u":"officia aliquip" + }, + "telephones":[ + "dolore", + "officia tempor dolore do labore" + ] + }, + { + "name":"Duis", + "role":"nisi aliqua do in", + "telephones":[ + "culpa voluptate quis amet non", + "fugiat minim mollit incididunt" + ], + "x400s":[ + "et sit reprehenderit", + "labore ut amet" + ], + "names":{ + "x-nzjqt-ux4ut41":"consequat" + }, + "uris":[ + "https://YTPeqCEhVXrGyDlZTQVR.ztq", + "http://gFUjXIptbvqbAyplyccHFtUiZqx.svctYB4" + ], + "departments":{ + "cel-gaulish":"ullamco incididunt Excepteur eiusmod elit" + }, + "faxes":[ + "reprehenderit non Ut fugiat", + "esse" + ], + "emails":[ + "J-ik1zt@kQLCALdZpDxZpFAEcEaCUbL.yljc", + "7sd5vjVji07@NtvDteRbSugoXdohjIPhVJnMb.th" + ], + "department":"sed est ex sunt", + "roles":{ + "x-7uhrr":"veniam in nulla sit", + "rmg-wmvr-252-a-i60s93-x-ht":"aliqua dolore Ut", + "no-bok":"nostrud sint minim" + } + } + ], + "name":"labore enim et mollit", + "names":{ + "art-lojban":"sint nostrud pariatur dolor", + "akva-mfwn-pj-x-ir0lfj2-tut60fl":"minim nisi" + } + } + ], + "schema":"https://SUrtI.ygbG", + "name":"tempor est sed aliqua nisi", + "links":[ + { + "href":"http://WkrEekGXhffTwtUNB.ohxerb", + "rel":"latest-version", + "uri":"http://nC.spktf", + "title":"quis dolor", + "hreflang":"byo-vyj-ikv-qtm-tp-i-z24-4x50-x-ulqs0qq", + "titles":{ + "x-xbc0b76p":"magna consectetur Excepteur nisi non", + "i-ami":"incididunt aliqua in" + }, + "type":"ad do id consectetur dolor" + }, + { + "href":"https://mMeohaUkBTWkLtI.welvWv", + "rel":"previous", + "hreflang":"fv-ibap-023", + "type":"voluptate veniam fugiat Duis", + "titles":{ + "sgn-BE-FR":"et Excepteur proident irure", + "i-hak":"dolore sit proident" + }, + "uri":"https://mnclIBeA.qdkdRuX", + "title":"proident ea quis" + } + ] + } +} diff --git a/data-message/tools/schemas/2.0.0/sdmx-json-data-schema.json b/data-message/tools/schemas/2.0.0/sdmx-json-data-schema.json new file mode 100644 index 0000000..a04375a --- /dev/null +++ b/data-message/tools/schemas/2.0.0/sdmx-json-data-schema.json @@ -0,0 +1,1120 @@ +{ + "id": "https://raw.githubusercontent.com/sdmx-twg/sdmx-json/master/data-message/tools/schemas/2.0.0/sdmx-json-data-schema.json", + "$schema": "http://json-schema.org/schema#", + "description": "SDMX-JSON 2.0.0 Schema for SDMX 3.0.0 data messages", + "type": "object", + "properties": { + "meta": { + "description": "A meta object that contains non-standard meta-information and basic technical information about the message, such as when it was prepared and who has sent it.", + "$ref": "#/definitions/meta" + }, + "data": { + "description": "Data contains the message's \u201cprimary data\u201d.", + "type": "object", + "properties": { + "structures": { + "type": "array", + "items": {"$ref": "#/definitions/structure"} + }, + "dataSets": { + "type": "array", + "items": {"$ref": "#/definitions/dataSet"} + } + } + }, + "errors": { + "description": "Errors field is an array of status message objects. When appropriate provides a list of status messages in addition to RESTful web services HTTP error status codes.", + "type": "array", + "items": {"$ref": "#/definitions/statusMessage"} + } + }, + "definitions": { + "meta": { + "description": "A meta object that contains non-standard meta-information and basic technical information about the message, such as when it was prepared and who has sent it.", + "type": "object", + "required": [ + "id", + "prepared", + "sender" + ], + "properties": { + "schema": { + "description": "Contains the URL to the schema allowing to validate the message. This also allows identifying the version of SDMX-JSON format used in this message. Providing the link to the SDMX-JSON schema is recommended.", + "type": "string", + "format": "uri" + }, + "id": { + "description": "Unique string assigned by the sender that identifies the message for further references.", + "type": "string", + "pattern": "^[A-Za-z0-9_@$-]+$" + }, + "test": { + "description": "Test indicates whether the message is for test purposes or not. False for normal messages.", + "type": "boolean" + }, + "prepared": { + "description": "A timestamp indicating when the message was prepared. Values must follow the ISO 8601 syntax for combined dates and times, including time zone.", + "type": "string", + "format": "date-time" + }, + "contentLanguages": { + "description": "Array of strings containing the identifyer of all languages used anywhere in the message for localized elements, and thus the languages of the intended audience, representaing in an array format the same information than the http Content-Language response header, e.g. \"en, fr-fr\". See IETF Language Tags: https://tools.ietf.org/html/rfc5646#section-2.1. The array's first element indicates the main language used in the message for localized elements. The usage of this property is recommended.", + "type": "array", + "items": { + "type": "string", + "pattern": "^(?:(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang))$|^((?:[a-z]{2,3}(?:(?:-[a-z]{3}){1,3})?)|[a-z]{4}|[a-z]{5,8})(?:-([a-z]{4}))?(?:-([a-z]{2}|[0-9]{3}))?((?:-(?:[0-9a-z]{5,8}|[0-9][0-9a-z]{3}))*)?((?:-[0-9a-wy-z](?:-[0-9a-z]{2,8})+)*)?(-x(?:-[0-9a-z]{1,8})+)?$|^(x(?:-[0-9a-z]{1,8})+)$" + } + }, + "name": { + "description": "Name provides a name for the transmission. Multiple instances allow for parallel language values.", + "$ref": "#/definitions/localisedBestMatchText" + }, + "names": { + "description": "Name provides a name for the transmission. Multiple instances allow for parallel language values.", + "$ref": "#/definitions/localisedText" + }, + "sender": { + "description": "Name provides a name for the transmission. Multiple instances allow for parallel language values.", + "$ref": "#/definitions/party" + }, + "receivers": { + "description": "Receiver is information about the part(y/ies) that is/are the intended recipient(s) of the message. This can be useful if the WS requires authentication.", + "type": "array", + "items": {"$ref": "#/definitions/party"} + }, + "links": {"$ref": "#/definitions/links"} + } + }, + "party": { + "type": "object", + "required": ["id"], + "properties": { + "id": { + "description": "The id holds the identification of the party.", + "type": "string", + "pattern": "^[A-Za-z0-9_@$-]+$" + }, + "name": { + "description": "Name is a human-readable name of the party.", + "$ref": "#/definitions/localisedBestMatchText" + }, + "names": { + "description": "List of localised human-readable name of the party.", + "$ref": "#/definitions/localisedText" + }, + "contact": { + "description": "Contact provides contact information for the party in regard to the transmission of the message.", + "type": "array", + "items": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "description": "Name contains a humain-readable name for the contact.", + "$ref": "#/definitions/localisedBestMatchText" + }, + "names": { + "description": "Name contains a humain-readable name for the contact.", + "$ref": "#/definitions/localisedText" + }, + "department": { + "description": "Department is a humain-readable designation of the organisational structure by a linguistic expression, within which the contact person works.", + "$ref": "#/definitions/localisedBestMatchText" + }, + "departments": { + "description": "Department is a humain-readable designation of the organisational structure by a linguistic expression, within which the contact person works.", + "$ref": "#/definitions/localisedText" + }, + "role": { + "description": "Role is the responsibility of the contact person with respect to the object for which this person is the contact.", + "$ref": "#/definitions/localisedBestMatchText" + }, + "roles": { + "description": "Role is the responsibility of the contact person with respect to the object for which this person is the contact.", + "$ref": "#/definitions/localisedText" + }, + "telephones": { + "type": "array", + "items": { + "description": "Telephone holds the telephone number for the contact person.", + "type": "string" + } + }, + "faxes": { + "type": "array", + "items": { + "description": "Fax holds the fax number for the contact person.", + "type": "string" + } + }, + "x400s": { + "type": "array", + "items": { + "description": "X400 holds the X.400 address for the contact person.", + "type": "string" + } + }, + "uris": { + "type": "array", + "items": { + "description": "URI holds an information URL for the contact person.", + "type": "string", + "format": "uri" + } + }, + "emails": { + "type": "array", + "items": { + "description": "Email holds the email address for the contact person.", + "type": "string", + "format": "email" + } + } + } + } + } + } + }, + "localisedBestMatchText": { + "type": "string", + "description": "localisedBestMatchText is a reusable element, used for providing a human-readable best-language-match texts." + }, + "localisedText": { + "description": "localisedText provides for a set of language-specific alternates to be provided for any human-readable constructs in the instance. ", + "type": "object", + "patternProperties": {"^(?:(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang))$|^((?:[a-z]{2,3}(?:(?:-[a-z]{3}){1,3})?)|[a-z]{4}|[a-z]{5,8})(?:-([a-z]{4}))?(?:-([a-z]{2}|[0-9]{3}))?((?:-(?:[0-9a-z]{5,8}|[0-9][0-9a-z]{3}))*)?((?:-[0-9a-wy-z](?:-[0-9a-z]{2,8})+)*)?(-x(?:-[0-9a-z]{1,8})+)?$|^(x(?:-[0-9a-z]{1,8})+)$": {"type": "string"}} + }, + "statusMessage": { + "description": "statusMessage describes the structure of an error or warning message.", + "type": "object", + "required": ["code"], + "properties": { + "code": { + "description": "Provides a code number for the status message. Standard code numbers are defined in the SDMX 2.1 Web Services Guidelines.", + "type": "number" + }, + "title": { + "description": "Title contains the title of the message, in best-match language value. A short, human-readable localised summary of the status that SHOULD NOT change from occurrence to occurrence of the status, except for purposes of localization.", + "$ref": "#/definitions/localisedBestMatchText" + }, + "titles": { + "description": "Title contains the title of the message, in parallel language values. A list of short, human-readable localised summary of the status that SHOULD NOT change from occurrence to occurrence of the status, except for purposes of localization.", + "$ref": "#/definitions/localisedText" + }, + "detail": { + "description": "Detail contains the detailed text of the message, in best-match language value. A human-readable localised explanation specific to this occurrence of the status. Like title, this field\u2019s value can be localized. It is fully customizable by the service providers and should provide enough detail to ease understanding the reasons of the status.", + "$ref": "#/definitions/localisedBestMatchText" + }, + "details": { + "description": "Detail contains the detailed text of the message, in parallel language values. A list of human-readable localised explanations specific to this occurrence of the status. Like title, this field\u2019s value can be localized. It is fully customizable by the service providers and should provide enough detail to ease understanding the reasons of the status.", + "$ref": "#/definitions/localisedText" + }, + "links": { + "description": "Links field is an array of link objects. If appropriate, a collection of links to additional external resources for the status.", + "$ref": "#/definitions/links" + } + } + }, + "links": { + "description": "Links field is an array of link objects. If appropriate, a collection of links to additional external resources for the header.", + "type": "array", + "items": { + "type": "object", + "properties": { + "href": {"$ref": "#/definitions/uri"}, + "rel": { + "description": "Relationship of the object to the external resource. See semantics below. Use 'self' to indicate the urn to the parent object.", + "anyOf": [ + {"type": "string"}, + { + "description": "structure: provides a reference to the data structure or metadata structure definition depending on the context. Other SDMX artefact types can be specified, e.g. dataflow, provisionagreement, etc. For the others please see: https://tools.ietf.org/rfc/rfc5988.txt", + "type": "string", + "enum": [ + "agencyscheme", + "alternate", + "appendix", + "bookmark", + "categorisation", + "categoryscheme", + "chapter", + "codelist", + "conceptscheme", + "constraint", + "contents", + "copyright", + "current", + "dataflow", + "dataconsumerscheme", + "dataproviderscheme", + "describedby", + "edit", + "edit-media", + "enclosure", + "first", + "glossary", + "help", + "hierarchicalcodelist", + "hub", + "index", + "last", + "latest-version", + "license", + "metadataflow", + "next", + "next-archive", + "organisationunitscheme", + "payment", + "prev", + "predecessor-version", + "previous", + "prev-archive", + "process", + "provisionagreement", + "related", + "replies", + "reportingtaxonomy", + "section", + "self", + "service", + "start", + "structure", + "structureset", + "stylesheet", + "subsection", + "successor-version", + "up", + "version-history", + "via", + "working-copy", + "working-copy-of" + ] + } + ] + }, + "urn": { + "description": "The urn holds a valid SDMX Registry URN (see SDMX Registry Specification for details).", + "$ref": "#/definitions/urn" + }, + "uri": { + "description": "The uri attribute holds a URI that contains a link to additional information about the resource, such as a web page. This uri is not an SDMX resource.", + "$ref": "#/definitions/uri" + }, + "title": {"$ref": "#/definitions/localisedBestMatchText"}, + "titles": {"$ref": "#/definitions/localisedText"}, + "type": { + "description": "A hint about the type of representation returned by the link.", + "type": "string" + }, + "hreflang": { + "description": "The natural language of the external link, the same as used in the HTTP Accept-Language request header.", + "type": "string", + "pattern": "^(?:(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang))$|^((?:[a-z]{2,3}(?:(?:-[a-z]{3}){1,3})?)|[a-z]{4}|[a-z]{5,8})(?:-([a-z]{4}))?(?:-([a-z]{2}|[0-9]{3}))?((?:-(?:[0-9a-z]{5,8}|[0-9][0-9a-z]{3}))*)?((?:-[0-9a-wy-z](?:-[0-9a-z]{2,8})+)*)?(-x(?:-[0-9a-z]{1,8})+)?$|^(x(?:-[0-9a-z]{1,8})+)$" + } + }, + "anyOf": [ + {"required": [ + "href", + "rel" + ]}, + {"required": [ + "urn", + "rel" + ]} + ] + } + }, + "structure": { + "type": "object", + "required": ["dimensions"], + "properties": { + "dataSets": { + "type": "array", + "items": {"type": "integer"}, + "minItems": 1 + }, + "links": {"$ref": "#/definitions/links"}, + "name": {"$ref": "#/definitions/localisedBestMatchText"}, + "names": {"$ref": "#/definitions/localisedText"}, + "description": {"$ref": "#/definitions/localisedBestMatchText"}, + "descriptions": {"$ref": "#/definitions/localisedText"}, + "dimensions": { + "type": "object", + "properties": { + "dataSet": { + "type": "array", + "items": {"$ref": "#/definitions/dimension"}, + "uniqueItems": true + }, + "series": { + "type": "array", + "items": {"$ref": "#/definitions/dimension"}, + "uniqueItems": true + }, + "observation": { + "type": "array", + "items": {"$ref": "#/definitions/dimension"}, + "uniqueItems": true + } + }, + "additionalProperties": false + }, + "measures": { + "type": "object", + "properties": { + "observation": { + "type": "array", + "items": {"$ref": "#/definitions/measure"}, + "uniqueItems": true + } + }, + "additionalProperties": false + }, + "attributes": { + "type": "object", + "properties": { + "dataSet": { + "type": "array", + "items": {"$ref": "#/definitions/attribute"}, + "uniqueItems": true + }, + "dimensionGroup": { + "type": "array", + "items": {"$ref": "#/definitions/attribute"}, + "uniqueItems": true + }, + "series": { + "type": "array", + "items": {"$ref": "#/definitions/attribute"}, + "uniqueItems": true + }, + "observation": { + "type": "array", + "items": {"$ref": "#/definitions/attribute"}, + "uniqueItems": true + } + }, + "additionalProperties": false + }, + "annotations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "description": "Non-standard identification of an annotation.", + "type": "string" + }, + "title": { + "description": "AnnotationTitle provides a title for the annotation.", + "type": "string" + }, + "type": { + "description": "AnnotationType is used to distinguish between annotations designed to support various uses. The types are not enumerated, as these can be specified by the user or creator of the annotations. The definitions and use of annotation types should be documented by their creator.", + "type": "string" + }, + "value":{ + "description":"AnnotationValue holds a string containing the non-localised value text of the annotation.", + "type":"string" + }, + "text": { + "description": "AnnotationText holds a best language match string containing the text of the annotation.", + "$ref": "#/definitions/localisedBestMatchText" + }, + "texts": { + "description": "AnnotationText holds language-specific strings containing the texts of the annotation.", + "$ref": "#/definitions/localisedText" + }, + "links": { + "description": "Links field is an array of link objects. Also used to specify the Annotation URL which points to an external resource which may contain or supplement the annotation (using 'self' as relationship). If a specific behavior is desired, an annotation type should be defined which specifies the use of this field more exactly. If appropriate, a collection of links to additional external resources.", + "$ref": "#/definitions/links" + } + } + } + } + } + }, + "dimension": { + "type": "object", + "required": [ + "id", + "keyPosition", + "values" + ], + "properties": { + "id": { + "type": "string", + "pattern": "^[A-Za-z][A-Za-z0-9_-]*$" + }, + "name": {"$ref": "#/definitions/localisedBestMatchText"}, + "names": {"$ref": "#/definitions/localisedText"}, + "description": {"$ref": "#/definitions/localisedBestMatchText"}, + "descriptions": {"$ref": "#/definitions/localisedText"}, + "keyPosition": { + "type": "integer", + "minimum": 0 + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[A-Za-z][A-Za-z0-9_-]*$" + } + }, + "format": {"$ref": "#/definitions/dimFormat"}, + "links": {"$ref": "#/definitions/links"}, + "annotations": { + "type": "array", + "items": { + "type": "integer", + "minimum": 0 + } + }, + "values": {"$ref": "#/definitions/dimValues"} + } + }, + "measure": { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "string", + "pattern": "^[A-Za-z][A-Za-z0-9_-]*$" + }, + "name": {"$ref": "#/definitions/localisedBestMatchText"}, + "names": {"$ref": "#/definitions/localisedText"}, + "description": {"$ref": "#/definitions/localisedBestMatchText"}, + "descriptions": {"$ref": "#/definitions/localisedText"}, + "roles": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[A-Za-z][A-Za-z0-9_-]*$" + } + }, + "isMandatory": {"type": "boolean"}, + "format": {"$ref": "#/definitions/format"}, + "links": {"$ref": "#/definitions/links"}, + "annotations": { + "type": "array", + "items": { + "type": ["integer"], + "minimum": 0 + } + }, + "values": {"$ref": "#/definitions/compValues"} + } + }, + "attribute": { + "type": "object", + "required": [ + "id", + "relationship" + ], + "properties": { + "id": { + "type": "string", + "pattern": "^[A-Za-z][A-Za-z0-9_-]*$" + }, + "name": {"$ref": "#/definitions/localisedBestMatchText"}, + "names": {"$ref": "#/definitions/localisedText"}, + "description": {"$ref": "#/definitions/localisedBestMatchText"}, + "descriptions": {"$ref": "#/definitions/localisedText"}, + "roles": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[A-Za-z][A-Za-z0-9_-]*$" + } + }, + "isMandatory": {"type": "boolean"}, + "relationship": { + "$ref": "#/definitions/AttributeRelationshipType", + "description": "AttributeRelationship describes how the value of this attribute varies with the values of other components. These relationships expresses the attachment level of the attribute." + }, + "format": {"$ref": "#/definitions/format"}, + "default": {"type": "string"}, + "links": {"$ref": "#/definitions/links"}, + "annotations": { + "type": "array", + "items": { + "type": "integer", + "minimum": 0 + } + }, + "values": {"$ref": "#/definitions/compValues"} + } + }, + "dimFormat": { + "type": "object", + "properties": { + "dataType": {"$ref": "#/definitions/dimensionDataType"}, + "isSequence":{"type":"boolean"}, + "interval":{"type":"number"}, + "startValue":{"type":"number"}, + "endValue":{"type":"number"}, + "timeInterval":{"$ref":"#/definitions/duration"}, + "startTime":{"$ref":"#/definitions/StandardTimePeriodType"}, + "endTime":{"$ref":"#/definitions/StandardTimePeriodType"}, + "minLength":{ + "type":"integer", + "minimum":1 + }, + "maxLength":{ + "type":"integer", + "minimum":1 + }, + "minValue":{"type":"number"}, + "maxValue":{"type":"number"}, + "decimals":{ + "type":"integer", + "minimum":1 + }, + "pattern":{"type":"string"}, + "sentinelValues": {"$ref": "#/definitions/sentinelValues"} + } + }, + "format": { + "type": "object", + "properties": { + "dataType": {"$ref": "#/definitions/nonDimensionDataType"}, + "isSequence":{"type":"boolean"}, + "interval":{"type":"number"}, + "startValue":{"type":"number"}, + "endValue":{"type":"number"}, + "timeInterval":{"$ref":"#/definitions/duration"}, + "startTime":{"$ref":"#/definitions/StandardTimePeriodType"}, + "endTime":{"$ref":"#/definitions/StandardTimePeriodType"}, + "minLength":{ + "type":"integer", + "minimum":1 + }, + "maxLength":{ + "type":"integer", + "minimum":1 + }, + "minValue":{"type":"number"}, + "maxValue":{"type":"number"}, + "decimals":{ + "type":"integer", + "minimum":1 + }, + "pattern":{"type":"string"}, + "isMultiLingual":{"type":"boolean"}, + "sentinelValues": {"$ref": "#/definitions/sentinelValues"}, + "maxOccurs":{ + "$ref":"#/definitions/OccurenceType", + "default":1 + }, + "minOccurs":{ + "type":"integer", + "minimum":0, + "default":1 + } + } + }, + "sentinelValues": { + "type": "array", + "items": { + "type": "object", + "anyOf": [ + {"required": ["value", "name"]}, + {"required": ["value", "name", "names"]} + ], + "properties": { + "value": { + "anyOf": [ + {"type": "number"}, + {"type": "integer"}, + {"type": "string"} + ] + }, + "name": {"$ref": "#/definitions/localisedBestMatchText"}, + "names": {"$ref": "#/definitions/localisedText"}, + "description": {"$ref": "#/definitions/localisedBestMatchText"}, + "descriptions": {"$ref": "#/definitions/localisedText"} + } + }, + "minItems": 1, + "uniqueItems": true + }, + "dimValues": { + "type": "array", + "items": { + "type": "object", + "oneOf": [ + {"anyOf": [ + {"required": ["id", "name"]}, + {"required": ["id", "name", "names"]} + ]}, + {"required": ["value"]} + ], + "properties": { + "id": { + "type": "string", + "pattern": "^[A-Za-z0-9_@$-]+$" + }, + "value": { + "oneOf": [ + {"type": "integer"}, + {"type": "number"}, + {"type": "boolean"}, + {"type": "string"} + ] + }, + "name": {"$ref": "#/definitions/localisedBestMatchText"}, + "names": {"$ref": "#/definitions/localisedText"}, + "description": {"$ref": "#/definitions/localisedBestMatchText"}, + "descriptions": {"$ref": "#/definitions/localisedText"}, + "start": { + "type": "string", + "format": "date-time" + }, + "end": { + "type": "string", + "format": "date-time" + }, + "parent": { + "type": "string", + "pattern": "^[A-Za-z0-9_@$-]+$" + }, + "order": { + "type": "integer", + "minimum": 0 + }, + "links": {"$ref": "#/definitions/links"}, + "annotations": { + "type": "array", + "items": { + "type": "integer", + "minimum": 0 + } + } + } + }, + "minItems": 1, + "uniqueItems": true + }, + "compValues": { + "type": "array", + "items": { + "anyOf": [ + {"type": "null"}, + { + "type": "object", + "oneOf": [ + {"anyOf": [ + {"required": ["id", "name"]}, + {"required": ["id", "name", "names"]} + ]}, + {"required": ["value"]}, + {"required": ["values"]} + ], + "properties": { + "id": { + "type": "string", + "pattern": "^[A-Za-z0-9_@$-]+$" + }, + "value": { + "oneOf": [ + {"type": "integer"}, + {"type": "number"}, + {"type": "boolean"}, + {"type": "string"}, + {"$ref": "#/definitions/localisedText"} + ] + }, + "values": {"$ref": "#/definitions/valueArray"}, + "name": {"$ref": "#/definitions/localisedBestMatchText"}, + "names": {"$ref": "#/definitions/localisedText"}, + "description": {"$ref": "#/definitions/localisedBestMatchText"}, + "descriptions": {"$ref": "#/definitions/localisedText"}, + "start": { + "type": "string", + "format": "date-time" + }, + "end": { + "type": "string", + "format": "date-time" + }, + "parent": { + "type": "string", + "pattern": "^[A-Za-z0-9_@$-]+$" + }, + "order": { + "type": "integer", + "minimum": 0 + }, + "links": {"$ref": "#/definitions/links"}, + "annotations": { + "type": "array", + "items": { + "type": "integer", + "minimum": 0 + } + } + } + } + ] + }, + "minItems": 1, + "uniqueItems": true + }, + "dataSet": { + "type": "object", + "properties": { + "structure": {"type": "integer"}, + "action": { + "type": "string", + "enum": [ + "Information", + "Append", + "Replace", + "Delete" + ] + }, + "reportingBegin": {"type": "string"}, + "reportingEnd": {"type": "string"}, + "validFrom": { + "type": "string", + "format": "date-time" + }, + "validTo": { + "type": "string", + "format": "date-time" + }, + "publicationYear": {"type": "string"}, + "publicationPeriod": {"type": "string"}, + "annotations": { + "type": "array", + "items": { + "type": "integer", + "minimum": 0 + } + }, + "attributes": { + "type": "array", + "items": { + "anyOf": [ + {"type": "integer"}, + {"type": "number"}, + {"type": "boolean"}, + {"type": "string"}, + {"$ref": "#/definitions/localisedText"}, + {"$ref": "#/definitions/valueArray"}, + {"type": "null"} + ], + "minimum": 0 + } + }, + "dimensionGroupAttributes": { + "type": "object", + "patternProperties": {"^([0-9]+(:[0-9]*)*)|((:[0-9]*)*(:[0-9]+)+(:[0-9]*)*)$": { + "type": "array", + "items": { + "anyOf": [ + {"type": "integer"}, + {"type": "number"}, + {"type": "boolean"}, + {"type": "string"}, + {"$ref": "#/definitions/localisedText"}, + {"$ref": "#/definitions/valueArray"}, + {"type": "null"} + ], + "minimum": 0 + } + }}, + "additionalProperties": false + }, + "observations": { + "type": "object", + "patternProperties": {"^[0-9]+(:[0-9]+)*$": { + "type": "array", + "items": { + "anyOf": [ + {"type": "integer"}, + {"type": "number"}, + {"type": "boolean"}, + {"type": "string"}, + {"$ref": "#/definitions/localisedText"}, + {"$ref": "#/definitions/valueArray"}, + {"type": "null"} + ] + } + }}, + "additionalProperties": false + }, + "series": { + "type": "object", + "patternProperties": {"^[0-9]+(:[0-9]+)*$": { + "type": "object", + "properties": { + "annotations": { + "type": "array", + "items": { + "type": "integer", + "minimum": 0 + } + }, + "attributes": { + "type": "array", + "items": { + "anyOf": [ + {"type": "integer"}, + {"type": "number"}, + {"type": "boolean"}, + {"type": "string"}, + {"$ref": "#/definitions/localisedText"}, + {"$ref": "#/definitions/valueArray"}, + {"type": "null"} + ], + "minimum": 0 + } + }, + "observations": { + "type": "object", + "patternProperties": {"^[0-9]+(:[0-9]+)*$": { + "type": "array", + "items": { + "anyOf": [ + {"type": "integer"}, + {"type": "number"}, + {"type": "boolean"}, + {"type": "string"}, + {"$ref": "#/definitions/localisedText"}, + {"$ref": "#/definitions/valueArray"}, + {"type": "null"} + ] + } + }}, + "additionalProperties": false + } + }, + "additionalProperties": false + }}, + "additionalProperties": false + }, + "links": {"$ref": "#/definitions/links"} + }, + "required": ["links"] + }, + "valueArray": { + "oneOf": [{ + "type": "array", + "items": { + "anyOf": [ + {"type": "integer"}, + {"type": "null"} + ] + }, + "minItems": 1 + },{ + "type": "array", + "items": { + "anyOf": [ + {"type": "number"}, + {"type": "null"} + ] + }, + "minItems": 1 + },{ + "type": "array", + "items": { + "anyOf": [ + {"type": "boolean"}, + {"type": "null"} + ] + }, + "minItems": 1 + },{ + "type": "array", + "items": { + "anyOf": [ + {"type": "string"}, + {"type": "null"} + ] + }, + "minItems": 1 + },{ + "type": "array", + "items": { + "anyOf": [ + {"$ref": "#/definitions/localisedText"}, + {"type": "null"} + ] + }, + "minItems": 1 + },{ + "type": "array", + "items": { + "anyOf": [ + {"$ref": "#/definitions/valueArray"}, + {"type": "null"} + ] + }, + "minItems": 1 + }] + }, + "AttributeRelationshipType": { + "description": "AttributeRelationshipType defines the structure for stating the relationship between an attribute and other data structure definition components.", + "type": "object", + "properties": { + "dataflow": { + "type": "object", + "description": "This is an empty object and means that the value of the attribute varies per dataflow. It is the data modeller's responsibility to design or use non-overlapping dataflows that do not have observations in common, otherwise the integrity of dataflow-specific attribute values is not assured by the model, e.g. when querying those data through its DSD.", + "maxProperties": 0 + }, + "dimensions": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[A-Za-z][A-Za-z0-9_-]*$", + "description": "ID of a local dimension. This is used to reference a subset of dimensions in the data structure definition on which the value of this attribute depends. An attribute using this relationship can be either a group or series attribute. However, the level at which the values of the attribute will be presented in the data message (dataset, group, series or observation) is determined by the data format, the data query and which dimensions are referenced." + }, + "minItems": 1 + }, + "observation": { + "type": "object", + "description": "This is an empty object and means that value of the attribute can vary with each observation.", + "maxProperties": 0 + }, + "primaryMeasure": { + "type": "string", + "pattern": "^[A-Za-z][A-Za-z0-9_-]*$", + "description": "Deprecated and replaced by the relationship `observation`. For backward-compatibility only. The content is ignored and the presence of this relationship means that value of the attribute can vary with each observation." + }, + "measures": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[A-Za-z][A-Za-z0-9_-]*$", + "description": "ID of a local measure. This is used to reference a subset of measures in the data structure definition to which the values of this attribute apply. This is only for informational and presentational purposes. If the `measures` relationship is not present then the attribute values apply to whole observations." + }, + "minItems": 1 + } + }, + "oneOf": [ + {"required": ["dimensions"]}, + {"required": ["dataflow"]}, + {"required": ["observation"]}, + {"required": ["primaryMeasure"]} + ] + }, + "dimensionDataType": { + "description": "dimensionDataType provides an enumerated list of the types of data formats allowed as the for the representation of dimensions, since SDMX 3.0.0 also including GeospatialInformation. However, time dimensions only allow for 'ObservationalTimePeriod', 'StandardTimePeriod', 'BasicTimePeriod', 'GregorianTimePeriod', 'GregorianYear', 'GregorianYearMonth', 'GregorianDay', 'ReportingTimePeriod', 'ReportingYear', 'ReportingSemester', 'ReportingTrimester', 'ReportingQuarter', 'ReportingMonth', 'ReportingWeek', 'ReportingDay', 'DateTime' and 'TimeRange'.", + "type": "string", + "enum": [ + "String", + "Alpha", + "AlphaNumeric", + "Numeric", + "BigInteger", + "Integer", + "Long", + "Short", + "Decimal", + "Float", + "Double", + "Boolean", + "URI", + "Count", + "InclusiveValueRange", + "ExclusiveValueRange", + "Incremental", + "ObservationalTimePeriod", + "StandardTimePeriod", + "BasicTimePeriod", + "GregorianTimePeriod", + "GregorianYear", + "GregorianYearMonth", + "GregorianDay", + "ReportingTimePeriod", + "ReportingYear", + "ReportingSemester", + "ReportingTrimester", + "ReportingQuarter", + "ReportingMonth", + "ReportingWeek", + "ReportingDay", + "DateTime", + "TimeRange", + "Month", + "MonthDay", + "Day", + "Time", + "Duration", + "GeospatialInformation" + ] + }, + "nonDimensionDataType": { + "description": "nonDimensionDataType provides an enumerated list of the types of data formats allowed as the for the representation of measures and attributes, since SDMX 3.0.0 also including XHTML and GeospatialInformation.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XHTML" + ] + }, + { + "$ref":"#/definitions/dimensionDataType" + } + ] + }, + "StandardTimePeriodType":{ + "description":"StandardTimePeriodType defines the set of standard time periods in SDMX. This includes the reporting time periods and the basic date type (i.e. the calendar time periods and the dateTime format).", + "anyOf":[ + { + "description":"xs:gYear: GregorianTimePeriodType defines the set of standard calendar periods in SDMX.", + "type":"string", + "pattern":"^([1-9][0-9]{3,}|0[0-9]{3})(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))?$" + }, + { + "description":"xs:gYearMonth: GregorianTimePeriodType defines the set of standard calendar periods in SDMX.", + "type":"string", + "pattern":"^([1-9][0-9]{3,}|0[0-9]{3})-(0[1-9]|1[0-2])(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))?$" + }, + { + "type":"string", + "format":"date" + }, + { + "type":"string", + "format":"date-time" + }, + { + "type":"string", + "pattern":"^\\d{4}\\-([ASTQ]\\d{1}|[MW]\\d{2}|[D]\\d{3})(Z|((\\+|\\-)\\d{2}:\\d{2}))?$", + "description":"ReportingTimePeriodType defines standard reporting periods in SDMX, which are all in relation to the start day (day-month) of a reporting year which is specified in the specialized reporting year start day attribute. If the reporting year start day is not defined, a day of January 1 is assumed. The reporting year must be epxressed as the year at the beginning of the period. Therfore, if the reproting year runs from April to March, any given reporting year is expressed as the year for April. The general format of a report period can be described as [year]-[period][time zone]?, where the type of period is designated with a single character followed by a number representing the period. Note that all periods allow for an optional time zone offset. See the details of each member type for the specifics of its format." + } + ] + }, + "uri": { + "description": "Contains the URL to the schema allowing to validate the message. This also allows identifying the version of SDMX-JSON format used in this message. Providing the link to the SDMX-JSON schema is recommended.", + "type": "string", + "format": "uri" + }, + "urn": { + "type": "string", + "format": "uri" + }, + "duration":{ + "type":"string", + "pattern":"^P((([0-9]+Y([0-9]+M)?([0-9]+D)?|([0-9]+M)([0-9]+D)?|([0-9]+D))(T(([0-9]+H)([0-9]+M)?([0-9]+(\\.[0-9]+)?S)?|([0-9]+M)([0-9]+(\\.[0-9]+)?S)?|([0-9]+(\\.[0-9]+)?S)))?)|(T(([0-9]+H)([0-9]+M)?([0-9]+(\\.[0-9]+)?S)?|([0-9]+M)([0-9]+(\\.[0-9]+)?S)?|([0-9]+(\\.[0-9]+)?S))))$" + }, + "OccurenceType":{ + "description":"OccurenceType is used to express the maximum occurrence of an object. It combines an integer, greater than 1, and the literal text, \"unbounded\", for objects which have no upper limit on its occurrence.", + "anyOf":[ + { + "description":"MaxOccursNumberType is a base type used to restrict an integer to be greater than 1, for the purpose of expressing the maximum number of occurrences of an object.", + "type":"integer", + "minimum":1 + }, + { + "description":"UnboundedCodeType provides single textual value of \"unbounded\", for use in OccurentType.", + "const":"unbounded" + } + ] + } + } +} diff --git a/metadata-message/README.md b/metadata-message/README.md new file mode 100644 index 0000000..1024a9f --- /dev/null +++ b/metadata-message/README.md @@ -0,0 +1,21 @@ +# SDMX-JSON Metadata Message + +As one of the standard SDMX metadata exchange formats, SDMX-JSON Metadata Message is +a JSON (JavaScript Object Notation) based referential metadata exchange message format +designed for and therefore responding to the main use case of data discovery +and visualisation on the web. + +JSON is a widely used standardised lightweight data-interchange format. +SDMX-JSON with a simple and dense but generic message format that supports +different types of data structures will ease writing software for the web +that easily consumes SDMX resources. The format may be used in a wide variety of +programming languages and application programs. Testing and development of the +format has focused on JavaScript applications running in web browsers. + +The current SDMX-JSON Metadata Message format 2.0.0 supports the SDMX 3.0 Information Model +and works together with the SDMX 3.0 RESTful Web Services API for referential metadata queries. + +See: +- docs: for the descriptive documentation +- samples: for message samples +- tools: for the normative JSON schema usable for validation purposes diff --git a/metadata-message/docs/1-sdmx-json-field-guide.md b/metadata-message/docs/1-sdmx-json-field-guide.md new file mode 100644 index 0000000..810ccd9 --- /dev/null +++ b/metadata-message/docs/1-sdmx-json-field-guide.md @@ -0,0 +1,564 @@ +# Introduction to SDMX-JSON Metadata Message + +See the SDMX-JSON Data Message docs for a brief introduction of the SDMX information model. For additional information on the SDMX information model, please refer to the [SDMX documentation](http://sdmx.org/?page_id=10). + +Samples, tools and other SDMX-JSON resources are available in the public Github repository . + +Before we start, let's clarify a few more things about this guide: + +- New fields may be introduced in later versions. Therefore consuming applications should tolerate the addition of new fields with ease. +- The ordering of properties in objects is undefined. The properties may appear in any order and consuming applications should not rely on any specific ordering. It is safe to consider a nulled property and the absence of a property as the same thing. +- Not all properties appear in all contexts. For example response with error status messages may not contain a data property. + +# Field Guide to SDMX-JSON 2.0 Metadata Message Objects (aligned with SDMX 3.0.0) + +## message + +Message is the top level object and it contains the requested information (referential metadata) as well as the meta-information decribing the (technical) context of the message and, possibly, status information. + +* meta - *Object* *optional*. A *[meta](#meta)* object that contains non-standard meta-information and basic technical information about the message, such as when it was prepared and who has sent it. +* data - *Object* *optional*. *[Data](#data)* contains the message's “primary data”. +* errors - *Array* *optional*. *Errors* field is an array of *[statusMessage](#statusMessage)* objects. When appropriate provides a list of status messages in addition to RESTful web services HTTP error status codes. + +The members data and status CAN coexist in the same message. + +Example: + + { + "meta": { + # meta object # + }, + "data": { + # data object # + }, + "errors": [ + { + # statusMessage object # + } + ] + } + +## meta + +*Object* *optional*. Used to include non-standard meta-information and basic technical information +about the message, such as when it was prepared and who has sent it. +Any members MAY be specified within `meta` objects. +* schema - *String* *optional*. Contains the URL to the schema allowing to validate the message. This also allows identifying the version of SDMX-JSON format used in this message. **Providing the link to the SDMX-JSON schema is recommended.** +* id - *String*. Unique string that identifies the message for further references. +* test - *Boolean* *optional*. Indicates whether the message is for test purposes or not. False for normal messages. +* prepared - *String*. A timestamp indicating when the message was prepared. Values must follow the ISO 8601 syntax for combined dates and times, including time zone. +* contentLanguages - *Array* *optional*. Array of strings containing the identifyer of all languages used anywhere in the message for localized elements, and thus the languages of the intended audience, representaing in an array format the same information than the http Content-Language response header, e.g. "en, fr-fr". See IETF Language Tags: https://tools.ietf.org/html/rfc5646#section-2.1. The array's first element indicates the main language used in the message for localized elements. **The usage of this property is recommended.** +* name - *String* *optional*. Human-readable (best-language-match) name for the transmission. +* names - *Object* *optional*. Human-readable localised *[names](#names)* for the transmission. +* sender - *Object*. *[Sender](#sender)* contains information about the party that is transmitting the message. +* receivers - *Array* *optional* of *[Receiver](#receiver)* objects thats contain information about the party that is receiving the message. This can be useful if the WS requires authentication. +* links - *Array* *optional*. *Links* field is an array of *[link](#link)* objects. If appropriate, a collection of links to additional external resources for the header. + +See the section on [localised text elements](#localised-text-elements) on how the message deals with languages. + +Example: + + "meta": { + "schema": "https://raw.githubusercontent.com/sdmx-twg/sdmx-json/master/metadata-message/tools/schemas/sdmx-json-metadata-schema.json", + "copyright": "Copyright 2017 Statistics hotline", + "id": "b1804c51-1ee3-45a9-bb75-795cd4e06489", + "prepared": "2018-01-03T12:54:12", + "test": false, + "contentLanguages": [ "en", "fr-fr" ], + "name": "Transmission name", + "names": { + # name object # + }, + "sender": { + # sender object # + }, + "receivers": [ + { + # receiver object # + } + ], + "links": [ + { + # link object # + } + ] + } + +### sender + +*Object*. Information about the party that is transmitting the message. +Sender contains the following fields: + +* id - *String*. A unique identifier of the party. +* name - *String* *nullable*. A human-readable (best-language-match) name of the sender. +* names - *Object* *optional*. A list of human-readable localised *[names](#names)* of the sender. +* contacts - *Array* *optional*. A collection of *[contacts](#contact)*. Provides contact information for the party in regard to the transmission of the message. + +See the section on [localised text elements](#localised-text-elements) on how the message deals with languages. + +Example: + + "sender": { + "id": "ECB", + "name": "European Central Bank", + "names": { + "en": "European Central Bank", + "fr": "Banque Centrale Européenne" + }, + "contacts": [ + { + # contact objects # + } + ] + } + +#### names + +*Object* containing all appropriate localised names, one per object property: + +* One or more of: IETF Language Tag according to [RFC 5646 documentation](https://tools.ietf.org/html/rfc5646#section-2.1) for specifying locals in HTTP - *String*. The localised name. + +See the section on [localised text elements](#localised-text-elements) on how the message deals with languages. + +Example: + + { + "en": "This is an English name", + "en-GB": "This is a British name", + "fr": "C'est un nom français" + } + +#### contact + +*Object*. A collection of contact details. Each object in the collection +may contain the following field: + +* id - *String*. Identifier for the resource. +* name - *String* *optional*. Human-readable (best-language-match) name of the contact. +* names - *Object* *optional*. Human-readable localised *[names](#names)* of the contact. +* department - *String* *optional*. Human-readable (best-language-match) name of the organisational structure for the contact. +* departments - *Object* *optional*. Human-readable localised *[names](#names)* of the organisational structure for the contact. +* role - *String* *optional*. Human-readable (best-language-match) name of the responsibility of the contact. +* roles - *Object* *optional*. Human-readable localised *[names](#names)* of the responsibility of the contact. +* telephones - *Array* *optional*. An array of telephone numbers for the contact. +* faxes - *Array* *optional*. An array of fax numbers for the contact person. +* uris - *Array* *optional*. An array of uris. Each uri holds an information URL for the contact. +* emails - *Array* *optional*. An array of email addresses for the contact person. +* x400s - *Array* *optional*. An array of X.400 addresses for the contact person. + +See the section on [localised strings](#localised-strings) on how the message deals with languages. + +Example: + + { + "id": "HOTLINE", + "name": "Statistics hotline", + "names": { + "en": "Statistics hotline", + "fr": "Service d'assistance téléphonique des Statistiques" + }, + "department": "Statistics hotline", + "departments": { + "en": "Statistics hotline", + "fr": "Service d'assistance téléphonique des Statistiques" + }, + "role": "Statistics hotline", + "roles": { + "en": "Statistics hotline", + "fr": "Service d'assistance téléphonique des Statistiques" + }, + "telephones": [ "+00 0 00 00 00 00" ], + "faxes": [ "+00 0 00 00 00 01" ], + "uris": [ "www.xyz.org" ], + "emails": [ "statistics@xyz.org" ] + } + +### receiver + +*Object* *optional*. Information about the party that is receiving the message. +This can be useful if the WS requires authentication. Receiver contains the +same fields as *[sender](#sender)*. + +### link + +See the section on *[linking mechanism](#linking-mechanism)* for all information on links. + +## data + +*Object* *optional*. Header contains the message's “primary data”. + +* metadataSets - *Array* *optional*. This field is an array of *[metadataSet](#metadataSet)* objects. A metadata set contains a collection of reported metadata against a set of values for a given full or partial target identifier, as described in a metadata structure definition. The metadata set may contain reported metadata for multiple report structures defined in a metadata structure definition. + +Example: + + "data": { + "metadataSets": [ + { + # metadataSet object # + } + ] + } + +### metadataSet + +*Object*. Contains a collection of reported metadata against a set of values for a given full or partial target identifier, as described in a metadata structure definition. The metadata set may contain reported metadata for multiple report structures defined in a metadata structure definition. + +* action - *String* *optional*. Action provides a list of actions, describing the intention of the data transmission from the sender's side. + - `Append` - this is an incremental update for an existing `dataSet` or the provision of new data or documentation (attribute values) formerly absent. If any of the supplied data or metadata is already present, it will not replace these data. + - `Replace` - data are to be replaced, and may also include additional data to be appended. + - `Delete` - data are to be deleted. + - `Information` (default) - data are being exchanged for informational purposes only, and not meant to update a system. +* publicationPeriod - *String* *optional*. The publicationPeriod specifies the period of publication of the data in terms of whatever provisioning agreements might be in force (i.e., "2005-Q1" if that is the time of publication for a `metadataSet` published on a quarterly basis). +* publicationYear - *String* *optional*. The publicationYear holds the ISO 8601 four-digit year. +* reportingBegin - *String* *optional*. The start of the time period covered by the message. +* reportingEnd - *String* *optional*. The end of the time period covered by the message. +* id - *String*. Identifier for the metadata set. +* agencyID - *String*. ID of the agency maintaining this metadata set. +* version - *String* *optional*. Version of this metadata set according to semantic versioning. If not specified then the metadata set is non-versioned. +* isExternalReference - *Boolean* *optional*. If set to “true” it indicates that the content of the metadata set is held externally. +* metadataflow - *String*. URN reference to the metadataflow definition (either *metadataflow* or *metadataProvisionAgreement* is required). +* metadataProvisionAgreement - *String*. URN reference to the metadata provision definition (either *metadataflow* or *metadataProvisionAgreement* is required). +* validFrom - *String* *optional*. The validFrom indicates the inclusive start time indicating the validity of the information in the data. +* validTo - *String* *optional*. The validTo indicates the inclusive end time indicating the validity of the information in the data. +* annotations - *Array* *optional*. *[Annotations](#annotation)* is a collection of indices of the corresponding *annotations* for the metadata set. +* links - *Array* *optional*. *Links* field is an array of *[link](#link)* objects. If appropriate, a collection of links to additional information regarding the metadata set. +* name - *String*. Human-readable (best-language-match) name of the metadata set. +* names - *Object* *optional*. Human-readable localised *[names](#names)* of the metadata set. +* description - *String* *optional*. Human-readable (best-language-match) description of the metadata set. +* descriptions - *Object* *optional*. Human-readable localised descriptions (see *[names](#names)*) of the metadata set. +* targets - Non-empty *array* of *String*. Each *target* holds a valid SDMX Registry URN (see SDMX Registry Specification for details) of the object to which the reported metadata apply. The same metadata set can be linked to multiple targets. +* attributes - Non-empty *array* of recursive *[attribute](#attribute)* objects. Contains the reported metadata attribute values for the reported metadata and recursively their child metadata attributes. + +See the section on [localised text elements](#localised-text-elements) on how the message deals with languages. + +Example: + + { + "action": "Information", + "publicationPeriod": "2018-Q1", + "publicationYear": "2018", + "reportingBegin": "1960", + "reportingEnd": "2020", + "id": "METADATASET", + "agencyID": "ECB.DISS", + "version": "1.0", + "isExternalReference": false, + "metadataflow": "urn:sdmx:org.sdmx.infomodel.metadatastructure.Metadataflow=ECB.DISS:MDF(1.0)", + # "metadataProvisionAgreement": "urn:sdmx:org.sdmx.infomodel.registry.MetadataProvisionAgreement=ECB.DISS:MDPA(1.0.0)", + "validFrom": "2018-04-01", + "validTo": "2018-07-01", + "annotations": [ + { + # annotation object # + } + ], + "links": [ + { + # link object # + } + ], + "name": "Metadata set", + "names": { + "en": "Metadata set", + "fr": "Set de métadonnées" + }, + "description": "This is the description of the metadata set", + "descriptions": { + "en": "This is the description of the metadata set", + "fr": "Ceci est la description de l'ensemble des métadonnées" + }, + "targets": ["urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=ECB:ECB_EXR1(1.0)"], + "attributes": [ + { + # attribute object # + } + ] + } + +#### attribute + +*Object*. Defines the structure for a reported metadata attribute. A value for the attribute can be supplied as either a single value, or multi-lingual text values (either structured or unstructured). An optional set of child metadata attributes is also available if the metadata attribute definition defines nested metadata attributes. + +* id - *String*. ID for the reported metadata attribute. +* annotations - *Array* *optional*. *[Annotations](#annotation)* is a collection of indices of the corresponding *annotations* for the reported metadata attribute. +* format - *Object* *optional*. *[Format](#format)* describes the allowed metadata attribute representation. It is only used when the metadata attributes are not defined by an enumerated list of identifiable items (codelist). +* value - *String*, *Number*, *Integer*, *Boolean* or localised *String* (see *[names](#names)*) *object*, *optional*. Value for the reported metadata attribute. Also HTML strings are supported. +* attributes - Non-empty *array* of recursive *[attribute](#attribute)* objects. Contains the reported metadata attribute values for the reported metadata and recursively their child metadata attributes. + +One of the properties is required: value, values, text or structuredText. + +See the section on [localised text elements](#localised-text-elements) on how the message deals with languages. + +Example: + + { + "id": "REPORT_ATTRIBUTE1", + "format": { + # format object # + }, + "value": "CODED_TEXT", + "annotations": [ + { + # annotation object # + } + ], + "attributes": [ + { + # attribute object # + } + ] + } + + "value": "

An XHTML text

" + + "value": { + "en": "

An XHTML text

" + } + +##### format + +*Object*. The format object defines the representation for a component. It describes the possible content for component values, which could be text (including XHTML and multi-lingual values). + +* dataType - *String* *optional*. Describes the type of data format allowed for the representation of the component. Only the following dataTypes are supported: "String", + "Alpha", "AlphaNumeric", "Numeric", "BigInteger", "Integer", "Long", "Short", "Decimal", "Float", "Double", "Boolean", "URI", "Count", "InclusiveValueRange", "ExclusiveValueRange", "Incremental", "ObservationalTimePeriod", "StandardTimePeriod", "BasicTimePeriod", "GregorianTimePeriod", "GregorianYear", "GregorianYearMonth", "GregorianDay", "ReportingTimePeriod", "ReportingYear", "ReportingSemester", "ReportingTrimester", "ReportingQuarter", "ReportingMonth", "ReportingWeek", "ReportingDay", "DateTime", "TimeRange", "Month", "MonthDay", "Day", "Time", "Duration", "GeospatialInformation" and "XHTML". The default data type is "String". +* isSequence - *Boolean* *optional*. Indicates whether the values are intended to be ordered, and it may work in combination with the interval, startValue, and endValue attributes or the timeInterval, startTime, and endTime, attributes. If this attribute holds a value of 'true', a start value or time and a numeric or time interval must supplied. If an end value is not given, then the sequence continues indefinitely. +* interval - *Integer* *optional*. Specifies the permitted interval (increment) in a sequence. In order for this to be used, the isSequence attribute must have a value of 'true'. +* startValue - *Number* *optional*. Is used in conjunction with the isSequence and interval attributes (which must be set in order to use this attribute). This attribute is used for a numeric sequence, and indicates the starting point of the sequence. This value is mandatory for a numeric sequence to be expressed. +* endValue - *Number* *optional*. Is used in conjunction with the isSequence and interval attributes (which must be set in order to use this attribute). This attribute is used for a numeric sequence, and indicates that ending point (if any) of the sequence. +* timeInterval - *String* *optional*. Indicates the permitted duration in a time sequence. It complies with the time duration specification of the ISO 8601 standard. In order for this to be used, the isSequence attribute must have a value of 'true'. +* startTime - *String* *optional*. Is used in conjunction with the isSequence and timeInterval attributes (which must be set in order to use this attribute). This attribute is used for a time sequence, and indicates the start time of the sequence. This value is mandatory for a time sequence to be expressed. It must be a valid standard time period (gYear, gYearMonth, date, dateTime and SDMX time periods). +* endTime - *String* *optional*. Is used in conjunction with the isSequence and timeInterval attributes (which must be set in order to use this attribute). This attribute is used for a time sequence, and indicates that ending point (if any) of the sequence. It must be a valid standard time period (gYear, gYearMonth, date, dateTime and SDMX time periods). +* minLength - *Positive integer* *optional*. Specifies the minimum length of the value in characters. +* maxLength - *Positive integer* *optional*. Specifies the maximum length of the value in characters. +* minValue - *Number* *optional*. Is used for inclusive and exclusive ranges, indicating what the lower bound of the range is. If this is used with an inclusive range, a valid value will be greater than or equal to the value specified here. By default, the minValue is assumed to be inclusive. +* maxValue - *Number* *optional*. Is used for inclusive and exclusive ranges, indicating what the upper bound of the range is. If this is used with an inclusive range, a valid value will be less than or equal to the value specified here. By default, the maxValue is assumed to be inclusive. +* decimals - *Positive integer* *optional*. Indicates the number of characters allowed after the decimal separator. +* pattern - *String* *optional*. Holds any standard regular expression. +* isMultiLingual - *Boolean* *optional*. This indicates for a text format of type "String" or "XHTML", whether the uncoded component value should allow for multiple values in different languages. The default is `false`. +* sentinelValues - *Array* of *Object*s *optional*. When present, the sentinelValues array indicates that sentinel values are defined for the data format. Each *[sentinelValue](#sentinelvalue)* object indicates a reserved value in an otherwise open value domain that holds a specific meaning. For example, a value of -1 can be defined to indicate a non-applicable value. + +Example: + + { + "dataType": "String", + "minLength": 4, + "maxLength": 4, + "pattern": "^[A-Za-z][A-Za-z0-9_-]*$", + "isMultilingual": true + } + + { + "dataType": "Double", + "isMultilingual": false, + "sentinelValues": [ + { + # sentinel value object # + } + ] + } + +###### sentinelValue + +*Object*. It defines a reserved value (within the value domain of the data format) along with its meaning. + +* value - *Number* or *String* *optional*. The sentinel value (within the value domain of the data format) being described. +* name - *String* *optional*. Human-readable (best-language-match) name (or meaning) of the sentinel value. +* names - *Object* *optional*. Human-readable localised *[names](#names)* (or meanings) of the sentinel value. +* description - *String* *optional*. Human-readable (best-language-match) description for the sentinel value. +* descriptions - *Object* *optional*. Human-readable localised descriptions (see *[names](#names)*) for the sentinel value. + +Example: + + { + "value": "-1", + "name": "Non-response", + "names": { "en": "Non-response", + "fr": "Non-réponse" }, + "description": "Description for non-response.", + "descriptions": { "en": "Description for non-response.", + "fr": "Description de non-réponse." } + } + +#### annotation + +*Object* *optional*. Provides all information about an annotation. + +* id - *String* *optional*. ID provides a non-standard identification of an annotation. It can be used to disambiguate annotations. +* title - *String* *optional*. Provides a non-localised title for the annotation. +* type - *String* *optional*. Type is used to distinguish between annotations designed to support various uses. The types are not enumerated, and these can be freely specified by the creator of the annotations. The definitions and use of annotation types should be documented by their creator. +* value - *String* *optional*. Provides a non-localised value text for the annotation. +* text - *String* *optional*. A human-readable (best-language-match) text of the annotation. +* texts - *Object* *optional*. A list of human-readable localised texts (see *[names](#names)*) of the annotation. +* links - *Array* *optional*. *Links* field is an array of *[link](#link)* objects. If appropriate, a link to an additional external resource which may contain or supplement the annotation. + +See the section on [localised text elements](#localised-text-elements) on how the message deals with languages. + +Example: + + { + "id": "74747", + "title": "Sample annotation", + "type": "reference", + "value": "123456", + "text": "Sample annotation text", + "texts": { + "en": "Sample annotation text", + "fr": "Exemple de texte d'annotation" + }, + "links": [ + { + # link object # + } + ] + } + +#### link + +See the section on [linking mechanism](#linking-mechanism) for all information on links. +Providing links allowing accessing the underlying SDMX Data Structure Definition, Dataflow +and/or Provision Agreements is recommended. + +## statusMessage + +*Object* *optional*. Used to provide status messages in addition to RESTful web services HTTP error status codes. The following pieces of information should be provided: + +* code - *Number*. Provides a code number for the status message if appropriate. Standard code numbers are defined in the SDMX 2.1 Web Services Guidelines. +* title - *String* *optional*. A short, human-readable (best-language-match) summary of the situation that SHOULD NOT change from occurrence to occurrence of the status, except for purposes of localization. +* titles - *Object* *optional*. A list of short, human-readable localised summaries (see *[names](#names)*) of the status that SHOULD NOT change from occurrence to occurrence of the status, except for purposes of localization. +* detail - *String* *optional*. A human-readable (best-language-match) explanation specific to this occurrence of the status. Like title, this field’s value can be localized. It is fully customizable by the service providers and should provide enough detail to ease understanding the reasons of the status. +* details - *Object* *optional*. A list of human-readable localised explanations (see *[names](#names)*) specific to this occurrence of the status. Like titles, this field’s value can be localized. It is fully customizable by the service providers and should provide enough detail to ease understanding the reasons of the status. +* links - *Array* *optional*. *Links* field is an array of *[link](#link)* objects. If appropriate, a collection of links to additional external resources for the status message. + +See the section on [localised strings](#localised-strings) on how the message deals with languages. + +Example: + + { + "code": 150, + "title": "Invalid parameter", + "titles": { + "en": "Invalid parameter", + "fr": "Paramètre invalide" + } + } + +# Linking mechanism + +## link + +*Object* *optional*. A link to an external resource. + +* href - *String*. Absolute or relative URL of the external resource. +* rel - *String*. Relationship of the object to the external resource. See semantics below. +* urn - *String* *optional*. The urn holds a valid SDMX Registry URN (see SDMX Registry Specification for details). +* uri - *String* *optional*. The uri attribute holds a URI that contains a link to additional information about the resource, such as a web page. This uri is not an SDMX resource. +* title - *String* *optional*. A human-readable (best-language-match) description of the target link. +* titles - *Object* *optional*. A list of human-readable localised descriptions (see *[names](#names)*) of the target link. +* type - *String* *optional*. A hint about the type of representation returned by the link. +* hreflang - *String* *optional*. The natural language of the external link, the same as used in the HTTP Accept-Language request header. + +See the section on [localised text elements](#localised-text-elements) on how the message deals with languages. + +Examples: + + { + "href": "https://registry.sdmx.org/ws/rest/datastructure/ECB/ECB_EXR1", + "rel": "self", + "uri": "http://www.xyz.org/pdf/0123456789" + } + + { + "href": "https://registry.sdmx.org/ws/rest/dataflow/ECB.DISS/BSI_PUB/1.0", + "rel": "dataflow", + "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.dataflow=ECB.DISS:BSI_PUB(1.0)" + } + + { + "href": "https://registry.sdmx.org/FusionRegistry/ws/rest/provisionagreement/ESTAT/PA_NAMAIN_IDC_N", + "rel": "provisionagreement" + } + + { + "href": "https://registry.sdmx.org/help.html", + "rel": "help", + "title": "Documentation about the SDMX Global Registry", + "titles": { "en": "Documentation about the SDMX Global Registry" }, + "type": "text/html", + "hreflang": "en" + } + +Collections of links can be attached to various elements in SDMX-JSON. + +Similarily with standards such as HTML5 and Atom, link elements in SDMX-JSON *must* define a *URL* (the `href` attribute) and a *semantic* (the `rel` attribute). This allows clients to follow the links they care about and ignore the ones whose semantic they are not interested in. In addition, links in SDMX-JSON *may* define a `title` (a human-friendly description of the target link) and a `type` (a hint about the type of representation returned by the link). Please refer to the [list of Media Types and Subtypes](http://www.iana.org/assignments/media-types/media-types.xhtml) assigned and listed by the IANA for additional information about expected values for the `type` attribute. + +SDMX-JSON offers a list of predefined semantics, but implementers are free to extend it. The list of predefined semantics comes from the list of SDMX artefacts that can be returned by SDMX RESTful web services, semantics defined in [RFC5988](https://tools.ietf.org/rfc/rfc5988.txt) and additional items deemed to be useful in the context of statistical data dissemination. These semantics are: + + - SDMX artefacts: dataStructure, metadataStructure, categoryScheme, conceptScheme, codelist, hierarchicalCodelist, organisationScheme, agencyScheme, dataProviderScheme, dataConsumerScheme, organisationUnitScheme, dataflow, metadataflow, reportingTaxonomy, provisionAgreement, structureSet, process, categorisation, contentconstraint, attachmentconstraint, category, concept, code, organisation, agency, dataProvider, dataConsumer, organisationUnit, reportingCategory, Data + - RFC5988: alternate, copyright, glossary, help, index. + - Miscellaneous: calendar (link to a release calendar), source (information about the source of data), request (the SDMX RESTful query that triggered the SDMX-JSON response). + +The *URL* captured in the `href` attribute can be *absolute* or *relative*. **It is recommended to use absolute URLs in case the SDMX-JSON message is archived.** + +# Localised text elements + +**Localised best-language-match text strings (static properties matched through "Lookup"):** + +The first best language match according to the user’s preferred language choices expressed through the HTTP content negotiation (Accept-Language header parameter) is to be provided for each localised text element. The message does however not indicate the returned language per localised text element. + +This language matching type is called "Lookup", see . + +Example: + + "name": "Frequency", + +**Localised text objects (variable properties matched through "Filtering"):** + +All available language matches according to the user’s preferred language choices expressed through the HTTP content negotiation (Accept-Language header parameter) is to be provided for each localised text element. + +This language matching type is called "Filtering", see . + +Example: + + "names": { + "en": "Frequency", + "fr": "Fréquence" + }, + + +The localised text object needs to be present whenever the related localised best-language-match text strings is present, and especially whenever a localised text is mandatory in the SDMX Information model. Note that localised text (and the knowledge about the locale) is mandatory in structure messages when artefacts are being submitted for storage to a registry or to other databases. The localised text object is important for use cases where multiple languages are required or where the information on the language used is required. + + +In case that there is no language match for a particular localisable element, it is optional to: + +- return the element in a system-default language or alternatively to not return the element +- indicate available alternative languages for the element's maintainable artefact through links to underlying localised resources + +**It is recommended to indicate all languages used anywhere in the message for localised elements through http Content-Language response header (languages of the intended audience) and/or through a “contentLanguages” property in the meta tag.** The main language used can be indicated through the “lang” property in the meta tag. + + +# Security Considerations + +This document defines a response format for SDMX RESTful Web Services in JSON +and it raises no new security considerations. SDMX Web Services Guidelines +includes the security considerations associated with its usage. + + +# Extending SDMX-JSON + +The objects defined in SDMX-JSON are "open", i.e. they can be extended with properties not defined in this specification. Providers of SDMX-JSON messages are therefore welcome to add support for features not covered in this specification. Whenever appropriate, providers who opt to do so are invited to inform us, so that future versions of SDMX-JSON may integrate these extensions, thereby improving interoperability. + +The snippet below shows an example of an `error` object, extended with a `wsCustomErrorCode`: + + ``` + "errors": [ + { + "code": 150, + "title": "Invalid parameter", + "titles": { + "en": "Invalid parameter", + "fr": "Paramètre invalide" + }, + "wsCustomErrorCode": 39272 + } + ] + ``` diff --git a/metadata-message/samples/constructed-sample b/metadata-message/samples/constructed-sample new file mode 100644 index 0000000..e4e1057 --- /dev/null +++ b/metadata-message/samples/constructed-sample @@ -0,0 +1,141 @@ +{ + "meta":{ + "schema":"https://raw.githubusercontent.com/sdmx-twg/sdmx-json/master/metadata-message/tools/schemas/2.0.0/sdmx-json-metadata-schema.json", + "id":"GEN", + "test":true, + "prepared":"2021-08-20T08:00:00-05:00", + "contentLanguages":[ + "en" + ], + "sender":{ + "id":"ESTAT", + "name":"Eurostat", + "names":{ + "en":"Eurostat" + } + }, + "links":[ + { + "href":"http://sdmx.webservice.org/root/metadata/categoryscheme/ESTAT/DATAFLOWS_SCHEME/1.0/PSC.DEM.TOT", + "rel":"self", + "type":"metadata", + "hreflang":"en" + }, + { + "href":"http://sdmx.webservice.org/root/metadatastructure/ESTAT/ESMS/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataStructure=ESTAT:ESMS(1.0)", + "rel":"metadatastructure", + "type":"metadatastructure", + "hreflang":"en" + } + ] + }, + "data":{ + "metadataSets":[ + { + "id":"METADATASET1", + "agencyID":"ESTAT", + "name":"METADATASET1", + "metadataflow":"urn:sdmx:org.sdmx.infomodel.metadatastructure.Metadataflow=ESTAT:ESMS(1.0)", + "targets":[ + "urn:sdmx:org.sdmx.infomodel.categoryscheme.Category=ESTAT:DATAFLOWS_SCHEME(1.0).PSC.DEM.TOT" + ], + "links":[ + { + "href":"http://sdmx.webservice.org/root/metadatastructure/", + "urn":"urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataStructure=ESTAT:ESMS(1.0)", + "rel":"metadatastructure", + "type":"metadatastructure", + "hreflang":"en" + } + ], + "attributes":[ + { + "id":"CONTACT", + "attributes":[ + { + "id":"ORGANISATION", + "value":"Eurostat, the statistical office of the European Union" + }, + { + "id":"ORGANISATION_UNIT", + "value":"Unit F1: Population" + }, + { + "id":"ADDRESS", + "attributes":[ + { + "id":"STREET", + "value":"RUE ALPHONSE WEICKER 5" + }, + { + "id":"CITY", + "value":"LUXEMBOURG" + }, + { + "id":"POSTAL_CODE", + "value":2721 + }, + { + "id":"COUNTRY", + "value":"LU" + } + ] + }, + { + "id":"EMAIL", + "value":"pop_unit@ec.europa.eu" + } + ] + } + ] + }, + { + "id":"META_UPDATE", + "agencyID":"ESTAT", + "name":"METADATASET1", + "metadataflow":"urn:sdmx:org.sdmx.infomodel.metadatastructure.Metadataflow=ESTAT:ESMS(1.0)", + "targets":[ + "urn:sdmx:org.sdmx.infomodel.categoryscheme.Category=ESTAT:DATAFLOWS_SCHEME(1.0).PSC.DEM.TOT" + ], + "attributes":[ + { + "id":"CERTIFIED", + "value":"2009-12-10" + }, + { + "id":"POSTED", + "value":"2010-01-13" + }, + { + "id":"UPDATED", + "value":"2010-01-13", + "attributes":[ + { + "id":"NEXT", + "value":"2011-01-20" + } + ] + } + ] + }, + { + "id":"STAT_PRES", + "agencyID":"ESTAT", + "name":"METADATASET1", + "metadataflow":"urn:sdmx:org.sdmx.infomodel.metadatastructure.Metadataflow=ESTAT:ESMS(1.0)", + "targets":[ + "urn:sdmx:org.sdmx.infomodel.categoryscheme.Category=ESTAT:DATAFLOWS_SCHEME(1.0).PSC.DEM.TOT" + ], + "attributes":[ + { + "id":"DATA_DESCR", + "value":{ + "en":"

The tables presented here cover the 'demography' collection. How complete the tables are depends on the availability of data from the competent National Statistical Institutes.

Eurostat carries out yearly four annual data collections in the field of demography, three at national level and one at regional level:

1) Rapid: carried out in April-May (deadline 15 May of year T); this data collection aims at collecting the main aggregated information for the previous year and the population on 1 January of the current year.

More specifically, for a questionnaire sent in year T the following data are requested:

  • Demographic balance by sex for year (T-1): population on 1 January of years (T-1) and T, live births in year (T-1), deaths in year (T-1), net migration and statistical adjustment in year (T-1).
  • Other demographic data for year (T-1): live births outside marriage, deaths under 1 year old, marriages, divorces.
  • Migration flows by sex in year (T-1): immigrants and emigrants.
  • Demographic indicators in year (T-1): total fertility rate, male, female and total life expectancy at birth.

2) Joint: carried out in summer (deadline 15 September of year T); this is the main data collection of the year, and it is done in close co-operation with the United Nation Statistical Division (UNSD). It concerns detailed data by sex, age and other characteristics for the demographic events of the previous year and the population on 1 January of the current and previous years.

More specifically, for a questionnaire sent in year T the following data is requested:

- Population tables:

  • population by age and sex on 1 January of years (T-1) and T;
  • population by age, sex and legal marital status on 1 January of years (T-1) and T;

- Fertility tables: with reference to year (T-1),

  • live births by mother's age, year of birth and legal marital status;
  • live births by biological order and mother's age and year of birth;
  • live births by month;
  • total fertility rate and mean age at childbearing;
  • legally induced abortions by mother's age and number of previous live births;
  • late fœtal deaths by mother's age.

- Mortality tables: with reference to year (T-1),

  • infant mortality by age and sex;
  • deaths by age, year of birth and sex;
  • deaths by month;
  • life expectancy at birth by sex.

- Nuptiality tables: with reference to year (T-1),

  • marriages by previous marital status of bride and groom;
  • first marriages by age, year of birth and sex;
  • divorces by duration of marriage.

3) Nowcast: carried out in October-November (deadline 15 November of year T); this data collection aims at collecting the latest monthly data for the current year T on

  • births,
  • deaths,
  • immigrants and emigrants

in order to produce a 1st January population forecast for the following year (T+1).

4) Regional: carried out in November-December (deadline 15 December of year T), it is based on a regional breakdown of the countries agreed at EU level using the latest version of the Nomenclature of Territorial Units for Statistics (NUTS) and of the Statistical regions for the EFTA and Candidate countries. Detailed data are collected at regional level NUTS 2 by sex, age and year of birth, on demographic events of the previous year and on population on 1 January of the current and previous year. Aggregated data are collected at NUTS 3 level.

More specifically, for a questionnaire sent in year T the following data is requested:

NUTS2:

  • population by sex and age on 1st January of years (T-1) and T;

With reference to year (T-1):

  • live births by age and year of birth of the mother;
  • deaths by sex and age and year of birth;
  • internal migration by sex and region of origin and destination (excluding intra-regional migration);
  • arrivals due to internal migration by sex and year of birth (excluding intra-regional migration);
  • departures due to internal migration by sex and year of birth (excluding intra-regional migration).

NUTS3:

  • surface in km2 on 1st January (total surface including inland water; land area) of year T;
  • population by sex and broad age groups on 1st of January of years (T-1) and T;
  • total number of births and deaths in year (T-1).

The data coming from the NSIs are validated by Eurostat, processed and loaded into NewCronos (Eurostat's free dissemination website). They are also the basis of the several thematic and horizontal Eurostat publications.

Data are presented by single country and for aggregates of countries. For EU and Euro Area, only the current and the previous version of the aggregates are published, currently EU-27, EU-25, EA-16 and EA-15. Moreover, data is shown for the European Economic Area (EEA) and the European Free Trade Association (EFTA); in the regional demography domain, an aggregate for the current candidate countries is also available.

" + } + } + ] + } + ] + } +} diff --git a/metadata-message/samples/constructed-sample.json b/metadata-message/samples/constructed-sample.json new file mode 100644 index 0000000..e4e1057 --- /dev/null +++ b/metadata-message/samples/constructed-sample.json @@ -0,0 +1,141 @@ +{ + "meta":{ + "schema":"https://raw.githubusercontent.com/sdmx-twg/sdmx-json/master/metadata-message/tools/schemas/2.0.0/sdmx-json-metadata-schema.json", + "id":"GEN", + "test":true, + "prepared":"2021-08-20T08:00:00-05:00", + "contentLanguages":[ + "en" + ], + "sender":{ + "id":"ESTAT", + "name":"Eurostat", + "names":{ + "en":"Eurostat" + } + }, + "links":[ + { + "href":"http://sdmx.webservice.org/root/metadata/categoryscheme/ESTAT/DATAFLOWS_SCHEME/1.0/PSC.DEM.TOT", + "rel":"self", + "type":"metadata", + "hreflang":"en" + }, + { + "href":"http://sdmx.webservice.org/root/metadatastructure/ESTAT/ESMS/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataStructure=ESTAT:ESMS(1.0)", + "rel":"metadatastructure", + "type":"metadatastructure", + "hreflang":"en" + } + ] + }, + "data":{ + "metadataSets":[ + { + "id":"METADATASET1", + "agencyID":"ESTAT", + "name":"METADATASET1", + "metadataflow":"urn:sdmx:org.sdmx.infomodel.metadatastructure.Metadataflow=ESTAT:ESMS(1.0)", + "targets":[ + "urn:sdmx:org.sdmx.infomodel.categoryscheme.Category=ESTAT:DATAFLOWS_SCHEME(1.0).PSC.DEM.TOT" + ], + "links":[ + { + "href":"http://sdmx.webservice.org/root/metadatastructure/", + "urn":"urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataStructure=ESTAT:ESMS(1.0)", + "rel":"metadatastructure", + "type":"metadatastructure", + "hreflang":"en" + } + ], + "attributes":[ + { + "id":"CONTACT", + "attributes":[ + { + "id":"ORGANISATION", + "value":"Eurostat, the statistical office of the European Union" + }, + { + "id":"ORGANISATION_UNIT", + "value":"Unit F1: Population" + }, + { + "id":"ADDRESS", + "attributes":[ + { + "id":"STREET", + "value":"RUE ALPHONSE WEICKER 5" + }, + { + "id":"CITY", + "value":"LUXEMBOURG" + }, + { + "id":"POSTAL_CODE", + "value":2721 + }, + { + "id":"COUNTRY", + "value":"LU" + } + ] + }, + { + "id":"EMAIL", + "value":"pop_unit@ec.europa.eu" + } + ] + } + ] + }, + { + "id":"META_UPDATE", + "agencyID":"ESTAT", + "name":"METADATASET1", + "metadataflow":"urn:sdmx:org.sdmx.infomodel.metadatastructure.Metadataflow=ESTAT:ESMS(1.0)", + "targets":[ + "urn:sdmx:org.sdmx.infomodel.categoryscheme.Category=ESTAT:DATAFLOWS_SCHEME(1.0).PSC.DEM.TOT" + ], + "attributes":[ + { + "id":"CERTIFIED", + "value":"2009-12-10" + }, + { + "id":"POSTED", + "value":"2010-01-13" + }, + { + "id":"UPDATED", + "value":"2010-01-13", + "attributes":[ + { + "id":"NEXT", + "value":"2011-01-20" + } + ] + } + ] + }, + { + "id":"STAT_PRES", + "agencyID":"ESTAT", + "name":"METADATASET1", + "metadataflow":"urn:sdmx:org.sdmx.infomodel.metadatastructure.Metadataflow=ESTAT:ESMS(1.0)", + "targets":[ + "urn:sdmx:org.sdmx.infomodel.categoryscheme.Category=ESTAT:DATAFLOWS_SCHEME(1.0).PSC.DEM.TOT" + ], + "attributes":[ + { + "id":"DATA_DESCR", + "value":{ + "en":"

The tables presented here cover the 'demography' collection. How complete the tables are depends on the availability of data from the competent National Statistical Institutes.

Eurostat carries out yearly four annual data collections in the field of demography, three at national level and one at regional level:

1) Rapid: carried out in April-May (deadline 15 May of year T); this data collection aims at collecting the main aggregated information for the previous year and the population on 1 January of the current year.

More specifically, for a questionnaire sent in year T the following data are requested:

  • Demographic balance by sex for year (T-1): population on 1 January of years (T-1) and T, live births in year (T-1), deaths in year (T-1), net migration and statistical adjustment in year (T-1).
  • Other demographic data for year (T-1): live births outside marriage, deaths under 1 year old, marriages, divorces.
  • Migration flows by sex in year (T-1): immigrants and emigrants.
  • Demographic indicators in year (T-1): total fertility rate, male, female and total life expectancy at birth.

2) Joint: carried out in summer (deadline 15 September of year T); this is the main data collection of the year, and it is done in close co-operation with the United Nation Statistical Division (UNSD). It concerns detailed data by sex, age and other characteristics for the demographic events of the previous year and the population on 1 January of the current and previous years.

More specifically, for a questionnaire sent in year T the following data is requested:

- Population tables:

  • population by age and sex on 1 January of years (T-1) and T;
  • population by age, sex and legal marital status on 1 January of years (T-1) and T;

- Fertility tables: with reference to year (T-1),

  • live births by mother's age, year of birth and legal marital status;
  • live births by biological order and mother's age and year of birth;
  • live births by month;
  • total fertility rate and mean age at childbearing;
  • legally induced abortions by mother's age and number of previous live births;
  • late fœtal deaths by mother's age.

- Mortality tables: with reference to year (T-1),

  • infant mortality by age and sex;
  • deaths by age, year of birth and sex;
  • deaths by month;
  • life expectancy at birth by sex.

- Nuptiality tables: with reference to year (T-1),

  • marriages by previous marital status of bride and groom;
  • first marriages by age, year of birth and sex;
  • divorces by duration of marriage.

3) Nowcast: carried out in October-November (deadline 15 November of year T); this data collection aims at collecting the latest monthly data for the current year T on

  • births,
  • deaths,
  • immigrants and emigrants

in order to produce a 1st January population forecast for the following year (T+1).

4) Regional: carried out in November-December (deadline 15 December of year T), it is based on a regional breakdown of the countries agreed at EU level using the latest version of the Nomenclature of Territorial Units for Statistics (NUTS) and of the Statistical regions for the EFTA and Candidate countries. Detailed data are collected at regional level NUTS 2 by sex, age and year of birth, on demographic events of the previous year and on population on 1 January of the current and previous year. Aggregated data are collected at NUTS 3 level.

More specifically, for a questionnaire sent in year T the following data is requested:

NUTS2:

  • population by sex and age on 1st January of years (T-1) and T;

With reference to year (T-1):

  • live births by age and year of birth of the mother;
  • deaths by sex and age and year of birth;
  • internal migration by sex and region of origin and destination (excluding intra-regional migration);
  • arrivals due to internal migration by sex and year of birth (excluding intra-regional migration);
  • departures due to internal migration by sex and year of birth (excluding intra-regional migration).

NUTS3:

  • surface in km2 on 1st January (total surface including inland water; land area) of year T;
  • population by sex and broad age groups on 1st of January of years (T-1) and T;
  • total number of births and deaths in year (T-1).

The data coming from the NSIs are validated by Eurostat, processed and loaded into NewCronos (Eurostat's free dissemination website). They are also the basis of the several thematic and horizontal Eurostat publications.

Data are presented by single country and for aggregates of countries. For EU and Euro Area, only the current and the previous version of the aggregates are published, currently EU-27, EU-25, EA-16 and EA-15. Moreover, data is shown for the European Economic Area (EEA) and the European Free Trade Association (EFTA); in the regional demography domain, an aggregate for the current candidate countries is also available.

" + } + } + ] + } + ] + } +} diff --git a/metadata-message/samples/constructed-sample2 b/metadata-message/samples/constructed-sample2 new file mode 100644 index 0000000..4e24910 --- /dev/null +++ b/metadata-message/samples/constructed-sample2 @@ -0,0 +1,258 @@ +{ + "meta": { + "schema": "https://raw.githubusercontent.com/sdmx-twg/sdmx-json/develop/metadata-message/tools/schemas/1.0/sdmx-json-metadata-schema.json", + "id": "IFS_Metadata", + "test": true, + "prepared": "2018-03-18T09:30:47-05:00", + "contentLanguages": [ + "en" + ], + "name": "IFS_Metadata", + "names": { + "en": "IFS_Metadata" + }, + "sender": { + "id": "IMF", + "name": "International Monetary Fund", + "names": { + "en": "International Monetary Fund" + }, + "contacts": [ + { + "name": "StatisticQuery", + "names": { + "en": "StatisticQuery" + }, + "telephones": [ + "+202.623.7000" + ] + } + ] + }, + "receivers": [ + { + "id": "IMF", + "name": "International Monetary Fund", + "names": { + "en": "International Monetary Fund" + } + } + ], + "links": [ + { + "href": "http://sdmx.webservice.org/root/metadata/dataflow/IMF/IFS/1.0", + "rel": "self", + "type": "metadata", + "hreflang": "en" + }, + { + "href": "http://sdmx.webservice.org/root/metadatastructure/IMF/IMFSTAT/1.0", + "urn": "urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataStructure=IMF:IMFSTAT(1.0)", + "rel": "metadatastructure", + "type": "metadatastructure", + "hreflang": "en" + } + ] + }, + "data": { + "metadataSets": [ + { + "id": "METADATASET1", + "links": [ + { + "href": "http://sdmx.webservice.org/root/metadata", + "rel": "self", + "type": "metadata", + "hreflang": "en" + }, + { + "href": "http://sdmx.webservice.org/root/metadatastructure/IMF/IMFSTAT/1.0", + "urn": "urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataStructure=IMF:IMFSTAT(1.0)", + "rel": "metadatastructure", + "type": "metadatastructure", + "hreflang": "en" + } + ], + "reports": [ + { + "id": "DATA_KEY_REPORT", + "attributeSet": { + "reportedAttributes": [ + { + "id": "SOURCE", + "attributeSet": { + "reportedAttributes": [ + { + "id": "COLLECTION_SOURCE_NAME", + "value": "These series are typically the monthly average of market rates or official rates of the reporting country. If those are not available, they are the monthly average rates in New York. Or if the latter are not available, they are estimates based on simple averages of the end-of-month market rates quoted in the reporting country." + } + ] + } + }, + { + "id": "MANIPULATION_DISSEMINATION", + "attributeSet": { + "reportedAttributes": [ + { + "id": "ADJUST_OTHER", + "value": "Calculated as an arithmetic average. This series is not the reciprocal of series on period average of the US dollars per national currency also calculated as an arithmetic average." + } + ] + } + } + ] + }, + "target": { + "id": "TARGET1", + "referenceValues": [ + { + "id": "DSD", + "object": "urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=IMF:IFS_DSD(1.0)" + }, + { + "id": "DATA_KEY", + "dataKey": { + "keyValues": [ + { + "id": "ECONOMICCONCEPT", + "value": "ENDA" + }, + { + "id": "DATASOURCE", + "value": "IFS" + } + ] + } + } + ] + } + }, + { + "id": "DATA_KEY_REPORT", + "attributeSet": { + "reportedAttributes": [ + { + "id": "SOURCE", + "attributeSet": { + "reportedAttributes": [ + { + "id": "CONTACT", + "value": "For data/content questions: Statistics Query Mailbox." + } + ] + } + }, + { + "id": "COVERAGE", + "attributeSet": { + "reportedAttributes": [ + { + "id": "COVERAGE_SECTOR", + "value": "International Financial Statistics (IFS) is a standard source of statistics on all aspects of international and domestic finance. IFS includes data on Balance of Payments; Banking; Exchange Rates; External Debt and Debt Service; External Trade; Fund Accounts; Financial Indicators; Government and Public Sector Finance; Indicators of Economic Activity; International Investment Position; Investment; Labor Markets; Monetary Authorities; Money and Banking; National Accounts; Prices ; Social and Demographic Indicators." + }, + { + "id": "COVERAGE_OTHER", + "value": "Most annual data begin in 1948; quarterly and monthly data generally begin in 1957; most balance of payments data begin in 1970." + } + ] + } + } + ] + }, + "target": { + "id": "TARGET2", + "referenceValues": [ + { + "id": "DSD", + "object": "urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=IMF:IFS_DSD(1.0)" + }, + { + "id": "DSD", + "dataKey": { + "keyValues": [ + { + "id": "ECONOMICCONCEPT", + "value": "ENDA" + }, + { + "id": "DATASOURCE", + "value": "IFS" + }, + { + "id": "TIME", + "value": "2008-Q1" + } + ] + } + } + ] + } + }, + { + "id": "DATASET_REPORT", + "attributeSet": { + "reportedAttributes": [ + { + "id": "CLASS_SYSTEM", + "value": "Here is some metadata about the classification systems used attached at the level of the DATASET" + } + ] + }, + "target": { + "id": "TARGET3", + "referenceValues": [ + { + "id": "DATASET", + "dataSet": { + "id": "DATASET1", + "dataProvider": "urn:sdmx:org.sdmx.infomodel.dataproviderscheme.DataProvider=IMF:DPS(1.0).DATAPROVIDER1" + } + } + ] + } + }, + { + "id": "STRUCTURE_REPORT", + "attributeSet": { + "reportedAttributes": [ + { + "id": "COVERAGE", + "value": "Here is some metadata for the SOURCE Dimension" + } + ] + }, + "target": { + "id": "TARGET4", + "referenceValues": [ + { + "id": "STRUCTURE_COMPONENT", + "object": "urn:sdmx:org.sdmx.infomodel.datastructure.Dimension=IMF:IFS(1.0).SOURCE" + } + ] + } + }, + { + "id": "STRUCTURE_REPORT", + "attributeSet": { + "reportedAttributes": [ + { + "id": "COVERAGE", + "value": "Here is some metadata for the NAC code in the CL_SOURCE code list" + } + ] + }, + "target": { + "id": "TARGET5", + "referenceValues": [ + { + "id": "STRUCTURE_COMPONENT", + "object": "urn:sdmx:org.sdmx.infomodel.codelist.Code=IMF:CL_SOURCE(1.0).NAC" + } + ] + } + } + ] + } + ] + } +} diff --git a/metadata-message/samples/constructed-sample2.json b/metadata-message/samples/constructed-sample2.json new file mode 100644 index 0000000..7f0f0d3 --- /dev/null +++ b/metadata-message/samples/constructed-sample2.json @@ -0,0 +1,183 @@ +{ + "meta":{ + "schema":"https://raw.githubusercontent.com/sdmx-twg/sdmx-json/master/metadata-message/tools/schemas/2.0.0/sdmx-json-metadata-schema.json", + "id":"IFS_Metadata", + "test":true, + "prepared":"2018-03-18T09:30:47-05:00", + "contentLanguages":[ + "en" + ], + "name":"IFS_Metadata", + "names":{ + "en":"IFS_Metadata" + }, + "sender":{ + "id":"IMF", + "name":"International Monetary Fund", + "names":{ + "en":"International Monetary Fund" + }, + "contacts":[ + { + "name":"StatisticQuery", + "names":{ + "en":"StatisticQuery" + }, + "telephones":[ + "+202.623.7000" + ] + } + ] + }, + "receivers":[ + { + "id":"IMF", + "name":"International Monetary Fund", + "names":{ + "en":"International Monetary Fund" + } + } + ], + "links":[ + { + "href":"http://sdmx.webservice.org/root/metadata/dataflow/IMF/IFS/1.0", + "rel":"self", + "type":"metadata", + "hreflang":"en" + }, + { + "href":"http://sdmx.webservice.org/root/metadatastructure/IMF/IMFSTAT/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataStructure=IMF:IMFSTAT(1.0)", + "rel":"metadatastructure", + "type":"metadatastructure", + "hreflang":"en" + } + ] + }, + "data":{ + "metadataSets":[ + { + "id":"METADATASET1", + "agencyID":"IMF", + "name":"METADATASET1", + "metadataflow":"urn:sdmx:org.sdmx.infomodel.metadatastructure.Metadataflow=IMF:IFS(1.0)", + "links":[ + { + "href":"http://sdmx.webservice.org/root/metadata", + "rel":"self", + "type":"metadata", + "hreflang":"en" + }, + { + "href":"http://sdmx.webservice.org/root/metadatastructure/IMF/IMFSTAT/1.0", + "urn":"urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataStructure=IMF:IMFSTAT(1.0)", + "rel":"metadatastructure", + "type":"metadatastructure", + "hreflang":"en" + } + ], + "attributes":[ + { + "id":"SOURCE", + "attributes":[ + { + "id":"COLLECTION_SOURCE_NAME", + "value":"These series are typically the monthly average of market rates or official rates of the reporting country. If those are not available, they are the monthly average rates in New York. Or if the latter are not available, they are estimates based on simple averages of the end-of-month market rates quoted in the reporting country." + } + ] + }, + { + "id":"MANIPULATION_DISSEMINATION", + "attributes":[ + { + "id":"ADJUST_OTHER", + "value":"Calculated as an arithmetic average. This series is not the reciprocal of series on period average of the US dollars per national currency also calculated as an arithmetic average." + } + ] + } + ], + "targets":[ + "urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=IMF:IFS_DSD(1.0)" + ] + }, + { + "id":"DATA_KEY_REPORT", + "agencyID":"IMF", + "name":"METADATASET1", + "metadataProvisionAgreement":"urn:sdmx:org.sdmx.infomodel.registry.MetadataProvisionAgreement=IMF:MDPA_IFS(1.0)", + "attributes":[ + { + "id":"SOURCE", + "attributes":[ + { + "id":"CONTACT", + "value":"For data/content questions: Statistics Query Mailbox." + } + ] + }, + { + "id":"COVERAGE", + "attributes":[ + { + "id":"COVERAGE_SECTOR", + "value":"International Financial Statistics (IFS) is a standard source of statistics on all aspects of international and domestic finance. IFS includes data on Balance of Payments; Banking; Exchange Rates; External Debt and Debt Service; External Trade; Fund Accounts; Financial Indicators; Government and Public Sector Finance; Indicators of Economic Activity; International Investment Position; Investment; Labor Markets; Monetary Authorities; Money and Banking; National Accounts; Prices ; Social and Demographic Indicators." + }, + { + "id":"COVERAGE_OTHER", + "value":"Most annual data begin in 1948; quarterly and monthly data generally begin in 1957; most balance of payments data begin in 1970." + } + ] + } + ], + "targets":[ + "urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=IMF:IFS_DSD(1.0)" + ] + }, + { + "id":"DATASET_REPORT", + "agencyID":"IMF", + "name":"METADATASET1", + "metadataflow":"urn:sdmx:org.sdmx.infomodel.metadatastructure.Metadataflow=IMF:IFS(1.0)", + "attributes":[ + { + "id":"CLASS_SYSTEM", + "value":"Here is some metadata about the classification systems used attached at the level of the DATASET" + } + ], + "targets":[ + "urn:sdmx:org.sdmx.infomodel.base.DataProvider=IMF:DPS(1.0).DATAPROVIDER1" + ] + }, + { + "id":"STRUCTURE_REPORT", + "agencyID":"IMF", + "name":"METADATASET1", + "metadataflow":"urn:sdmx:org.sdmx.infomodel.metadatastructure.Metadataflow=IMF:IFS(1.0)", + "attributes":[ + { + "id":"COVERAGE", + "value":"Here is some metadata for the SOURCE Dimension" + } + ], + "targets":[ + "urn:sdmx:org.sdmx.infomodel.datastructure.Dimension=IMF:IFS(1.0).SOURCE" + ] + }, + { + "id":"STRUCTURE_REPORT", + "agencyID":"IMF", + "name":"METADATASET1", + "metadataflow":"urn:sdmx:org.sdmx.infomodel.metadatastructure.Metadataflow=IMF:IFS(1.0)", + "attributes":[ + { + "id":"COVERAGE", + "value":"Here is some metadata for the NAC code in the CL_SOURCE code list" + } + ], + "targets":[ + "urn:sdmx:org.sdmx.infomodel.codelist.Code=IMF:CL_SOURCE(1.0).NAC" + ] + } + ] + } +} diff --git a/metadata-message/samples/generated-sample b/metadata-message/samples/generated-sample new file mode 100644 index 0000000..6779074 --- /dev/null +++ b/metadata-message/samples/generated-sample @@ -0,0 +1,284 @@ +{ + "meta": { + "schema": "https://raw.githubusercontent.com/sdmx-twg/sdmx-json/develop/metadata-message/tools/schemas/1.0/sdmx-json-metadata-schema.json", + "id": "$", + "test": true, + "prepared": "2018-03-27T00:00:00Z", + "contentLanguages": [ + "en-GB-oed" + ], + "name": "a", + "names": { + "en-GB-oed": "a" + }, + "sender": { + "id": "$", + "name": "a", + "names": { + "en-GB-oed": "a" + }, + "contact": [ + { + "id": "$", + "name": "a", + "names": { + "en-GB-oed": "a" + }, + "department": "a", + "departments": { + "en-GB-oed": "a" + }, + "role": "a", + "roles": { + "en-GB-oed": "a" + }, + "email": "a", + "fax": "a", + "telephone": "a", + "uri": "a", + "x400": "a" + } + ] + }, + "receiver": [ + { + "id": "$", + "name": "a", + "names": { + "en-GB-oed": "a" + }, + "contact": [ + { + "id": "$", + "name": "a", + "names": { + "en-GB-oed": "a" + }, + "department": "a", + "departments": { + "en-GB-oed": "a" + }, + "role": "a", + "roles": { + "en-GB-oed": "a" + }, + "email": "a", + "fax": "a", + "telephone": "a", + "uri": "a", + "x400": "a" + } + ] + } + ], + "links": [ + { + "href": "http://example.com", + "rel": "a", + "urn": "a", + "uri": "http://example.com", + "title": "a", + "titles": { + "en-GB-oed": "a" + }, + "type": "a", + "hreflang": "en-GB-oed" + } + ] + }, + "data": { + "metadataSets": [ + { + "action": "Append", + "publicationPeriod": "1000Z", + "publicationYear": "1000Z", + "reportingBegin": "1000Z", + "reportingEnd": "1000Z", + "validFrom": "2018-01-27T00:00:00Z", + "validTo": "2018-03-27T00:00:00Z", + "annotations": [ + { + "id": "a", + "text": "a", + "texts": { + "en-GB-oed": "a" + }, + "title": "a", + "type": "a", + "url": "http://example.com" + } + ], + "links": [ + { + "href": "http://example.com", + "rel": "a", + "urn": "a", + "uri": "http://example.com", + "title": "a", + "titles": { + "en-GB-oed": "a" + }, + "type": "a", + "hreflang": "en-GB-oed" + } + ], + "name": "a", + "names": { + "en-GB-oed": "a" + }, + "dataProvider": "a", + "reports": [ + { + "id": "$", + "annotations": [ + { + "id": "a", + "text": "a", + "texts": { + "en-GB-oed": "a" + }, + "title": "a", + "type": "a", + "url": "http://example.com" + } + ], + "attributeSet": { + "reportedAttributes": [ + { + "id": "$", + "value": "a", + "annotations": [ + { + "id": "a", + "text": "a", + "texts": { + "en-GB-oed": "a" + }, + "title": "a", + "type": "a", + "url": "http://example.com" + } + ], + "structuredText": "a", + "structuredTexts": { + "en-GB-oed": "a" + }, + "text": "a", + "texts": { + "en-GB-oed": "a" + }, + "attributeSet": { + "reportedAttributes": [ + { + "id": "$", + "value": "a", + "annotations": [ + { + "id": "a", + "text": "a", + "texts": { + "en-GB-oed": "a" + }, + "title": "a", + "type": "a", + "url": "http://example.com" + } + ], + "structuredText": "a", + "structuredTexts": { + "en-GB-oed": "a" + }, + "text": "a", + "texts": { + "en-GB-oed": "a" + }, + "attributeSet": { + "reportedAttributes": [ + { + "id": "$", + "value": "a", + "annotations": [ + { + "id": "a", + "text": "a", + "texts": { + "en-GB-oed": "a" + }, + "title": "a", + "type": "a", + "url": "http://example.com" + } + ], + "structuredText": "a", + "structuredTexts": { + "en-GB-oed": "a" + }, + "text": "a", + "texts": { + "en-GB-oed": "a" + } + } + ] + } + } + ] + } + } + ] + }, + "target": { + "id": "$", + "referenceValues": [ + { + "id": "$", + "constraintContent": "urn", + "dataKey": { + "include": true, + "keyValues": [{ + "id": "A", + "include": true, + "value": "a" + }] + }, + "dataSet": { + "dataProvider": "urn", + "id": "$" + }, + "object": "urn", + "reportPeriod": "1000Z" + } + ] + } + } + ] + } + ] + }, + "errors": [ + { + "code": 1.1, + "title": "a", + "titles": { + "en-GB-oed": "a" + }, + "detail": "a", + "details": { + "en-GB-oed": "a" + }, + "links": [ + { + "href": "http://example.com", + "rel": "a", + "urn": "a", + "uri": "http://example.com", + "title": "a", + "titles": { + "en-GB-oed": "a" + }, + "type": "a", + "hreflang": "en-GB-oed" + } + ] + } + ] +} diff --git a/metadata-message/samples/generated-sample.json b/metadata-message/samples/generated-sample.json new file mode 100644 index 0000000..dd28e82 --- /dev/null +++ b/metadata-message/samples/generated-sample.json @@ -0,0 +1,543 @@ +{ + "meta":{ + "id":"vLqrDQjsgl", + "prepared":"1987-01-23T23:00:00.0Z", + "sender":{ + "id":"Nt", + "contacts":[ + { + "telephones":[ + "sint adipisicing incididunt", + "dolore aliqua", + "enim irure ullamco adipisicing" + ], + "emails":[ + "lWbd6ViMTaBJn@fKmLXUXqjSr.kp", + "mXN-dIz-jI@DZoLTxzwapLxBOeRohnyok.dsen", + "PvQTo@GyycDBbCLXHus.phm", + "nBVjEw98Kfn@WYxLuPqTgXJqNaqNMYgIzEiNmZUAlhmLI.jgiq" + ], + "names":{ + "zh-min-nan":"eu sit", + "zh-min":"ullamco Duis voluptate deserunt proident", + "gnw-lme-hfz-d-amt-onj77-68t-rv6mu-xc5-3q-ye7s53-s9dnc-r47-2ew4xysi-md4b1z-q-xxnwdsev-5-luo1p-ux9u6pg-zo0gz-ko8nj6-vlam5-ut5po58-jrv-79d80zbm-i-mlb-r7-xhyxju2-b7fox-pk-lb3f-q-lh-kb4jqyh-f-n11-c5y-y5-45o-ofgc9uy-46ff0-7an-kcibq-3-udx3-y08uhswf-qlwpa-ch2r-lu-qa-j0":"dolore nostrud culpa aute occaecat", + "i-tsu":"proident", + "mzq-gvmm-355-x-9-5d604r0-e9":"aute", + "rj-ft-1-mvhy7-6zng2fe-j8trq-0rbf-kdcdxjb-y-pox":"Duis veniam deserunt" + }, + "role":"est sit esse et eiusmod", + "roles":{ + "x-sv5vye-2wrhxv-e0s8wc25-wrc-yjkduk-hp7b-kl":"non pariatur ut", + "x-zuzb-4jdj0-3yo21v-2gbou-s-pnkq-o5rb":"et eiusmod", + "x-jx-ca":"in eu dolor laboris ut", + "i-tay":"in sunt" + }, + "faxes":[ + "esse dolor voluptate sit", + "Ut sit ex officia ullamco" + ], + "uris":[ + "http://WAZzAgeptsVJOqXoCpooFtEEaGf.uknVjEKzx1yob6Rkm9v8W1ivTGq-T2K9IVWDh8d4CYVdRZ04IU2MsMLLkNd4rbjUgg0KX9y8Cpu", + "https://gniN.hlkSBEUbvupsGHbQC3x.cDXQApPifPashtgYuuT6Io3", + "http://QPcbmFRfuzhbS.jggq5DbpxGrPr1Tmlgr99v8zWC4qTUfpcN18UhP", + "https://eGHsgpGgjOEJCpv.pggxwDLAl" + ], + "x400s":[ + "ut Excepteur id tempor est", + "proident culpa anim" + ], + "name":"consectetur in amet nulla nisi", + "departments":{ + "no-nyn":"dolore", + "i-navajo":"et" + }, + "department":"sed elit magna", + "commodo3f1":true + }, + { + "names":{ + "x-ll8oul64-k45i8qq1-bqz-occ7ae9-hc5gr-z1l-7ze-3yfs":"quis exercitation cillum irure magna", + "pgzs-641-j4ol3g54-5hxhnbof-cb1xs67y-5dtugub-thluk081-0u6n-0w8b3u-3r6w-x-aqbmn-uxb7p-24xqd54":"Lorem", + "x-nw22-qtu8j-gt-346":"aute laboris qui do esse" + }, + "telephones":[ + "veniam occaecat cupidatat" + ], + "x400s":[ + "veniam aliqua", + "tempor", + "sed minim" + ], + "emails":[ + "S0y4f@tnMJXveTZgfgsRRaFd.ug", + "gQz6q1NI1@UvpNfSrug.kcjj", + "dzGezQ-LJ@BEojpyTOI.lonz", + "dEeSrd01NNkk7@WTDVLQzjhzrzz.un" + ], + "departments":{ + "description":"Department is a humain-readable designation of the organisational structure by a linguistic expression, within which the contact person works." + }, + "nostrud_e39":51481831, + "ametb":"ipsum magna laboris dolor ad", + "nisi_f2f":false, + "commodo1c":-87628480.2731219, + "ea_eb":"commodo anim ut", + "dolor_36c":true + } + ], + "name":"Name is a human-readable name of the party.", + "names":{ + "rqjh-fotn-zd-c-d1-fu-8r-7qaz9-6-tu-3-k424mwm-3h9vn-63dc68b-poh-2q9-xl-v-ixnaf9-z5cz1-1q-lodo1re-s-fok54-0j1msga-p-7j4vjo90-r6cy-vymjsy-fc1ektj9-n1tayqim-77qfq-db-qxu-n-upgt4g-l1xefrdy-rfyj41-u0yyyg-lce-al-aavqv21":"esse ullamco nostrud in", + "x-t9d-34m":"dolor officia", + "x-ygfcu4p-8shzok-tz-mslbcwe-37enl-su8128-6ny-e5jrdkrf-5r123o1-p714x78i":"consequat irure" + } + }, + "name":"adipisicing dolor", + "contentLanguages":[ + "hozyrk-ha-v-1gocg8js-q72t-76y8o0m-b04-rze4-851vsj0-h4-2iv2o-f-jp-zm-1scnn-vf2lxmz-tp-f-5cgfgi-lvtt6fo-mlic-enzsv851-v-kzch-6dk3-a2c-a07q-kijvxs-irflw-53m1-v9r-v6leyiu-zi5w9j1z-m-7c-ihe1n-ca966eis-yy-6e4iqt-2-3p9gsvan-rgt-2i-lgqs8bu-6pnad-xjjrpbln-zf-lgw-150sn-1-j45i1rm-60-bwjv-yqhd895g-vu-0wjwgw-ec3k77-blgz6-1nitf-y5-uor5q-x-bl-noksz8-da-mpgz1d16-sfu-3y-i373bn2q-3xw-m8mrq-2", + "zh-min-nan" + ], + "schema":"https://QTzuhRStUw.coqUKK9UkjXX-JSAxMV.J" + }, + "data":{ + "metadataSets":[ + { + "id":"R9Xv9mJ", + "agencyID":"L9GLGv6Zd.znZWK_kQy", + "name":"ex laboris ea ut", + "metadataProvisionAgreement":"urn:sdmx:org.sdmx.infomodel.registry.MetadataProvisionAgreement=Ve5eTHf_.xO5cuexMY4c.oB.LaUIl_X.X1BbaT5ojM3.MILsnwnwT.Hoenah6fzJg.jCp8-nW.fLFWc.A:5w(0.0.0+)", + "targets":[ + "urn:sdmx:org.sdmx.infomodel.transformation.TransformationScheme=Ocf8.V9b.d52A1xOJGJ.BDK3JLH.hPf-v.S.Ij:rrT8TC(0.69.5-m.0.374.Lt3OdqX.T.z.0.g.WO5Z2PrnCmII)", + "urn:sdmx:org.sdmx.infomodel.base.Agency=CV3.wxbKUwXA96:JhTvhi9dQs@(9232264.0)", + "urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=WNuagLoSo50.vsY.pSGL:SX8IlAcR(494.0.37276229856).I", + "urn:sdmx:org.sdmx.infomodel.process.Transition=CAszW5A5ZK.XSrq.t0mIIWaCbMf.kyEL:TU9a5QpR(1190511124).c3Bb", + "urn:sdmx:org.sdmx.infomodel.structuremapping.ReportingTaxonomyMap=e_IJ3_.plKKxyTF.K:ZXTujlf8-(0+.0.3)" + ], + "attributes":[ + { + "id":"c$", + "value":-63489494.96628009 + }, + { + "id":"Lp9", + "value":{ + "x-42-j2g-ju91uwhh-t63bjza-vj-jb-f13-71-zlit5gl-bj59sk-hf2":"nostrud Lorem", + "ldd-oiev-316-rpuwfo78-184u-9xzd-55op-kar1ad-v3dgf4-14i411et-n78a8-57nz-c7piwg5-n-449-p3-40t9t-jp5fw4z-zv-eh-x3qfj08a-bfzv-y0xvd1-t6sp-xq0ueuav-a-iegtvv-96m7inf-oz3iu-a8h3dvn9-iofm-ips3jw-d-ksclmmr-q-u53csh-gvv61-ob48lf-f03-4y41xjkx-85k-1jl1z-1yus7b-1n67dxgk-ay4bb":"irure" + } + }, + { + "id":"iJ1zCkaZ", + "value":null, + "annotations":[ + { + "url":"https://IBIeqmcUgwLWzQ.icoefs4FCdKaLKsunIWfsbhEuNOuuxV+,hltC8uWO-jfxneYyd", + "texts":{ + "atu-nvc-mowl-255-5e8lsxd-sov2ii-uh5gxyi2-x-1aed-lzcsl8-4nqea-q6crovpf-5-6memcz6-02-5edoi2x-lp10iv3d-t2-i6b":"amet", + "no-bok":"sint", + "x-em-7cf-1as23c-tlh5h-y-x27x25":"Lorem ipsum commodo", + "i-enochian":"anim ut proident est", + "x-glhm95-h1to-4gu-k":"veniam nisi in" + }, + "id":"consequat veniam in adipisicing", + "value":"AnnotationValue holds a string containing the non-localised value of the annotation.", + "type":"do", + "links":[ + { + "rel":"minim nostrud ullamco", + "urn":"urn:sdmx:org.sdmx.infomodel.metadatastructure.Metadataflow=DeQtXDSA.diRs500U.A94n.fT7Iw34e.DdqytZP1.gk6jOK_.T:mqJW(770.488.0)", + "uri":"http://QPcbmFRfuzhbS.jggq5DbpxGrPr1Tmlgr99v8zWC4qTUfpcN18UhP" + }, + { + "urn":"urn:sdmx:org.sdmx.infomodel.metadatastructure.Metadataflow=DeQtXDSA.diRs500U.A94n.fT7Iw34e.DdqytZP1.gk6jOK_.T:mqJW(770.488.0)", + "rel":"Lorem est" + }, + { + "urn":"urn:sdmx:org.sdmx.infomodel.metadatastructure.Metadataflow=DeQtXDSA.diRs500U.A94n.fT7Iw34e.DdqytZP1.gk6jOK_.T:mqJW(770.488.0)", + "rel":"in anim officia magna", + "hreflang":"lsdqhte-ys-0pkn-6-3t8l11-o82", + "type":"eu dolor consectetur ipsum irure", + "uri":"http://QPcbmFRfuzhbS.jggq5DbpxGrPr1Tmlgr99v8zWC4qTUfpcN18UhP" + } + ], + "text":"nostrud voluptate irure est in" + }, + { + "title":"dolor deserunt Excepteur", + "value":"AnnotationValue holds a string containing the non-localised value of the annotation.", + "url":"https://svBdMnhiFtp.sevotsS1SvR9JeW7BIvWRu5NSOUngtpUnpG1jw7oe2LjrcVv", + "id":"sit sint anim ex ut", + "texts":{ + "byo-uocn-fw57o-ub88pn-58g7":"ex reprehenderit dolor ullamco", + "x-7euv-new72zfo-03teq-y-fjs4q-jhdsa-w8q5my-c9f-308kyu":"reprehenderit in consectetur sunt voluptate" + }, + "text":"id", + "type":"commodo aliquip voluptate", + "links":[ + { + "urn":"urn:sdmx:org.sdmx.infomodel.metadatastructure.Metadataflow=DeQtXDSA.diRs500U.A94n.fT7Iw34e.DdqytZP1.gk6jOK_.T:mqJW(770.488.0)", + "rel":"in cupidatat do culpa occaecat", + "type":"anim qui in laboris magna", + "hreflang":"cel-gaulish", + "uri":"http://QPcbmFRfuzhbS.jggq5DbpxGrPr1Tmlgr99v8zWC4qTUfpcN18UhP" + } + ] + }, + { + "type":"est reprehenderit", + "title":"irure sunt nisi deserunt", + "texts":{ + "zh-min":"nostrud consequat non", + "nopw-1kk9-e2497s-om46b1t-zp2emy-jzziy2-whu7650o-5mvx-260p-laujrtt0":"cupidatat officia proident enim", + "en-GB-oed":"minim", + "i-hak":"eiusmod Duis consectetur", + "hshue-500":"non consectetur", + "x-3pigimt-6":"elit nostrud sint in" + }, + "url":"http://bFpYAHoOglGSCsCrftElEDT.himkB1VNfHZY8LTzr,g", + "value":"AnnotationValue holds a string containing the non-localised value of the annotation.", + "id":"id sint nostrud mollit dolor", + "links":[ + { + "urn":"urn:sdmx:org.sdmx.infomodel.metadatastructure.Metadataflow=DeQtXDSA.diRs500U.A94n.fT7Iw34e.DdqytZP1.gk6jOK_.T:mqJW(770.488.0)", + "rel":"in cupidatat do culpa occaecat", + "type":"anim qui in laboris magna", + "hreflang":"cel-gaulish", + "uri":"http://QPcbmFRfuzhbS.jggq5DbpxGrPr1Tmlgr99v8zWC4qTUfpcN18UhP" + } + ], + "text":"ullamco adipisicing", + "fugiat349":true, + "ipsum_d":86989890.13537076 + } + ], + "attributes":[ + { + "format":{ + "interval":-96836005.30440177, + "minLength":76911443, + "decimals":91544631, + "endTime":"0499-14:00", + "dataType":"GregorianDay", + "timeInterval":"P8705522M", + "maxLength":7448054, + "startTime":"1950-02-17T23:00:00.0Z", + "sunt_6":32025156, + "aliquip_e":true, + "sit_f01":"ex culpa", + "sit_2":-80939295, + "velit48d":35108271, + "incididuntb7":"laborum", + "elit_f96":"ad", + "doa63":-80332 + }, + "id":"iJ1zCkaZ", + "annotations":[ + { + "text":"AnnotationText holds a string containing a language-specific text of the annotation.", + "sit221":74185801.47354543, + "Ut89":"ex officia nulla sit", + "laboris2":59206023 + }, + { + "links":[ + { + "urn":"urn:sdmx:org.sdmx.infomodel.metadatastructure.Metadataflow=DeQtXDSA.diRs500U.A94n.fT7Iw34e.DdqytZP1.gk6jOK_.T:mqJW(770.488.0)", + "rel":"in cupidatat do culpa occaecat", + "type":"anim qui in laboris magna", + "hreflang":"cel-gaulish", + "uri":"http://QPcbmFRfuzhbS.jggq5DbpxGrPr1Tmlgr99v8zWC4qTUfpcN18UhP" + } + ], + "id":"labore", + "title":"laboris in do", + "value":"AnnotationValue holds a string containing the non-localised value of the annotation.", + "type":"velit", + "texts":{ + "description":"AnnotationText holds a string containing the language-specific text of the annotation." + }, + "url":"http://H.rafgeRwgbqxcXCNlEanEK0LGQmJ+tH6aBozc9SN4l0P4" + }, + { + "type":"minim eu", + "url":"http://UyHfCJSvzSElFafSyw.owltleewZTsPWuQB1kgi5QJ-Z3dCKn", + "texts":{ + "description":"AnnotationText holds a string containing the language-specific text of the annotation." + }, + "title":"magna", + "text":"AnnotationText holds a string containing a language-specific text of the annotation.", + "value":"AnnotationValue holds a string containing the non-localised value of the annotation.", + "links":[ + { + "urn":"urn:sdmx:org.sdmx.infomodel.metadatastructure.Metadataflow=DeQtXDSA.diRs500U.A94n.fT7Iw34e.DdqytZP1.gk6jOK_.T:mqJW(770.488.0)", + "rel":"in cupidatat do culpa occaecat", + "type":"anim qui in laboris magna", + "hreflang":"cel-gaulish", + "uri":"http://QPcbmFRfuzhbS.jggq5DbpxGrPr1Tmlgr99v8zWC4qTUfpcN18UhP" + } + ], + "id":"officia in esse non" + }, + { + "ut36":-60534740, + "veniamb83":"culpa est in adipisicing nisi", + "pariaturaa":-1054913, + "pariatur_c3d":"aliqua sed laborum enim", + "ad_c46":-33977717, + "nulla7":21737303.685464233 + }, + { + "links":[ + { + "urn":"urn:sdmx:org.sdmx.infomodel.metadatastructure.Metadataflow=DeQtXDSA.diRs500U.A94n.fT7Iw34e.DdqytZP1.gk6jOK_.T:mqJW(770.488.0)", + "rel":"in cupidatat do culpa occaecat", + "type":"anim qui in laboris magna", + "hreflang":"cel-gaulish", + "uri":"http://QPcbmFRfuzhbS.jggq5DbpxGrPr1Tmlgr99v8zWC4qTUfpcN18UhP" + } + ], + "ullamco_4":"irure officia nisi amet et", + "culpa6f":-8360692, + "do_":true, + "fugiat_bd":"ex id", + "sed_70":-52802993, + "proident_f73":-16820395 + } + ] + } + ], + "format":{ + "timeInterval":"PT576002564M", + "endTime":"0173", + "dataType":"XHTML", + "minValue":-62589299.85150754 + } + } + ], + "names":{ + "x-s2abq-b-a1os6j85-lusxq":"proident", + "jfq-csn-odc-azj-x-ntekx7q-k926m-0o-cboi-6m-2kerpom6-xifp":"elit ut Excepteur fugiat nisi", + "art-lojban":"amet Duis", + "x-vybcja3t-0q":"aliquip ullamco do adipisicing consectetur", + "x-3x0-ug7v":"mollit exercitation esse aute elit", + "x-jb-zb6wax0y":"tempor nisi Lorem esse culpa" + }, + "reportingBegin":"0097Z", + "publicationPeriod":"#'A/P\\p= 2.3.1 (even if not backwards compatible). Note that wildcarded semantic version references cannot be combined with version extended reference (e.g. 2.3+.1-draft is not permissable). Version-extended (e.g. 1.3.1-draft) and legacy version numbers (e.g. 1 or 1.0) are also supported.", + "type":"string", + "anyOf":[ + { + "pattern":"^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?$", + "description":"Legacy version format: describes the version number format previously supported in SDMX. The format is restricted to allow for simple incrementing and sorting of version number. The version consists of an unlimited set of numeric components, separated by the '.' character. When processing version, each numeric component (the number preceding and following any '.' character) should be parsed as an integer. Thus, a version of 1.3 and 1.03 would be equivalent, as both the '3' component and the '03' component would parse to an integer value of 3." + }, + { + "pattern":"^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?$", + "description":"Semantic version format: is a simple type for validating semantic version in the format major.minor.patch[-extension]." + }, + { + "pattern":"(^(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$)|(^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)$)|(^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+$)", + "description":"Semantic version reference is a simple type for referencing semantic version numbers. It allows for the wildcarding of one of the major, minor, or patch version parts using '+'." + } + ] + }, + "ExplicitVersionType":{ + "allOf":[ + { + "$ref":"#/definitions/VersionReferenceType" + }, + { + "pattern":"^[^\\*]*$" + } + ], + "description":"A restriction of WildcardVersionType the does not allow wildcarding. It reduces again to the VersionReferenceType. This allows proper retrictions to be placed on explicit references." + }, + "AgencySchemeType":{ + "description":"AgencySchemeType defines a specific type of organisation scheme which contains only maintenance agencies. The agency scheme maintained by a particular maintenance agency is always provided a fixed identifier and is never versioned. Therefore, agencies can be added or removed without have to version the scheme. Agencies schemes have no hierarchy, meaning that no agency may define a relationship with another agency in the scheme. In fact, the actual parent agency for an agency in a scheme is the agency which defines the scheme.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableWithoutVersionType" + }, + { + "properties":{ + "id":{ + "const":"AGENCIES" + }, + "isPartial":{ + "type":"boolean", + "description":"isPartial, if true, indicates that only the relevant portion of the agency scheme is being communicated." + }, + "agencies":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/AgencyType", + "description":"Agency is an organisation which maintains structural metadata such as classifications, concepts, data structures, and metadata structures." + } + } + } + } + ] + }, + "AgencyType":{ + "description":"AgencyType defines the structure of an agency description. The contacts defined for the organisation are specific to the agency role the organisation is serving.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/NameableTypeWithNCNameID" + }, + { + "properties":{ + "contacts":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/contactType" + } + } + }, + "required":[ + "id" + ] + } + ] + }, + "MetadataConstraintAttachmentType":{ + "description":"MetadataConstraintAttachmentType restricts the base ConstraintAttachmentType to only allow artefacts related to metadata.", + "type":"object", + "oneOf":[ + { + "required":[ + "metadataProvider" + ], + "properties":{ + "metadataProvider":{ + "$ref":"#/definitions/MetadataProviderReferenceType", + "description":"metadataProvider is a urn reference to a the metadata provider of the metadata set to which the constraint is attached. If this is used, then only the release calendar is relevant." + } + } + }, + { + "required":[ + "metadataSets" + ], + "properties":{ + "metadataSets":{ + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "$ref":"#/definitions/MetadataSetReferenceType", + "description":"MetadataSet is a urn reference to a metadata set to which the constraint is attached. Multiple instance can only be used if they have the same underlying structure." + } + } + } + }, + { + "required":[ + "simpleDataSources" + ], + "properties":{ + "simpleDataSources":{ + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "description":"SimpleDataSource describes a simple data source, which is a URL of a SDMX-ML data or metadata message. Multiple instance can only be used if they have the same underlying structure.", + "$ref":"#/definitions/uri" + } + } + } + }, + { + "required":[ + "metadataStructures" + ], + "properties":{ + "metadataStructures":{ + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "$ref":"#/definitions/MetadataStructureReferenceType", + "description":"Urn reference to a metadata structure definition to which the constraint is attached. A constraint which is attached to more than one metadata structure must only express key sets and/or target regions where the identifiers of the target objects are common across all structures to which the constraint is attached." + } + }, + "queryableDataSources":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/QueryableDataSourceType", + "description":"queryableDataSource describes a queryable data source to which the constraint is attached." + } + } + } + }, + { + "required":[ + "metadataflows" + ], + "properties":{ + "metadataflows":{ + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "$ref":"#/definitions/MetadataflowReferenceType", + "description":"Urn reference to a metadata flow object to which the constraint is attached. A constraint can be attached to more than one metadataflow, and the metadataflows do not necessarily have to be usages of the same metadata structure. However, a constraint which is attached to more than one metadata structure must only express key sets and/or target regions where the identifiers of the target objects are common across all structures to which the constraint is attached." + } + }, + "queryableDataSources":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/QueryableDataSourceType", + "description":"queryableDataSource describes a queryable data source to which the constraint is attached." + } + } + } + }, + { + "required":[ + "metadataProvisionAgreements" + ], + "properties":{ + "metadataProvisionAgreements":{ + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "$ref":"#/definitions/MetadataProvisionAgreementReferenceType", + "description":"Urn reference to a metadata provision agreement to which the constraint is attached. A constraint can be attached to more than one metadata provision agreement, and the metadata provision agreements do not necessarily have to be references structure usages based on the same structure. However, a constraint which is attached to more than one metadata provision agreement must only express key sets and/or cube/target regions where the identifier of the components are common across all structures to which the constraint is attached." + } + }, + "queryableDataSources":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/QueryableDataSourceType", + "description":"queryableDataSource describes a queryable data source to which the constraint is attached." + } + } + } + } + ] + }, + "MetadataConstraintType":{ + "description":"MetadataConstraintType defines the structure of a metadata constraint, which specifies a sub set of the definition of the allowable content of a metadata set. A metadata constraint can specify allowed attribute values for metadata described by the constrained artefact. The constraint attachment is restricted to constrainable artefacts related to metadata, and the only possible role is 'Allowed'. Unless the artefact is returned as a stub, it must contain the 'role' property.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "role":{ + "const":"Allowed", + "description":"The fixed 'Allowed' role attribute indicates that this constraint defines what content is allowed." + }, + "constraintAttachment":{ + "$ref":"#/definitions/MetadataConstraintAttachmentType", + "description":"ConstraintAttachment describes the collection of constrainable artefacts that the constraint is attached to." + }, + "releaseCalendar":{ + "$ref":"#/definitions/ReleaseCalendarType", + "description":"ReleaseCalendar defines dates on which the constrained metadata is to be made available." + }, + "metadataTargetRegions":{ + "type":"array", + "minItems":1, + "maxItems":2, + "items":{ + "$ref":"#/definitions/MetadataTargetRegionType", + "description":"MetadataTargetRegion describes the values allowed for metadata attributes. A set of either included or excluded regions can be described." + } + } + } + } + ] + }, + "AttributeListType":{ + "description":"AttributeListType describes the attribute descriptor for the data structure definition.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/AnnotableType" + }, + { + "properties":{ + "id":{ + "const":"AttributeDescriptor", + "description":"The id attribute is provided in this case for completeness. However, its value is fixed to AttributeDescriptor." + }, + "links":{ + "$ref":"#/definitions/links", + "description":"Links field is an array of link objects. Also used to specify the URI or the URN to itself. If appropriate, a collection of links to additional external resources." + }, + "attributes":{ + "type":"array", + "minItems":1, + "items":{ + "anyOf":[ + { + "$ref":"#/definitions/AttributeType", + "description":"Attribute describes the definition of a data attribute, which is defined as a characteristic of an object or entity." + }, + { + "$ref":"#/definitions/ReportingYearStartOrEndDayType", + "description":"ReportingYearStartDay and ReportingYearEndDay are specialized data attributes which provide important context to the time dimension. If the value of the time dimension is one of the standard reporting periods (see common:ReportingTimePeriodType) then one of these attributes is used to state the month and day that the reporting year begins or ends. This provides a reference point from which the actual calendar dates covered by these periods can be determined. If this attribute does not occur in a data set, then the reporting year start/end day will be assumed to be January 1/December 31." + } + ] + } + }, + "metadataAttributeUsages":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/MetadataAttributeUsageType", + "description":"MetadataAttributeUsage refines the details of how a metadata attribute from the metadata structure referenced from the data structure is used. By default, metadata attributes can be expressed at any level of the data. This allows an attribute relationship to be defined in order restrict the reporing of a metadata attribute to a specific part of the data." + } + } + } + } + ] + }, + "MetadataAttributeListType":{ + "description":"MetadataAttributeListType describes the structure of a meta data attribute list. It comprises a set of metadata attributes that can be defined as a hierarchy.", + "type":"object", + "required":[ + "metadataAttributes" + ], + "allOf":[ + { + "$ref":"#/definitions/AnnotableType" + }, + { + "properties":{ + "id":{ + "const":"MetadataAttributeDescriptor", + "description":"The id attribute is provided in this case for completeness. However, its value is fixed to MetadataAttributeDescriptor." + }, + "links":{ + "$ref":"#/definitions/links", + "description":"Links field is an array of link objects. Also used to specify the URI or the URN to itself. If appropriate, a collection of links to additional external resources." + }, + "metadataAttributes":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/MetadataAttributeType", + "description":"MetadataAttribute defines the a metadata attribute, which is the value of an attribute, such as the instance of a coded or uncoded attribute in a metadata structure definition." + } + } + } + } + ] + }, + "MetadataAttributeUsageType":{ + "description":"MetadataAttributeUsageType defines the structure of how a metadata attribute is used in a data structure. This is a local reference to a metadata attribute from the metadata structure referenced by the data structure. An attribute relationship can be defined in order to describe the relationship of the metadata attribute to the data structure components.", + "type":"object", + "required":[ + "metadataAttributeReference", + "attributeRelationship" + ], + "allOf":[ + { + "$ref":"#/definitions/AnnotableType" + }, + { + "properties":{ + "links":{ + "$ref":"#/definitions/links", + "description":"Links field is an array of link objects. Also used to specify the URI or the URN to itself. If appropriate, a collection of links to additional external resources." + }, + "metadataAttributeReference":{ + "$ref":"#/definitions/NestedIDType", + "description":"MetadataAttributeReference is a local reference (nested ID) to a metadata attribute defined in the metadata structure referenced by this data structure." + }, + "attributeRelationship":{ + "$ref":"#/definitions/AttributeRelationshipType", + "description":"The attributeRelationship defines the relationship between the referenced metadata attribute and the components of the data structure." + } + } + } + ] + }, + "AttributeRelationshipType":{ + "description":"AttributeRelationship defines the structure for stating the relationship between an attribute and other data structure definition components.", + "type":"object", + "oneOf":[ + { + "required":[ + "dataflow" + ], + "properties":{ + "dataflow":{ + "$ref":"#/definitions/EmptyType", + "description":"This means that the value of the attribute varies per dataflow. It is the data modeller's responsibility to design or use non-overlapping dataflows that do not have observations in common, otherwise the integrity of dataflow-specific attribute values is not assured by the model, e.g. when querying those data through its DSD. The level at which the unique attribute value will be presented in data messages depends on the data format." + } + } + }, + { + "required":[ + "dimensions" + ], + "properties":{ + "dimensions":{ + "description":"This is used to reference dimensions in the data structure definition on which the value of this attribute depends. An attribute using this relationship can be either a group, series (or section), or observation level attribute. The attachment level of the attribute will be determined by the data format and which dimensions are referenced.", + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "$ref":"#/definitions/NCNameIDType", + "description":"One or more identifiers of (a) local dimension(s)." + } + }, + "areDimensionsOptional":{ + "description":"This is used to indicate those dimensions to which the attributes might optionally not be attached. The array structure must follow that for the dimensions.", + "type":"array", + "minItems":1, + "items":{ + "type":"boolean" + } + } + } + }, + { + "required":[ + "group" + ], + "properties":{ + "group":{ + "$ref":"#/definitions/idType", + "description":"Identifier of a local GroupKey Descriptor. This is used as a convenience to referencing all of the dimension defined by the referenced group. The level at which the attribute values will be presented in data messages depends on the data format and which dimensions are referenced. If the group (level) is available in the data format used then the attribute values should be presented at that group level." + } + } + }, + { + "required":[ + "observation" + ], + "properties":{ + "observation":{ + "$ref":"#/definitions/EmptyType", + "description":"This is used to specify that the value of the attribute may vary with any of the local dimensions and thus is dependent upon the observed value. An attribute with this relationship will its values always have presented at observation level." + } + } + } + ] + }, + "AttributeType":{ + "description":"AttributeType describes the structure of a data attribute, which is defined as a characteristic of an object or entity. The attribute takes its semantic, and in some cases it representation, from its concept identity. An attribute can be coded by referencing a code list from its coded local representation. It can also specify its text format, which is used as the representation of the attribute if a coded representation is not defined. Neither the coded or uncoded representation are necessary, since the attribute may take these from the referenced concept. An attribute specifies its relationship with other data structure components and is given an assignment status. These two properties dictate where in a data message the attribute will be attached, and whether or not the attribute will be required to be given a value. A set of roles defined in concept scheme can be assigned to the attribute.", + "type":"object", + "required":[ + "attributeRelationship", + "conceptIdentity" + ], + "allOf":[ + { + "$ref":"#/definitions/IdentifiableTypeWithNCNameID" + }, + { + "properties":{ + "usage":{ + "$ref":"#/definitions/UsageType", + "default":"optional", + "description":"The usage attribute indicates whether an attribute value must be available for any corresponding existing observation." + }, + "attributeRelationship":{ + "$ref":"#/definitions/AttributeRelationshipType", + "description":"AttributeRelationship describes how the value of this attribute varies with the values of other components. These relationships will be used to determine the attachment level of the attribute in the various data formats." + }, + "measureRelationship":{ + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "$ref":"#/definitions/NCNameIDType" + }, + "description":"The measureRelationship array identifies the measures that the attribute applies to. If this is not used, the attribute is assumed to apply to all measures. If used, it contains one or more identifiers of (a) local measure(s)." + }, + "conceptIdentity":{ + "$ref":"#/definitions/ConceptReferenceType", + "description":"Urn reference to a concept where the identification of the concept scheme which defines it is contained in another context." + }, + "conceptRoles":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/ConceptReferenceType", + "description":"ConceptRole references concepts which define roles which this attribute serves. If the concept from which the attribute takes its identity also defines a role the concept serves, then the isConceptRole indicator can be set to true on the concept identity rather than repeating the reference here." + } + }, + "localRepresentation":{ + "$ref":"#/definitions/AttributeRepresentationType" + } + } + } + ] + }, + "BasicComponentTextFormatType":{ + "description":"BasicComponentTextFormatType is a restricted version of the TextFormatType that restricts the text type to the representations allowed for all components except for target objects.", + "type":"object", + "properties":{ + "dataType":{ + "$ref":"#/definitions/BasicComponentDataType" + }, + "isSequence":{ + "type":"boolean" + }, + "interval":{ + "type":"number" + }, + "startValue":{ + "type":"number" + }, + "endValue":{ + "type":"number" + }, + "timeInterval":{ + "$ref":"#/definitions/duration" + }, + "startTime":{ + "$ref":"#/definitions/StandardTimePeriodType" + }, + "endTime":{ + "$ref":"#/definitions/StandardTimePeriodType" + }, + "minLength":{ + "type":"integer", + "minimum":1 + }, + "maxLength":{ + "type":"integer", + "minimum":1 + }, + "minValue":{ + "type":"number" + }, + "maxValue":{ + "type":"number" + }, + "decimals":{ + "type":"integer", + "minimum":1 + }, + "pattern":{ + "type":"string" + }, + "isMultiLingual":{ + "type":"boolean" + }, + "sentinelValues":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/sentinelValueType", + "description":"SentinelValue defines a value that has a special meaning within the text format representation of a component." + } + } + } + }, + "CategorisationType":{ + "description":"CategorisationType defines the structure for a categorisation. A source object is referenced via an object reference and the target category is referenced via the target category.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "source":{ + "$ref":"#/definitions/urn", + "description":"Source is a urn reference to an object to be categorized." + }, + "target":{ + "$ref":"#/definitions/CategoryReferenceType", + "description":"Target is a urn reference to the category that the referenced object is to be mapped to." + } + } + } + ] + }, + "CategorySchemeMapType":{ + "description":"CategorySchemeMapType defines the structure of a map which identifies relationships between categories in different category schemes. Unless the artefact is returned as a stub, it must contain the 'source' and 'target' properties.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "itemMaps":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/SingleValueMappingType" + } + }, + "source":{ + "$ref":"#/definitions/CategorySchemeReferenceType", + "description":"Urn reference to a concept scheme object." + }, + "target":{ + "$ref":"#/definitions/CategorySchemeReferenceType", + "description":"Urn reference to a concept scheme object." + } + } + } + ] + }, + "CategorySchemeType":{ + "description":"CategorySchemeType describes the structure of a category scheme. A category scheme is the descriptive information for an arrangement or division of categories into groups based on characteristics, which the objects have in common. This provides for a simple, leveled hierarchy or categories.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableTypeWithNCNameID" + }, + { + "properties":{ + "isPartial":{ + "type":"boolean", + "description":"isPartial, if true, indicates that only the relevant portion of the category scheme is being communicated." + }, + "categories":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/CategoryType", + "description":"Category represents a set of nested categories which describe a simple classification hierarchy." + } + } + } + } + ] + }, + "CategoryType":{ + "description":"CategoryType describes the details of a category. A category is defined as an item at any level in a classification. The Category element represents a set of nested categories which are child categories.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/NameableType" + }, + { + "properties":{ + "categories":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/CategoryType" + } + } + }, + "required":[ + "id" + ] + } + ] + }, + "CodeDataType":{ + "description":"CodeDataType is a restriction of the basic data types that are applicable to codes. Although some of the higher level time period formats are perimitted, it should be noted that any value which contains time (which includes a time zone offset) is not allowable as a code identifier.", + "type":"string", + "enum":[ + "String", + "Alpha", + "AlphaNumeric", + "Numeric", + "BigInteger", + "Integer", + "Long", + "Short", + "Boolean", + "URI", + "Count", + "InclusiveValueRange", + "ExclusiveValueRange", + "Incremental", + "ObservationalTimePeriod", + "StandardTimePeriod", + "BasicTimePeriod", + "GregorianTimePeriod", + "GregorianYear", + "GregorianYearMonth", + "GregorianDay", + "ReportingTimePeriod", + "ReportingYear", + "ReportingSemester", + "ReportingTrimester", + "ReportingQuarter", + "ReportingMonth", + "ReportingWeek", + "ReportingDay", + "Month", + "MonthDay", + "Day", + "Duration" + ] + }, + "CodeType":{ + "description":"CodeType describes the structure of a code. A code is defined as a language independent set of letters, numbers or symbols that represent a concept whose meaning is described in a natural language. Presentational information not present may be added through the use of annotations.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/NameableType" + }, + { + "properties":{ + "parent":{ + "$ref":"#/definitions/idType", + "description":"Parent provides the ability to describe simple hierarchies within a single codelist, by referencing the id value of another code in the same codelist." + } + }, + "required":[ + "id" + ] + } + ] + }, + "CodedTextFormatType":{ + "description":"CodedTextFormatType is a restricted version of the SimpleComponentTextFormatType that only allows factets and text types applicable to codes. Although the time facets permit any value, an actual code identifier does not support the necessary characters for time. Therefore these facets should not contain time in their values.", + "type":"object", + "properties":{ + "dataType":{ + "$ref":"#/definitions/CodeDataType" + }, + "isSequence":{ + "type":"boolean" + }, + "interval":{ + "type":"integer" + }, + "startValue":{ + "type":"integer" + }, + "endValue":{ + "type":"integer" + }, + "timeInterval":{ + "$ref":"#/definitions/duration" + }, + "startTime":{ + "$ref":"#/definitions/StandardTimePeriodType" + }, + "endTime":{ + "$ref":"#/definitions/StandardTimePeriodType" + }, + "minLength":{ + "type":"integer", + "minimum":1 + }, + "maxLength":{ + "type":"integer", + "minimum":1 + }, + "minValue":{ + "type":"integer" + }, + "maxValue":{ + "type":"integer" + }, + "pattern":{ + "type":"string" + } + }, + "additionalProperties":false + }, + "CodelistType":{ + "description":"CodelistType defines the structure of a codelist. A codelist is defined as a list from which some statistical concepts (coded concepts) take their values.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableTypeWithNCNameID" + }, + { + "properties":{ + "isPartial":{ + "type":"boolean", + "description":"isPartial, if true, indicates that only the relevant portion of the codelist is being communicated. This is used in cases where a codelist is returned for a data structure in the context of a constraint." + }, + "codes":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/CodeType", + "description":"Code describes a code in a codelist. In addition to the identification and description of the code, basic presentational information is also available. Presentational information not present may be added through the use of annotations." + } + }, + "codelistExtensions":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/CodelistExtensionType", + "description":"CodelistExtension allows for the extension of codelists by referencing the codelists to be extended and providing inclusion/exclusion rules for selecting the codes to extend. The order of these is important as it is indicates the order of precedence of the extended codelists for conflict resolution of codes. However, the prefix property can be used to ensure uniqueness of inherited codes in the extending codelist, in case conflicting codes must be included." + } + } + } + } + ] + }, + "GeographicCodelistType":{ + "description":"GeographicCodelistType defines the sturcture of a geographic codelist. It comprises a set of GeoFeatureSetCodes, by adding a value in the Code that follows a pattern to represent a geo feature set. Unless the artefact is returned as a stub, it must contain the 'geoType' property.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableTypeWithNCNameID" + }, + { + "properties":{ + "isPartial":{ + "type":"boolean", + "description":"isPartial, if true, indicates that only the relevant portion of the geographic codelist is being communicated." + }, + "geoType":{ + "const":"GeographicCodelist" + }, + "geoFeatureSetCodes":{ + "type":"array", + "minItems":1, + "items":{ + "allOf":[ + { + "$ref":"#/definitions/CodeType" + }, + { + "required":[ + "value" + ], + "properties":{ + "value":{ + "type":"string" + } + } + } + ] + } + }, + "codelistExtensions":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/CodelistExtensionType", + "description":"CodelistExtension allows for the extension of codelists by referencing the codelists to be extended and providing inclusion/exclusion rules for selecting the codes to extend. The order of these is important as it is indicates the order of precedence of the extended codelists for conflict resolution of codes. However, the prefix property can be used to ensure uniqueness of inherited codes in the extending codelist, in case conflicting codes must be included." + } + } + } + } + ] + }, + "GeoGridCodelistType":{ + "description":"GeoGridCodelistType defines the structure of a geographic grid code list. These define a geographical grid composed of cells representing regular squared portions of the Earth. Unless the artefact is returned as a stub, it must contain the 'geoType' and 'gridDefinition' properties.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableTypeWithNCNameID" + }, + { + "properties":{ + "isPartial":{ + "type":"boolean", + "description":"isPartial, if true, indicates that only the relevant portion of the geogrid codelist is being communicated." + }, + "geoType":{ + "const":"GeoGridCodelist" + }, + "gridDefinition":{ + "type":"string", + "description":"Contains a regular expression string corresponding to the grid definition for the GeoGrid Codelist." + }, + "geoGridCodes":{ + "type":"array", + "minItems":1, + "items":{ + "description":"GeoGridCode is a code that represents a geographic grid cell that belongs to a specific grid definition.", + "allOf":[ + { + "$ref":"#/definitions/CodeType" + }, + { + "required":[ + "geoCell" + ], + "properties":{ + "geoCell":{ + "type":"string", + "description":"The value used to assign the Code to one cell in the grid." + } + } + } + ] + } + }, + "codelistExtensions":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/CodelistExtensionType", + "description":"CodelistExtension allows for the extension of codelists by referencing the codelists to be extended and providing inclusion/exclusion rules for selecting the codes to extend. The order of these is important as it is indicates the order of precedence of the extended codelists for conflict resolution of codes. However, the prefix property can be used to ensure uniqueness of inherited codes in the extending codelist, in case conflicting codes must be included." + } + } + } + } + ] + }, + "ValueListType":{ + "description":"ValueListType defines the structure of value list. These represent a closed set of values the can occur for a dimension, measure, or attribute. These may be values, or values with names and descriptions (similar to a codelist).", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableTypeWithNCNameID" + }, + { + "properties":{ + "valueItems":{ + "type":"array", + "minItems":1, + "items":{ + "description":"ValueItem represents a value item. A value must be provided, and a longer name and description can be provided to provide additiona meaning to the value (similar to a code in a code list).", + "allOf":[ + { + "$ref":"#/definitions/AnnotableType" + }, + { + "required":[ + "id" + ], + "properties":{ + "id":{ + "type":"string" + }, + "name":{ + "$ref":"#/definitions/localisedBestMatchText" + }, + "names":{ + "$ref":"#/definitions/localisedText" + }, + "description":{ + "$ref":"#/definitions/localisedBestMatchText" + }, + "descriptions":{ + "$ref":"#/definitions/localisedText" + } + } + } + ] + } + } + } + } + ] + }, + "CodelistExtensionType":{ + "description":"CodelistExtensionType defines the structure of a codelist to be extended by the codelist defining the extension. It provides a reference to the extended codelist and selection criteria to indicate the codes to be included in the extending codelist.", + "type":"object", + "properties":{ + "prefix":{ + "type":"string", + "description":"A reference to a codelist may contain a prefix. If a prefix is provided, this prefix will be applied to all the codes in the codelist before they are imported into the extended codelist." + }, + "codelist":{ + "$ref":"#/definitions/CodelistReferenceType", + "description":"Reference to a codelist object through a URN." + }, + "inclusiveCodeSelection":{ + "$ref":"#/definitions/CodeSelectionType", + "description":"Selection of codes from the referenced (extended) codelist to be included in the extending codelist." + }, + "exclusiveCodeSelection":{ + "$ref":"#/definitions/CodeSelectionType", + "description":"Selection of codes from the referenced (extended) codelist to be excluded in the extending codelist." + } + }, + "required":[ + "codelist" + ], + "anyOf":[ + { + + }, + { + "required":[ + "inclusiveCodeSelection" + ] + }, + { + "required":[ + "exclusiveCodeSelection" + ] + } + ], + "not":{ + "required":[ + "inclusiveCodeSelection", + "exclusiveCodeSelection" + ] + } + }, + "CodeSelectionType":{ + "description":"CodeSelectionType defines the structure for code selection to be used as inclusive or exclusive extensions.", + "type":"object", + "anyOf":[ + { + "required":[ + "wildcardedMemberValues" + ] + }, + { + "required":[ + "memberValues" + ] + } + ], + "properties":{ + "wildcardedMemberValues":{ + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "type":"string", + "pattern":"^[A-Za-z0-9_@$-]+%?$", + "description":"WildcardedMemberValue allows for an optional wildcard character ('%') at the end of an identifier." + }, + "description":"A wildcard expression that is evaluated to determine codes selected for inclusion/exclusion." + }, + "memberValues":{ + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "$ref":"#/definitions/MemberValueType", + "description":"An explicit selection of a code from the codelist selected for inclusion/exclusion. If the extended list is hierarchical, this can indicate whether child codes are to be included." + } + } + } + }, + "MemberValueType":{ + "anyOf":[ + { + "$ref":"#/definitions/idType" + }, + { + "type":"object", + "properties":{ + "value":{ + "$ref":"#/definitions/idType" + }, + "cascadeValues":{ + "$ref":"#/definitions/CascadeSelectionType" + } + }, + "required":[ + "value" + ] + } + ] + }, + "CascadeSelectionType":{ + "anyOf":[ + { + "type":"boolean" + }, + { + "const":"excluderoot", + "description":"ExcludeRootType is a single enumerated value that indciates that child values should be included, but that the actuall root should not." + } + ] + }, + "CodingTextFormatType":{ + "type":"object", + "properties":{ + "dataType":{ + "$ref":"#/definitions/SimpleCodeDataType" + }, + "isSequence":{ + "type":"boolean" + }, + "interval":{ + "type":"integer" + }, + "startValue":{ + "type":"integer", + "minimum":1 + }, + "endValue":{ + "type":"integer", + "minimum":1 + }, + "minLength":{ + "type":"integer", + "minimum":1 + }, + "maxLength":{ + "type":"integer", + "minimum":1 + }, + "minValue":{ + "type":"integer", + "minimum":1 + }, + "maxValue":{ + "type":"integer", + "minimum":1 + }, + "pattern":{ + "type":"string" + } + } + }, + "ComputationType":{ + "description":"ComputationType describes a computation in a process.", + "type":"object", + "properties":{ + "localID":{ + "$ref":"#/definitions/idType" + }, + "softwareLanguage":{ + "type":"string" + }, + "softwarePackage":{ + "type":"string" + }, + "softwareVersion":{ + "type":"string" + }, + "annotations":{ + "$ref":"#/definitions/AnnotationsType" + }, + "description":{ + "$ref":"#/definitions/localisedBestMatchText" + }, + "descriptions":{ + "$ref":"#/definitions/localisedText" + } + }, + "required":[ + "description" + ] + }, + "ConceptRepresentationType":{ + "description":"ConceptRepresentationType defines the core representation that are allowed for a concept. The text format allowed for a concept is that which is allowed for any non-target object component.", + "type":"object", + "oneOf":[ + { + "properties":{ + "enumeration":{ + "$ref":"#/definitions/AnyCodelistReferenceType", + "description":"Urn reference to a codelist which enumerates the possible values that can be used as the representation of this concept." + }, + "enumerationFormat":{ + "$ref":"#/definitions/CodedTextFormatType" + }, + "minOccurs":{ + "type":"integer", + "minimum":0, + "default":1, + "description":"The minOccurs attribute indicates the minimum number of value that must be reported for the component." + }, + "maxOccurs":{ + "$ref":"#/definitions/OccurenceType", + "default":1, + "description":"The maxOccurs attribute indicates the maximum number of values that can be reported for the component." + } + }, + "required":[ + "enumeration" + ] + }, + { + "properties":{ + "format":{ + "$ref":"#/definitions/BasicComponentTextFormatType" + }, + "minOccurs":{ + "type":"integer", + "minimum":0, + "default":1, + "description":"The minOccurs attribute indicates the minimum number of value that must be reported for the component." + }, + "maxOccurs":{ + "$ref":"#/definitions/OccurenceType", + "default":1, + "description":"The maxOccurs attribute indicates the maximum number of values that can be reported for the component." + } + }, + "required":[ + "format" + ] + } + ] + }, + "ConceptSchemeMapType":{ + "description":"ConceptSchemeMapType defines the structure of a map which identifies relationships between concepts in different concept schemes. Unless the artefact is returned as a stub, it must contain the 'source' and 'target' properties.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "itemMaps":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/SingleValueMappingType" + } + }, + "source":{ + "$ref":"#/definitions/ConceptSchemeReferenceType", + "description":"Urn reference to a concept scheme object." + }, + "target":{ + "$ref":"#/definitions/ConceptSchemeReferenceType", + "description":"Urn reference to a concept scheme object." + } + } + } + ] + }, + "SingleValueMappingType":{ + "description":"SingleValueMappingType defines a mapping with a single source and optional target.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/AnnotableType" + }, + { + "properties":{ + "sourceValue":{ + "$ref":"#/definitions/MappedValueType", + "description":"There should be a source value for each source represention (e.g. codelist, data type). Source values can be pattern matched by using regular expression or substrings using start/end indexes." + }, + "targetValue":{ + "type":"string", + "description":"The target value(s) is always an absolute string. However, if source value is a regular expression, the target value can output the capture group from the source." + }, + "validFrom":{ + "type":"string", + "format":"date-time" + }, + "validTo":{ + "type":"string", + "format":"date-time" + } + } + } + ], + "required":[ + "sourceValue" + ] + }, + "ConceptSchemeType":{ + "description":"ConceptSchemeType describes the structure of a concept scheme. A concept scheme is the descriptive information for an arrangement or division of concepts into groups based on characteristics, which the objects have in common. It contains a collection of concept definitions, that may be arranged in simple hierarchies.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableTypeWithNCNameID" + }, + { + "properties":{ + "isPartial":{ + "type":"boolean", + "description":"isPartial, if true, indicates that only the relevant portion of the concept scheme is being communicated." + }, + "concepts":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/ConceptType", + "description":"Concept describes the details of a concept within a concept scheme." + } + } + } + } + ] + }, + "ConceptType":{ + "description":"ConceptType describes the details of a concept. A concept is defined as a unit of knowledge created by a unique combination of characteristics. If a concept does not specify a TextFormat or a core representation, then the representation of the concept is assumed to be represented by any set of valid characters (corresponding to the string datatype).", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/NameableTypeWithNCNameID" + }, + { + "properties":{ + "coreRepresentation":{ + "$ref":"#/definitions/ConceptRepresentationType" + }, + "isoConceptReference":{ + "type":"object", + "properties":{ + "conceptAgency":{ + "type":"string" + }, + "conceptSchemeID":{ + "type":"string" + }, + "conceptID":{ + "type":"string" + } + }, + "required":[ + "conceptAgency", + "conceptSchemeID", + "conceptID" + ], + "description":"Provides a reference to an ISO 11179 concept." + }, + "parent":{ + "$ref":"#/definitions/SingleNCNameIDType", + "description":"ID of a local concept. Parent captures the semantic relationships between concepts which occur within a single concept scheme. This identifies the concept of which the current concept is a qualification (in the ISO 11179 sense) or subclass." + } + }, + "required":[ + "id" + ] + } + ] + }, + "DataConstraintAttachmentType":{ + "description":"DataConstraintAttachmentType describes a collection of references to constrainable artefacts related to data.", + "type":"object", + "oneOf":[ + { + "required":[ + "dataProvider" + ], + "properties":{ + "dataProvider":{ + "$ref":"#/definitions/DataProviderReferenceType", + "description":"dataProvider is a urn reference to a the provider of the data/metadata set to which the constraint is attached. If this is used, then only the release calendar is relevant.." + } + } + }, + { + "required":[ + "simpleDataSources" + ], + "properties":{ + "simpleDataSources":{ + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "description":"SimpleDataSource describes a simple data source, which is a URL of a SDMX-ML data or metadata message. Multiple instance can only be used if they have the same underlying structure.", + "$ref":"#/definitions/uri" + } + } + } + }, + { + "required":[ + "dataStructures" + ], + "properties":{ + "dataStructures":{ + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "$ref":"#/definitions/DataStructureReferenceType", + "description":"Urn reference to a data structure definition object to which the constraint is attached. A constraint which is attached to more than one data structure must only express key sets and/or cube regions where the identifiers of the dimensions are common across all structures to which the constraint is attached." + } + }, + "queryableDataSources":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/QueryableDataSourceType", + "description":"queryableDataSource describes a queryable data source to which the constraint is attached." + } + } + } + }, + { + "required":[ + "dataflows" + ], + "properties":{ + "dataflows":{ + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "$ref":"#/definitions/DataflowReferenceType", + "description":"Urn reference to a dataflow object to which the constraint is attached. A constraint can be attached to more than one dataflow, and the dataflows do not necessarily have to be usages of the same data structure. However, a constraint which is attached to more than one data structure must only express key sets and/or cube regions where the identifiers of the dimensions are common across all structures to which the constraint is attached." + } + }, + "queryableDataSources":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/QueryableDataSourceType", + "description":"queryableDataSource describes a queryable data source to which the constraint is attached." + } + } + } + }, + { + "required":[ + "provisionAgreements" + ], + "properties":{ + "provisionAgreements":{ + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "$ref":"#/definitions/ProvisionAgreementReferenceType", + "description":"Urn reference to a provision agreement to which the constraint is attached. A constraint can be attached to more than one provision agreement, and the provision agreements do not necessarily have to be references structure usages based on the same structure. However, a constraint which is attached to more than one provision agreement must only express key sets and/or cube/target regions where the identifier of the components are common across all structures to which the constraint is attached." + } + }, + "queryableDataSources":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/QueryableDataSourceType", + "description":"queryableDataSource describes a queryable data source to which the constraint is attached." + } + } + } + } + ] + }, + "DataConstraintType":{ + "description":"DataConstraintType defines the structure of a data constraint. A data constraint can specify either the available set of keys (DataKeySet) or set of component values (CubeRegion) in a data source, or the allowable keys that can be constructed from a data structure definition. Multiple such constraints may be present for a constrained artefact. For instance, there may be a constraing that specifies the values allowed for the data source (role is 'Allowed') which can be used for validation or for constructing a partial code list, whilst another constraing can specify the actual content of a data source (role is 'Actual'). Unless the artefact is returned as a stub, it must contain the 'role' property.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "role":{ + "$ref":"#/definitions/ConstraintRoleType", + "description":"The role attribute indicates whether this constraint states what data is actually present for the constraint attachment, or if it defines what content is allowed." + }, + "constraintAttachment":{ + "$ref":"#/definitions/DataConstraintAttachmentType", + "description":"DataConstraint specifies a sub set of the definition of the allowable or available content of a data set in terms of the content or in terms of the set of key combinations." + }, + "releaseCalendar":{ + "$ref":"#/definitions/ReleaseCalendarType", + "description":"ReleaseCalendar defines dates on which the constrained data is to be made available." + }, + "dataKeySets":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/DataKeySetType", + "description":"DataKeySet defines a full, distinct set of dimension values and the attribute values associated with the key." + } + }, + "cubeRegions":{ + "type":"array", + "minItems":1, + "maxItems":2, + "items":{ + "$ref":"#/definitions/CubeRegionType", + "description":"CubeRegion defines a slice of the data set (dimensions and attribute values) for the constrained artefacet. A set of either included or excluded regions can be described." + } + } + } + } + ] + }, + "ConstraintRoleType":{ + "description":"ConstraintRoleType defines a list of roles for a content constraint. A constraint can state which data is present or which content is allowed for the constraint attachment. Allowed: The constraint contains the allowed values for attachable object. Actual: The constraints contains the actual data present for the attachable object.", + "type":"string", + "enum":[ + "Allowed", + "Actual" + ] + }, + "DataConsumerSchemeType":{ + "description":"DataConsumerSchemeType defines a type of organisation scheme which contains only data consumers. The data consumer scheme maintained by a particular maintenance agency is always provided a fixed identifier and version, and is never final. Therefore, consumers can be added or removed without have to version the scheme. This scheme has no hierarchy, meaning that no organisation may define a relationship with another organisation in the scheme.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableWithoutVersionType" + }, + { + "properties":{ + "id":{ + "const":"DATA_CONSUMERS" + }, + "isPartial":{ + "type":"boolean", + "description":"isPartial, if true, indicates that only the relevant portion of the data consumer scheme is being communicated." + }, + "dataConsumers":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/DataConsumerType", + "description":"DataConsumer describes an organisation using data as input for further processing." + } + } + } + } + ] + }, + "DataConsumerType":{ + "description":"DataConsumerType defines the structure of a data consumer description. The contacts defined for the organisation are specific to the data consumer role the organisation is serving.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/NameableType" + }, + { + "properties":{ + "contacts":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/contactType" + } + } + }, + "required":[ + "id" + ] + } + ] + }, + "DataKeySetType":{ + "description":"DataKeySetType defines a collection of full or partial data keys (dimension values).", + "type":"object", + "properties":{ + "isIncluded":{ + "type":"boolean", + "description":"The isIncluded attribute indicates whether the keys defined in this key set are inclusive or exclusive to the constraint." + }, + "keys":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/DataKeyType", + "description":"Key contains a set of dimension values which identify a full set of data." + } + } + }, + "required":[ + "isIncluded", + "keys" + ] + }, + "DataProviderSchemeType":{ + "description":"DataProviderSchemeType defines a type of organisation scheme which contains only data providers. The data provider scheme maintained by a particular maintenance agency is always provided a fixed identifier and version, and is never final. Therefore, providers can be added or removed without have to version the scheme. This scheme has no hierarchy, meaning that no organisation may define a relationship with another organisation in the scheme.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableWithoutVersionType" + }, + { + "properties":{ + "id":{ + "const":"DATA_PROVIDERS" + }, + "isPartial":{ + "type":"boolean", + "description":"isPartial, if true, indicates that only the relevant portion of the data provider scheme is being communicated." + }, + "dataProviders":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/DataProviderType", + "description":"DataProvider describes an organisation that produces data." + } + } + } + } + ] + }, + "MetadataProviderSchemeType":{ + "description":"MetadataProviderSchemeType defines a type of organisation scheme which contains only metadata providers. The metadata provider scheme maintained by a particular maintenance agency is always provided a fixed identifier and is never versioned. Therefore, providers can be added or removed without have to version the scheme. This scheme has no hierarchy, meaning that no organisation may define a relationship with another organisation in the scheme.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableWithoutVersionType" + }, + { + "properties":{ + "id":{ + "const":"METADATA_PROVIDERS" + }, + "isPartial":{ + "type":"boolean", + "description":"isPartial, if true, indicates that only the relevant portion of the metadata provider scheme is being communicated." + }, + "metadataProviders":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/MetadataProviderType", + "description":"MetadataProvider describes an organisation that produces metadata." + } + } + } + } + ] + }, + "DataProviderType":{ + "description":"DataProviderType defines the structure of a data provider description. The contacts defined for the organisation are specific to the data provider role the organisation is serving.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/NameableType" + }, + { + "properties":{ + "contacts":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/contactType" + } + } + }, + "required":[ + "id" + ] + } + ] + }, + "MetadataProviderType":{ + "description":"MetadataProviderType defines the structure of a metadata provider description. The contacts defined for the organisation are specific to the metadata provider role the organisation is serving.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/NameableType" + }, + { + "properties":{ + "contacts":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/contactType" + } + } + }, + "required":[ + "id" + ] + } + ] + }, + "DataStructureComponentsType":{ + "description":"DataStructureComponentsType describes the structure of the grouping to the sets of components that have a defined structural role in the data structure definition. At a minimum at least one dimension must be defined.", + "type":"object", + "properties":{ + "attributeList":{ + "$ref":"#/definitions/AttributeListType", + "description":"AttributeList describes the attribute descriptor for the data structure definition. It is a collection of metadata concepts that define the attributes of the data structure definition." + }, + "dimensionList":{ + "$ref":"#/definitions/DimensionListType", + "description":"DimensionList describes the key descriptor for the data structure definition. It is an ordered set of metadata concepts that, combined, classify a statistical series, such as a time series, and whose values, when combined (the key) in an instance such as a data set, uniquely identify a specific series." + }, + "groups":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/GroupType", + "description":"Group describes a group descriptor in a data structure definition. It is a set metadata concepts (and possibly their values) that define a partial key derived from the key descriptor in a data structure definition." + } + }, + "measureList":{ + "$ref":"#/definitions/MeasureListType", + "description":"MeasureList describes the measure descriptor for a data structure." + } + }, + "required":[ + "dimensionList" + ] + }, + "DataStructureType":{ + "description":"DataStructureType defines the structure for a data structure definition. A data structure definition is defined as a collection of metadata concepts, their structure and usage when used to collect or disseminate data.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "dataStructureComponents":{ + "$ref":"#/definitions/DataStructureComponentsType", + "description":"DataStructureComponents defines the grouping of the sets of metadata concepts that have a defined structural role in the data structure definition. Note that for any component or group defined in a data structure definition, its id must be unique. This applies to the identifiers explicitly defined by the components as well as those inherited from the concept identity of a component. For example, if two dimensions take their identity from concepts with same identity (regardless of whether the concepts exist in different schemes) one of the dimensions must be provided a different explicit identifier. Although there are XML schema constraints to help enforce this, these only apply to explicitly assigned identifiers. Identifiers inherited from a concept from which a component takes its identity cannot be validated against this constraint. Therefore, systems processing data structure definitions will have to perform this check outside of the XML validation. There are also two reserved identifiers in a data structure definition; TIME_PERIOD, and REPORTING_YEAR_START_DAY. These identifiers may not be used outside of their respective defintions (TimeDimension and ReportingYearStartDay). This applies to both the explicit identifiers that can be assigned to the components or groups as well as an identifier inherited by a component from its concept identity. For example, if an ordinary dimension (i.e. not the time dimension) takes its concept identity from a concept with the identifier TIME_PERIOD, that dimension must provide a different explicit identifier." + }, + "metadata":{ + "$ref":"#/definitions/MetadataStructureReferenceType", + "description":"A data structure definition may be related to a metadata structure definition in order to use its metadata attributes as part of the data. Note that referenced metadata can also contain nested metadata attributes. By default all metadata attributes can be associated at any level of the data. However, a metadata attribute usage can be used to provide a specific attribute relationshp for a given metadata attribute." + } + } + } + ] + }, + "DataflowType":{ + "description":"DataflowType describes the structure of a data flow. A data flow is defined as the structure of data that will provided for different reference periods. If this type is not referenced externally, then a reference to a data structure definition must be provided.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "structure":{ + "$ref":"#/definitions/DataStructureReferenceType", + "description":"Urn reference to the data structure definition which defines the structure of all data for this flow." + } + } + } + ] + }, + "DimensionListType":{ + "description":"DimensionListType describes the key descriptor for a data structure definition. The order of the declaration of child dimensions is significant: it is used to describe the order in which they will appear in data formats for which key values are supplied in an ordered fashion (exclusive of the time dimension, which is not represented as a member of the ordered key). Any data structure definition which uses the time dimension should also declare a frequency dimension, conventionally the first dimension in the key (the set of ordered non-time dimensions). If is not necessary to assign a time dimension, as data can be organised in any fashion required.", + "type":"object", + "allOf":[ + { + "properties":{ + "id":{ + "const":"DimensionDescriptor" + }, + "links":{ + "$ref":"#/definitions/links", + "description":"Links field is an array of link objects. Also used to specify the URI or the URN to itself. If appropriate, a collection of links to additional external resources." + } + } + }, + { + "$ref":"#/definitions/AnnotableType" + }, + { + "properties":{ + "dimensions":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/DimensionType", + "description":"Dimension describes the structure of a dimension, which is defined as a statistical concept used (most probably together with other statistical concepts) to identify a statistical series, such as a time series, e.g. a statistical concept indicating certain economic activity or a geographical reference area." + } + }, + "timeDimension":{ + "$ref":"#/definitions/TimeDimensionType", + "description":"TimeDimension is a special dimension which designates the period in time in which the data identified by the full series key applies." + } + } + } + ] + }, + "DimensionType":{ + "description":"DimensionType describes the structure of an ordinary dimension, which is defined as a statistical concept used (most probably together with other statistical concepts) to identify a statistical series, such as a time series, e.g. a statistical concept indicating certain economic activity or a geographical reference area. The dimension takes its semantic, and in some cases it representation, from its concept identity. A dimension can be coded by referencing a code list from its coded local representation. It can also specify its text format, which is used as the representation of the dimension if a coded representation is not defined. Neither the coded or uncoded representation are necessary, since the dimension may take these from the referenced concept.", + "type":"object", + "required":[ + "conceptIdentity" + ], + "allOf":[ + { + "$ref":"#/definitions/IdentifiableTypeWithNCNameID" + }, + { + "properties":{ + "position":{ + "description":"The order of the dimensions in the key descriptor (DimensionList element) defines the order of the dimensions in the data structure. This position attribute explicitly specifies the position of the dimension in the data structure, starting at 0. It is optional and if specified must be consistent with the position of the dimension in the key descriptor.", + "type":"integer", + "minimum":0 + }, + "conceptIdentity":{ + "$ref":"#/definitions/ConceptReferenceType", + "description":"Urn reference to a concept where the identification of the concept scheme which defines it is contained in another context." + }, + "conceptRoles":{ + "description":"ConceptRoles references concepts which define roles which this dimension serves. If the concept from which the attribute takes its identity also defines a role the concept serves, then the isConceptRole indicator can be set to true on the concept identity rather than repeating the reference here.", + "type":"array", + "minItems":1, + "uniqueItems":true, + "items":{ + "$ref":"#/definitions/ConceptReferenceType", + "description":"Urn reference to a concept where the identification of the concept scheme which defines it is contained in another context." + } + }, + "localRepresentation":{ + "$ref":"#/definitions/SimpleDataStructureRepresentationType" + } + } + } + ] + }, + "GroupType":{ + "description":"GroupType describes the structure of a group descriptor in a data structure definition. A group may consist of a of partial key, or collection of distinct cube regions or key sets to which attributes may be attached. The purpose of a group is to specify attributes values which have the same value based on some common dimensionality. All groups declared in the data structure must be unique - that is, you may not have duplicate partial keys. All groups must be given unique identifiers.", + "type":"object", + "required":[ + "id" + ], + "allOf":[ + { + "$ref":"#/definitions/IdentifiableType" + }, + { + "properties":{ + "groupDimensions":{ + "type":"array", + "minItems":1, + "uniqueItems":true, + "items":{ + "$ref":"#/definitions/NCNameIDType", + "description":"Array of id's of dimensions defined in the key descriptor (DimensionList). Although it is conventional to declare dimensions in the same order as they are declared in the ordered key, there is no requirement to do so - the ordering of the values of the key are taken from the order in which the dimensions are declared. Note that the id of a dimension may be inherited from its underlying concept - therefore this reference value may actually be the id of the concept." + } + } + } + } + ] + }, + "HierarchicalCodeType":{ + "description":"HierarchicalCodeType describes the structure of a hierarchical code. A hierarchical code provides for a reference to a code that is referenced within the hierarchical code list via either a complete reference to a code through either a URN or full set of reference fields. Codes are arranged in a hierarchy by this reference. Note that it is possible to reference a single code such that it has multiple parents within the hierarchy. Further, the hierarchy may or may not be a leveled one.", + "type":"object", + "required":[ + "id", + "code" + ], + "allOf":[ + { + "$ref":"#/definitions/IdentifiableType", + "description":"The id attribute allows for an id to be assigned to the use of the particular code at that specific point in the hierarchy. This value is unique within the hierarchy being created, and is used to map the hierarchy against external structures." + }, + { + "properties":{ + "validFrom":{ + "type":"string", + "format":"date-time" + }, + "validTo":{ + "type":"string", + "format":"date-time" + }, + "code":{ + "$ref":"#/definitions/CodeReferenceType", + "description":"Code provides a complete, explicit reference to the codelist and a code through its URN." + }, + "hierarchicalCodes":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/HierarchicalCodeType", + "description":"HierarchicalCode is used to nest referenced codes into a value based hierarchy." + } + }, + "level":{ + "$ref":"#/definitions/idType", + "description":"Level references a formal level defined within the hierarchy which defines this hierarchical code. This is only necessary if the nesting depth of the hierarchical code does not correspond to the nesting depth of the level to which it belongs (i.e. the hieararchical code is to skip down a level). Otherwise, the code is assumed to exist at the level in which the nesting depth of the level matches the nesting depth of the code." + } + } + } + ] + }, + "HierarchyType":{ + "description":"The Hierarchy is an abstract type that provides for a classification structure of referenced codes arranged in levels of detail from the broadest to the most detailed level. The levels in which the code exist can be formal or informal. Unless the artefact is returned as a stub, it must contain the 'hierarchicalCodes' and 'hasFormalLevels' properties.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "level":{ + "$ref":"#/definitions/LevelType", + "description":"In a formally leveled hierarchy, Level describes a group of codes which are characterised by homogeneous coding, and where the parent of each code in the group is at the same higher level of the hierarchy. In a value based hierarchy Level describes information about the codes at the specified nesting level. This structure is recursive to indicate the hierarchy of the levels." + }, + "hierarchicalCodes":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/HierarchicalCodeType", + "description":"HierarchicalCode is used to assemble the codes from the codelist(s) referenced into a hierarchy." + } + }, + "hasFormalLevels":{ + "type":"boolean", + "description":"If “true”, this indicates a hierarchy where the structure is arranged in levels of detail from the broadest to the most detailed level. If “false”, this indicates a hierarchy structure where the items in the hierarchy have no formal level structure." + } + } + } + ] + }, + "HierarchyAssociationType":{ + "description":"HierarchyAssociationType defines the structure of a hiearchy association, which links a hierarchy with and identifiable object in the context of another object (e.g. a dimension within the context of a dataflow). Unless the artefact is returned as a stub, it must contain the 'linkedHierarchy' and 'linkedObject' properties.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "linkedHierarchy":{ + "$ref":"#/definitions/HierarchyReferenceType", + "description":"The associated hierarchy defined by a complete, explicit reference through its URN." + }, + "linkedObject":{ + "$ref":"#/definitions/urn", + "description":"Associates the Identifiable Artefact that needs the Hierarchy." + }, + "contextObject":{ + "$ref":"#/definitions/urn", + "description":"The context within which the association is performed." + } + } + } + ] + }, + "CustomTypeSchemeType":{ + "description":"CustomTypeSchemeType defines a collection of custom types that are used in transformations. Unless the artefact is returned as a stub, it must contain the 'vtlVersion' property.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "isPartial":{ + "type":"boolean", + "description":"isPartial, if true, indicates that only the relevant portion of the custom type scheme is being communicated." + }, + "vtlVersion":{ + "type":"string" + }, + "customTypes":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/CustomTypeType", + "description":"CustomType details a custom type within a custom type scheme." + } + } + } + } + ] + }, + "CustomTypeType":{ + "description":"CustomTypeType defines the structure of a custom type. A custom type specifies a custom conversion for a VTL scalar type to a resulting data type. This conversion overrides the default conversion.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/NameableType" + }, + { + "properties":{ + "vtlScalarType":{ + "type":"string", + "description":"Identifies the VTL scalar type that is to be converted to an resulting output data type." + }, + "dataType":{ + "anyOf":[ + { + "type":"string", + "description":"String value for other data types" + }, + { + "$ref":"#/definitions/SimpleDataType", + "description":"SDMX simple data type enumeration value" + } + ], + "description":"Identifies the resulting output data type the VTL scalar type is to be converted to. If this is an SDMX data type, it must use the proper SimpleDataType enumeration value. For all other data types, a string value can be used to identify the type." + }, + "vtlLiteralFormat":{ + "type":"string", + "description":"The format in which the literals of the VTL scalar type are expressed in the transformations. This is only needed if the format is different than the output format expressed by means of the VTL type." + }, + "outputFormat":{ + "type":"string", + "description":"The format the VTL scalar type has to assume (e.g. YYYY-MM-DD; see VTL specifications), both for the literals in the VTL expressions and for the conversion to the output." + }, + "nullValue":{ + "type":"string", + "description":"The value to be produced in the output of the conversion when a component has a null value." + } + }, + "required":[ + "id", + "vtlScalarType", + "dataType" + ] + } + ] + }, + "VtlMappingSchemeType":{ + "description":"VtlMappingSchemeType defines a set of mappings between SDMX and VTL.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "isPartial":{ + "type":"boolean", + "description":"isPartial, if true, indicates that only the relevant portion of the vtl mapping scheme is being communicated." + }, + "vtlMappings":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/VtlMappingType", + "description":"VtlMapping details a mapping between SDMX and VTL transformation." + } + } + } + } + ] + }, + "VtlMappingType":{ + "description":"VtlMappingType defines the structure of a single mapping between the reference to a SDMX artefact made from VTL transformations, rulesets, user defined operators and the corresponding SDMX structure identifier. These are used to assign an alternative names to SDMX Dataflows, Codelists, Concept Schemes, or Concepts. Although are distinct sub-classes in the Information Model, this structure serves to express them all. The references SDMX artefact serves to distinguish which type of sub-class (VtlDatflowMapping or VtlCodelistMapping, or VtlConceptMapping) is being described. When this is used to assign an alias for a SDMX Dataflow, this can also be used to indicate the methods used to convert the data structure from SDMX to VTL and vice-versa. Finally, this can be used to override the deault Basic mapping methods used for Dataflows by utilizing the GenericDataflow element in place of a reference to a specific Dataflow.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/NameableType" + }, + { + "oneOf":[ + { + "oneOf":[ + { + "required":[ + "dataflow" + ], + "properties":{ + "dataflow":{ + "$ref":"#/definitions/DataflowReferenceType", + "description":"A reference to the SDMX Dataflow that the mapping is defined for. This is used to create a VtlDataflowMapping. In this case, it is possible to specify the mapping details to and from VTL." + } + } + }, + { + "required":[ + "genericDataflow" + ], + "properties":{ + "genericDataflow":{ + "$ref":"#/definitions/EmptyType", + "description":"Indicates that the ToVtlMapping and FromVtlMapping are the default mapping methods to be applied, overriding the Basic methods if necessary. The mapping methods in this case would be applied to any dataflows that are not explicitly defined in other VtlMappings." + } + } + } + ], + "properties":{ + "toVtlMapping":{ + "$ref":"#/definitions/ToVtlMappingType", + "description":"Describes the mapping from a SDMX dataflow to a VTL data structure." + }, + "fromVtlMapping":{ + "$ref":"#/definitions/FromVtlMappingType", + "description":"Describes the mapping to a SDMX dataflow from a VTL data structure." + } + } + }, + { + "required":[ + "codelist" + ], + "properties":{ + "codelist":{ + "$ref":"#/definitions/CodelistReferenceType", + "description":"A reference to the SDMX Codelist that the mapping is defined for. This is used to create a VtlCodelistMapping." + } + } + }, + { + "required":[ + "concept" + ], + "properties":{ + "concept":{ + "$ref":"#/definitions/ConceptReferenceType", + "description":"A reference to the SDMX Concept that the mapping is defined for. This is used to create a VtlConceptMapping." + } + } + } + ] + }, + { + "properties":{ + "alias":{ + "type":"string", + "description":"The alias used to refer to the reference SDMX artefact in the transformations. This must be unique within the mapping scheme in which it is defined." + } + }, + "required":[ + "id", + "alias" + ] + } + ] + }, + "ToVtlMappingType":{ + "description":"ToVtlMappingType defines the mapping method and filter used when mapping from SDMX to VTL.", + "type":"object", + "properties":{ + "toVtlSubSpace":{ + "$ref":"#/definitions/SpaceKeyType", + "description":"Identfies a sub space of the mapped dataflow that the mapping applies to. This is a collection of references to the dimensions that make up the space." + }, + "method":{ + "anyOf":[ + { + "type":"string", + "description":"A simple string type that allows for other mapping methods." + }, + { + "const":"Basic", + "description":"The default mapping method. See Section 6 SDMX Standards ('SDMX Technical Notes'), 10.3.3.1 ('Basic Mapping')." + }, + { + "const":"Pivot", + "description":"Method for mapping multi-measure data. See Section 6 SDMX Standards ('SDMX Technical Notes'), 10.3.3.2 ('Pivot Mapping')." + }, + { + "const":"Basic-A2M", + "description":"The basic mapping method, using attributes to measures. See Section 6 SDMX Standards ('SDMX Technical Notes'), 10.3.3.3 ('From SDMX DataAttributes to VTL Measures')." + }, + { + "const":"Pivot-A2M", + "description":"The pivot mapping method, using attributes to measures. See Section 6 SDMX Standards ('SDMX Technical Notes'), 10.3.3.3 ('From SDMX DataAttributes to VTL Measures')." + } + ], + "description":"The mapping method used when mapping from SDMX to VTL. This is typically a StandardToVtlMappingMethodType, but can be any other value to allow for non-standard methods. The implied default is Basic." + } + } + }, + "SpaceKeyType":{ + "description":"SpaceKey defines the structure of a super- or sub- space for a SDMX Dataflow. It is a collection of references to the dimensions that make up the space.", + "type":"object", + "properties":{ + "keys":{ + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "$ref":"#/definitions/SingleNCNameIDType", + "description":"A reference to a dimension by its identifier." + } + } + } + }, + "FromVtlMappingType":{ + "description":"FromVtlMappingType defines the mapping method and filter used when mapping from VTL to SDMX.", + "type":"object", + "properties":{ + "fromVtlSuperSpace":{ + "$ref":"#/definitions/SpaceKeyType", + "description":"Identfies a super space of the mapped dataflow that the mapping applies to. This is a collection of references to the dimensions that make up the space." + }, + "method":{ + "anyOf":[ + { + "type":"string", + "description":"A simple string type that allows for other mapping methods." + }, + { + "const":"Basic", + "description":"The default mapping method, applicable only when the VLT data structure has just one measure component. See Section 6 SDMX Standards ('SDMX Technical Notes'), 10.3.4.1 ('Basic Mapping')." + }, + { + "const":"Unpivot", + "description":"The mapping method to be used when the VTL data structure has more than one measure component. See Section 6 SDMX Standards ('SDMX Technical Notes'), 10.3.4.2 ('Unpivot Mapping')." + }, + { + "const":"M2A", + "description":"Mapping of multi-measure VTL where on measure is mapped to the SDMX primary measure and the remaining measures are mapped as data attributes. See Section 6 SDMX Standards ('SDMX Technical Notes'), 10.3.4.3 ('From VTL Measures to SDMX DataAttributes')." + } + ], + "description":"The mapping method used when mapping from VTL to SDMX. This is typically a StandardFromVtlMappingMethodType, but can be any other value to allow for non-standard methods. The implied default is Basic for single-measure VTL data structures and Unpivot for multi-meausre VTL data structures." + } + } + }, + "NamePersonalisationSchemeType":{ + "description":"NamePersonalisationSchemeType defines a set of personalisations of VTL standard names that are used in a set of transformations. Unless the artefact is returned as a stub, it must contain the 'vtlVersion' property.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "isPartial":{ + "type":"boolean", + "description":"isPartial, if true, indicates that only the relevant portion of the name personalisation scheme is being communicated." + }, + "vtlVersion":{ + "type":"string" + }, + "namePersonalisations":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/NamePersonalisationType", + "description":"NamePersonalisation details a name personalisation that is used in a transformation." + } + } + } + } + ] + }, + "NamePersonalisationType":{ + "description":"NamePersonalisationType defines the structure of a name personalisation. A name personalisation is is used in place of a standard VTL name in some VTL operations.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/NameableType" + }, + { + "properties":{ + "vtlDefaultName":{ + "type":"string", + "description":"Provides the VTL standard name that is being personalised." + }, + "personalisedName":{ + "type":"string", + "description":"Provides the personalised name that is used in place of the VTL standard name in the transformation expressions." + }, + "vtlArtefact":{ + "type":"string", + "description":"Identifies the type of VTL model artefact that is being personalised. In VTL 2.0, this is valuedomain or variable." + } + }, + "required":[ + "id", + "vtlDefaultName", + "personalisedName", + "vtlArtefact" + ] + } + ] + }, + "RulesetSchemeType":{ + "description":"RulesetSchemeType defines a collection of rulesets that are used in transformations. Unless the artefact is returned as a stub, it must contain the 'vtlVersion' property.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "isPartial":{ + "type":"boolean", + "description":"isPartial, if true, indicates that only the relevant portion of the ruleset scheme is being communicated." + }, + "vtlVersion":{ + "type":"string" + }, + "rulesets":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/RulesetType", + "description":"Ruleset details a ruleset within a ruleset scheme." + } + }, + "vtlMappingScheme":{ + "$ref":"#/definitions/VtlMappingSchemeReferenceType", + "description":"References a VTL mapping scheme which defines aliases for given SDMX artefacts that are used in the rulesets. Rulesets defined on value domains reference Codelists or Concept Schemes (the latter in VTL are considered as the Value Domains of the variables corresponding to the SDMX Measure Dimensions). The rulesets defined on variables reference Concepts (for which a definite representation is assumed). Therefore, a ruleset should only refer to Codelists, Concept Schemes, and Concepts." + } + } + } + ] + }, + "RulesetType":{ + "description":"RulesetType defines the structure of a ruleset. A ruleset is a persistent set of rules which can be invoked by using appropriate VTL operators.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/NameableType" + }, + { + "properties":{ + "rulesetDefinition":{ + "type":"string", + "description":"A VTL statement for the definition of a ruleset. This must conform to the syntax of the VTL definition language." + }, + "rulesetType":{ + "type":"string", + "description":"The VTL type of the ruleset. In VTL 2.0, this is datapoint or hierarchical." + }, + "rulesetScope":{ + "type":"string", + "description":"This model artefact on which the ruleset is defined. In VTL 2.0, this is value domain or variable." + } + }, + "required":[ + "id", + "rulesetDefinition", + "rulesetType", + "rulesetScope" + ] + } + ] + }, + "TransformationSchemeType":{ + "description":"TransformationSchemeType describes the structure of a transformation scheme. A transformation scheme contains a set of transformations to be executed together (in the same run). It can contain any number of transformations that produce any number of results. Unless the artefact is returned as a stub, it must contain the 'vtlVersion' property.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "isPartial":{ + "type":"boolean", + "description":"isPartial, if true, indicates that only the relevant portion of the transformation scheme is being communicated." + }, + "vtlVersion":{ + "type":"string" + }, + "transformations":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/TransformationType", + "description":"Transformation describes the details of a single transformation within a transformation scheme." + } + }, + "vtlMappingScheme":{ + "description":"References a VTL mapping scheme (through a URN), which defines aliases for given SDMX artefacts that are used in the transformations as well as the mapping methods used when converting between SDMX and VTL data structures. All aliases must be defined in the referenced scheme. This also must be used if the basic mapping methods are not used.", + "$ref":"#/definitions/VtlMappingSchemeReferenceType" + }, + "namePersonalisationScheme":{ + "description":"References a name personalisation scheme (through a URN), which defines the overriding of some standard VTL names (to be assigned to some measures and/or attributes of the data structure) with some corresponding personalised names. This must be used if transformations within a transformation scheme personalise standard names. All personalisations must be defined in the referenced scheme.", + "$ref":"#/definitions/NamePersonalisationSchemeReferenceType" + }, + "customTypeScheme":{ + "description":"References a custom type scheme (through a URN), which defines custom conversions of VTL scalar types to SDMX data types. This must be used if custom type conversions are used in the transformations defined in a transformation scheme. All custom conversions must be defined in the referenced scheme.", + "$ref":"#/definitions/CustomTypeSchemeReferenceType" + }, + "rulesetSchemes":{ + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "$ref":"#/definitions/RulesetSchemeReferenceType", + "description":"References a ruleset scheme (through a URN) that defines one or more previously defined rulesets which can be invoked by VTL operators. If a transformation defined in a transformation scheme refers to a ruleset, the scheme in which the ruleset is defined must be referenced here." + } + }, + "userDefinedOperatorSchemes":{ + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "$ref":"#/definitions/UserDefinedOperatorSchemeReferenceType", + "description":"References a user defined operator scheme (through a URN) that defines one or more user defined operators used by the transformations defined in a transformation scheme. If a transformation in a transformation scheme refers to a user defined operator, the scheme in which the user defined operator is defined must be referenced here." + } + } + } + } + ] + }, + "TransformationType":{ + "description":"TransformationType defines the structure of a transformation. A transformation is an assignment of a VTL expression to a specific result.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/NameableType" + }, + { + "properties":{ + "expression":{ + "type":"string", + "description":"The right-hand side of the VTL statement. This is expression that is executed for this transformation. It include references to operands and other artefacts. The expression may contain references to SDMX artefacts using the reduced URN format; see Section 6 SDMX Standards ('SDMX Technical Notes'), 10.2.3 ('Abbreviation of the URN')" + }, + "result":{ + "type":"string", + "description":"The left-hand side of the VTL statement. This identifies the result artefact, which may be used in subsequent transformations. If the result is an SDMX artefact, the is expressed using the alias; see Section 6 SDMX Standards ('SDMX Technical Notes'), 10.2.3 ('Abbreviation of the URN')." + }, + "isPersistent":{ + "type":"boolean", + "description":"Indicates if the the result is permanently stored. A persistent result (value of true) can be used by transformation defined in other transformation schemes, but a non-persistent result (value of false) can only be used by transformations within the same transformation scheme." + } + }, + "required":[ + "id", + "expression", + "result", + "isPersistent" + ] + } + ] + }, + "UserDefinedOperatorSchemeType":{ + "description":"UserDefinedOperatorSchemeType defines a collection of user defined operators that are used in transformations. Unless the artefact is returned as a stub, it must contain the 'vtlVersion' property.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "isPartial":{ + "type":"boolean", + "description":"isPartial, if true, indicates that only the relevant portion of the user defined operator scheme is being communicated." + }, + "vtlVersion":{ + "type":"string" + }, + "userDefinedOperators":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/UserDefinedOperatorType", + "description":"UserDefinedOperator details a user defined operators within a user defined operator scheme." + } + }, + "vtlMappingScheme":{ + "$ref":"#/definitions/VtlMappingSchemeReferenceType", + "description":"References a VTL mapping scheme which defines aliases for given SDMX artefacts that are used in the user defined operators. Although the VTL user defined operators are conceived to be defined on generic operands, so that the specific artefacts to be manipulated are passed as parameters at the invocation, it is also possible that they reference specific SDMX artefacts like Dataflows, Codelists and ConceptSchemes. In this case, the mapping schemes referenced here define the mappings to those artefacts." + }, + "rulesetSchemes":{ + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "$ref":"#/definitions/RulesetSchemeReferenceType", + "description":"References a ruleset scheme defining rulesets utilized in the user defined operators." + } + } + } + } + ] + }, + "UserDefinedOperatorType":{ + "description":"UserDefinedOperatorType defines the structure of a user defined operator. A user defined operator is a custom VTL operator (not existing in the standard library) that extends the VTL standard library for specific purposes. In addition to its identification and name, and definition of the operator must be provided.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/NameableType" + }, + { + "properties":{ + "operatorDefinition":{ + "type":"string", + "description":"A VTL statement for the definition of a new operator: it specifies the operator name, its parameters and their data types, the VTL expression that defines its behaviour." + } + }, + "required":[ + "id", + "operatorDefinition" + ] + } + ] + }, + "InputOutputType":{ + "description":"InputOutputType describes the structure of an input or output to a process step. It provides a reference to the object that is the input or output.", + "type":"object", + "properties":{ + "localID":{ + "$ref":"#/definitions/idType" + }, + "annotations":{ + "$ref":"#/definitions/AnnotationsType" + }, + "objectReference":{ + "$ref":"#/definitions/urn", + "description":"ObjectReference is an abstract substitution head that references (through a urn) the object that is an input or output. It is substituted with a concrete reference to an explicit object type." + } + }, + "required":[ + "objectReference" + ] + }, + "LevelType":{ + "description":"LevelType describes a level in a hierarchical codelist. Where level is defined as a group where codes can be characterised by homogeneous coding, and where the parent of each code in the group is at the same higher level of the hierarchy.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/NameableType" + }, + { + "properties":{ + "codingFormat":{ + "$ref":"#/definitions/CodingTextFormatType", + "description":"CodingFormat specifies the text formatting of the codes in this level. This includes facets such as the expected characters and the length of the codes." + }, + "level":{ + "$ref":"#/definitions/LevelType", + "description":"Level describes the next level down in the hierarchy." + } + }, + "required":[ + "id" + ] + } + ] + }, + "MeasureRepresentationType":{ + "description":"MeasureRepresentationType defines the representation for a measure. A measure can be text (including XHTML and multi-lingual values), a simple value, or an enumerated value.", + "type":"object", + "oneOf":[ + { + "properties":{ + "enumeration":{ + "$ref":"#/definitions/AnyCodelistReferenceType", + "description":"Urn reference to an item scheme or value list." + }, + "enumerationFormat":{ + "$ref":"#/definitions/CodedTextFormatType" + }, + "maxOccurs":{ + "$ref":"#/definitions/OccurenceType", + "default":1 + }, + "minOccurs":{ + "type":"integer", + "minimum":0, + "default":1 + } + }, + "required":[ + "enumeration" + ] + }, + { + "properties":{ + "format":{ + "$ref":"#/definitions/BasicComponentTextFormatType" + }, + "maxOccurs":{ + "$ref":"#/definitions/OccurenceType", + "default":1 + }, + "minOccurs":{ + "type":"integer", + "minimum":0, + "default":1 + } + }, + "required":[ + "format" + ] + } + ] + }, + "MeasureListType":{ + "description":"MeasureListType describes the structure of the measure descriptor for a data structure definition.", + "type":"object", + "allOf":[ + { + "properties":{ + "id":{ + "const":"MeasureDescriptor" + }, + "links":{ + "$ref":"#/definitions/links", + "description":"Links field is an array of link objects. Also used to specify the URI or the URN to itself. If appropriate, a collection of links to additional external resources." + } + } + }, + { + "$ref":"#/definitions/AnnotableType" + }, + { + "properties":{ + "measures":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/MeasureType", + "description":"Measure defines the structure of a measure, which is the concept that is the value of the phenomenon to be measured in a data set." + } + } + } + } + ] + }, + "MetadataAttributeRepresentationType":{ + "description":"MetadataAttributeRepresentationType defines the possible local representations of a metadata attribute.", + "type":"object", + "oneOf":[ + { + "properties":{ + "enumeration":{ + "$ref":"#/definitions/CodelistReferenceType", + "description":"Urn reference to a codelist" + }, + "enumerationFormat":{ + "$ref":"#/definitions/CodedTextFormatType" + } + }, + "required":[ + "enumeration" + ] + }, + { + "properties":{ + "format":{ + "$ref":"#/definitions/BasicComponentTextFormatType" + } + }, + "required":[ + "format" + ] + } + ] + }, + "MetadataAttributeType":{ + "description":"MetadataAttributeType describes the structure of a metadata attribute. The metadata attribute takes its semantic, and in some cases it representation, from its concept identity. A metadata attribute may be coded (via the local representation), uncoded (via the text format), or take no value. In addition to this value, the metadata attribute may also specify subordinate metadata attributes. If a metadata attribute only serves the purpose of containing subordinate metadata attributes, then the isPresentational attribute should be used. Otherwise, it is assumed to also take a value. If the metadata attribute does take a value, and a representation is not defined, it will be inherited from the concept it takes its semantic from. The optional id on the metadata attribute uniquely identifies it within the metadata structured definition. If this id is not supplied, its value is assumed to be that of the concept referenced from the concept identity. Note that a metadata attribute (as identified by the id attribute) definition must be unique across the entire metadata structure definition (including target identifier, identifier component, and report structure ids). A metadata attribute may be used in multiple report structures and at different levels, but the content (value and/or child metadata attributes and their cardinality) of the metadata attribute cannot change.", + "type":"object", + "required":[ + "conceptIdentity" + ], + "allOf":[ + { + "$ref":"#/definitions/IdentifiableTypeWithNCNameID" + }, + { + "properties":{ + "isPresentational":{ + "type":"boolean", + "description":"The isPresentational attribute indicates whether the metadata attribute should allow for a value. A value of true, meaning the metadata attribute is presentational means that the attribute only contains child metadata attributes, and does not contain a value. If this attribute is not set to true, and a representation (coded or uncoded) is not defined, then the representation of the metadata attribute will be inherited from the concept from which it takes its identity." + }, + "maxOccurs":{ + "$ref":"#/definitions/OccurenceType", + "default":1, + "description":"The maxOccurs attribute indicates the maximum number of times this metadata attribute can occur within its parent object." + }, + "minOccurs":{ + "type":"integer", + "minimum":0, + "default":1, + "description":"The minOccurs attribute indicates the minimum number of times this metadata attribute must occur within its parent object." + }, + "conceptIdentity":{ + "$ref":"#/definitions/ConceptReferenceType", + "description":"Urn reference to a concept where the identification of the concept scheme which defines it is contained in another context." + }, + "localRepresentation":{ + "$ref":"#/definitions/MetadataAttributeRepresentationType" + }, + "metadataAttributes":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/MetadataAttributeType" + } + } + } + } + ] + }, + "MetadataStructureComponentsType":{ + "description":"MetadataStructureComponentsType describes the structure of one set of components, the metadata attribute list, that make up the metadata structure definition. At a minimum, at least one metadata attribute must be defined.", + "type":"object", + "properties":{ + "metadataAttributeList":{ + "$ref":"#/definitions/MetadataAttributeListType", + "description":"MetadataAttributeList defines the set of metadata attributes that can be defined as a hierarchy, for reporting reference metadata about a target object. The identification of metadata attributes must be unique at any given level of the metadata structure. Although there are XML schema constraints to help enforce this, these only apply to explicitly assigned identifiers. Identifiers inherited from a concept from which a metadata attribute takes its identity cannot be validated against this constraint. Therefore, systems processing metadata structure definitions will have to perform this check outside of the XML validation." + } + } + }, + "MetadataStructureType":{ + "description":"MetadataStructureType is used to describe a metadata structure definition, which is defined as a collection of metadata concepts, their structure and usage when used to collect or disseminate reference metadata.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "metadataStructureComponents":{ + "$ref":"#/definitions/MetadataStructureComponentsType", + "description":"MetadataStructureComponents defines the grouping of the sets of the components that make up the metadata structure definition." + } + } + } + ] + }, + "MetadataflowType":{ + "description":"MetadataflowType describes the structure of a metadata flow. A dataflow is defined as the structure of reference metadata that will be provided for different reference periods. If this type is not referenced externally, then a reference to a metadata structure definition must be provided. Unless the artefact is returned as a stub, it must contain the 'targets' property.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "structure":{ + "$ref":"#/definitions/MetadataStructureReferenceType", + "description":"Structure provides a urn reference to the metadata structure definition describing the structure of all reference metadata for this flow." + }, + "targets":{ + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "$ref":"#/definitions/WildcardObjectReferenceType", + "description":"References identifiable structures to which the reference metadata described by the referenced metadata structure should be restricted to. These references may include wildcards for parts of the reference." + } + } + } + } + ] + }, + "OrganisationSchemeMapType":{ + "description":"OrganisationSchemeMapType defines the structure of a map which identifies relationships between organisations in different organisation schemes. Unless the artefact is returned as a stub, it must contain the 'source' and 'target' properties.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "itemMaps":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/SingleValueMappingType" + } + }, + "source":{ + "$ref":"#/definitions/OrganisationSchemeReferenceType", + "description":"Urn reference to a concept scheme object." + }, + "target":{ + "$ref":"#/definitions/OrganisationSchemeReferenceType", + "description":"Urn reference to a concept scheme object." + } + } + } + ] + }, + "OrganisationUnitSchemeType":{ + "description":"OrganisationUnitSchemeType defines a type of organisation scheme which simply defines organisations and there parent child relationships. Organisations in this scheme are assigned no particular role, and may in fact exist within the other type of organisation schemes as well.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableWithoutVersionType" + }, + { + "properties":{ + "id":{ + "$ref":"#/definitions/idType" + }, + "isPartial":{ + "type":"boolean", + "description":"isPartial, if true, indicates that only the relevant portion of the organisation unit scheme is being communicated." + }, + "organisationUnits":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/OrganisationUnitType", + "description":"OrganisationUnit describes a generic organisation, which serves not predefined role in SDMX." + } + } + } + } + ] + }, + "OrganisationUnitType":{ + "description":"OrganisationUnitType defines the structure of an organisation unit description. In addition to general identification and contact information, an organisation unit can specify a relationship with another organisation unit from the same scheme which is its parent organisation.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/NameableType" + }, + { + "properties":{ + "contacts":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/contactType" + } + }, + "parent":{ + "$ref":"#/definitions/idType", + "description":"ID of an organisation unit, where the reference to the organisation unit scheme which defines it is provided in another context." + } + }, + "required":[ + "id" + ] + } + ] + }, + "MeasureType":{ + "description":"MeasureType defines the structure of a measure descriptor. In addition to the identifying concept and representation, a mandatory usage and max occurs can be defined.", + "type":"object", + "required":[ + "conceptIdentity" + ], + "allOf":[ + { + "$ref":"#/definitions/IdentifiableTypeWithNCNameID" + }, + { + "properties":{ + "usage":{ + "$ref":"#/definitions/UsageType", + "default":"optional", + "description":"The usage attribute indicates whether a measure value must be available for any corresponding existing observation." + }, + "conceptIdentity":{ + "$ref":"#/definitions/ConceptReferenceType", + "description":"Urn reference to a concept where the identification of the concept scheme which defines it is contained in another context." + }, + "conceptRoles":{ + "description":"ConceptRole references concepts which define roles which this measure serves. If the concept from which the attribute takes its identity also defines a role the concept serves, then the isConceptRole indicator can be set to true on the concept identity rather than repeating the reference here.", + "type":"array", + "minItems":1, + "uniqueItems":true, + "items":{ + "$ref":"#/definitions/ConceptReferenceType", + "description":"Urn reference to a concept where the identification of the concept scheme which defines it is contained in another context." + } + }, + "localRepresentation":{ + "$ref":"#/definitions/MeasureRepresentationType" + } + } + } + ] + }, + "ProcessStepType":{ + "description":"ProcessStepType describes the structure of a process step. A nested process step is automatically sub-ordinate, and followed as the next step. If the following step is conditional, it should be referenced in a transition.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/NameableType" + }, + { + "properties":{ + "computation":{ + "$ref":"#/definitions/ComputationType", + "description":"Computation describes the computations involved in the process, in any form desired by the user (these are informational rather than machine-actionable), and so may be supplied in multiple, parallel-language versions." + }, + "inputs":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/InputOutputType", + "description":"Input references an object which is an input to the process step." + } + }, + "outputs":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/InputOutputType", + "description":"Output references an object which is an output form the process step." + } + }, + "processSteps":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/ProcessStepType", + "description":"ProcessStep defines a process step, which is a specific operation, performed on data in order to validate or to derive new information according to a given set of rules." + } + }, + "transitions":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/TransitionType", + "description":"Transition describes the next process steps. Each transition in a process step should be evaluated, allowing for multiple process step branches from a single process step." + } + } + }, + "required":[ + "id" + ] + } + ] + }, + "ProcessType":{ + "description":"ProcessType describes the structure of a process, which is a scheme which defines or documents the operations performed on data in order to validate data or to derive new information according to a given set of rules. Processes occur in order, and will continue in order unless a transition dictates another step should occur.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "processSteps":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/ProcessStepType", + "description":"ProcessStep defines a process step, which is a specific operation, performed on data in order to validate or to derive new information according to a given set of rules." + } + } + } + } + ] + }, + "ProvisionAgreementType":{ + "description":"ProvisionAgreementType describes the structure of a provision agreement. A provision agreement defines an agreement for a data provider to report data against a dataflow. Attributes which describe how the registry must behave when data is registered against this provision agreement are supplied. Unless the artefact is returned as a stub, it must contain the 'dataflow' and 'dataProvider' properties.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "dataflow":{ + "$ref":"#/definitions/DataflowReferenceType", + "description":">Dataflow provides a reference to a pre-existing dataflow in the registry via a URN" + }, + "dataProvider":{ + "$ref":"#/definitions/DataProviderReferenceType", + "description":"DataProvider provides a reference to a pre-existing data provider in the registry via a URN." + } + } + } + ] + }, + "MetadataProvisionAgreementType":{ + "description":"MetadataProvisionAgreementType describes the structure of a metadata provision agreement. A metadata provision agreement defines an agreement for a metadata provider to report reference metadata against a metadataflow. Attributes which describe how the registry must behave when metadata is registered against this metadata provision agreement are supplied. Unless the artefact is returned as a stub, it must contain the 'metadataflow' and 'dataProvider' properties.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "metadataflow":{ + "$ref":"#/definitions/MetadataflowReferenceType", + "description":">Metadataflow provides a reference to a pre-existing metadataflow in the registry via a URN." + }, + "metadataProvider":{ + "$ref":"#/definitions/MetadataProviderReferenceType", + "description":"MetadataProvider provides a reference to a pre-existing metadata provider in the registry via a URN." + }, + "targets":{ + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "$ref":"#/definitions/WildcardObjectReferenceType" + }, + "description":"References identifiable structures to which the reference metadata described by the metadata structure used by the metadaflow should be restricted to. These references may include wildcards for parts of the reference." + } + } + } + ] + }, + "ReleaseCalendarType":{ + "description":"ReleaseCalendarType describes information about the timing of releases of the constrained data. All of these values use the standard \"P7D\" - style format.", + "type":"object", + "properties":{ + "offset":{ + "description":"Offset is the interval between January first and the first release of data within the year.", + "type":"string" + }, + "periodicity":{ + "description":"Periodicity is the period between releases of the data set.", + "type":"string" + }, + "tolerance":{ + "description":"Tolerance is the period after which the release of data may be deemed late.", + "type":"string" + } + }, + "required":[ + "offset", + "periodicity", + "tolerance" + ] + }, + "ReportingCategoryType":{ + "description":"ReportingCategoryType describes the structure of a reporting category, which groups structure usages into useful sub-packages. Sub ordinate reporting categories can be nested within the category definition.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/NameableType" + }, + { + "properties":{ + "reportingCategories":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/ReportingCategoryType", + "description":"ReportingCategory defines a reporting category, which is used to group structure usages into useful sub-packages." + } + }, + "structuralMetadata":{ + "type":"array", + "minItems":1, + "uniqueItems":true, + "items":{ + "$ref":"#/definitions/StructureReferenceType", + "description":"StructuralMetadata provides urn references for data structure definition and metadata structure definition references which are grouped in the reporting category. It is assumed that all structural metadata objects referenced from a category will be of the same type." + } + }, + "provisioningMetadata":{ + "type":"array", + "minItems":1, + "uniqueItems":true, + "items":{ + "$ref":"#/definitions/StructureUsageReferenceType", + "description":"ProvisioningMetadata provides urn references for dataflow and metadataflow references which are grouped in the reporting category. It is assumed that all provisioning metadata objects referenced from a category will be of the same type." + } + } + }, + "required":[ + "id" + ], + "anyOf":[ + { + + }, + { + "required":[ + "structuralMetadata" + ] + }, + { + "required":[ + "provisioningMetadata" + ] + } + ], + "not":{ + "required":[ + "structuralMetadata", + "provisioningMetadata" + ] + } + } + ] + }, + "ReportingTaxonomyMapType":{ + "description":"ReportingTaxonomyMapType defines the structure of a map which identifies relationships between reporting categories in different reporting taxonomies. Unless the artefact is returned as a stub, it must contain the 'source' and 'target' properties.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "itemMaps":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/SingleValueMappingType" + } + }, + "source":{ + "$ref":"#/definitions/ReportingTaxonomyReferenceType", + "description":"Urn reference to a concept scheme object." + }, + "target":{ + "$ref":"#/definitions/ReportingTaxonomyReferenceType", + "description":"Urn reference to a concept scheme object." + } + } + } + ] + }, + "ReportingTaxonomyType":{ + "description":"ReportingTaxonomyType describes the structure of a reporting taxonomy, which is a scheme which defines the composition structure of a data report where each component can be described by an independent structure or structure usage description.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "isPartial":{ + "type":"boolean", + "description":"isPartial, if true, indicates that only the relevant sub set of the reporting categories is being communicated." + }, + "reportingCategories":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/ReportingCategoryType", + "description":"ReportingCategory defines a reporting category, which is used to group structure usages into useful sub-packages." + } + } + } + } + ] + }, + "ReportingYearStartOrEndDayRepresentationType":{ + "description":"ReportingYearStartOrEndDayRepresentationType defines the representation for the reporting year start/end day attribute. Enumerated values are not allowed and the text format is fixed to be a day and month in the ISO 8601 format of '--MM-DD'.", + "type":"object", + "properties":{ + "format":{ + "$ref":"#/definitions/ReportingYearStartOrEndDayTextFormatType" + }, + "maxOccurs":{ + "const":1 + }, + "minOccurs":{ + "type":"integer", + "minimum":0, + "maximum":1, + "default":1 + } + }, + "required":[ + "format", + "maxOccurs" + ] + }, + "ReportingYearStartOrEndDayTextFormatType":{ + "description":"ReportingYearStartOrEndDayTextFormatType is a restricted version of the NonFacetedTextFormatType that fixes the value of the text type to be MonthDay. This type exists solely for the purpose of fixing the representation of the reporting year start/end day attribute.", + "type":"object", + "properties":{ + "dataType":{ + "const":"MonthDay" + } + }, + "required":[ + "dataType" + ], + "additionalProperties":false + }, + "ReportingYearStartOrEndDayType":{ + "description":"ReportingYearStartOrEndDayType defines the structure of the reporting year start or end day attribute. The reporting year start/end day attribute takes its semantic from its concept identity (usually the REPORTING_YEAR_START_DAY or REPORTING_YEAR_END_DAY concepts), yet always has a fixed identifier (REPORTING_YEAR_START_DAY, REPORTING_YEAR_END_DAY). The reporting year start/end day attribute always has a fixed text format, which specifies that the format of its value is always a day and month in the ISO 8601 format of '--MM-DD'. As with any other attribute, an attribute relationship must be specified. This relationship should be carefully selected as it will determine what type of data the data structure definition will allow. For example, if an attribute relationship of `dataflow` is specified, this will mean the data sets for this dataflow can only contain data with standard reporting periods where the all reporting periods have the same start/end day. In this case, data reported as standard reporting periods from two entities with different fiscal year start/end days could not be contained in the same data set.", + "type":"object", + "required":[ + "id", + "attributeRelationship", + "conceptIdentity", + "localRepresentation" + ], + "allOf":[ + { + "$ref":"#/definitions/AnnotableType" + }, + { + "properties":{ + "id":{ + "type":"string", + "enum":[ + "REPORTING_YEAR_START_DAY", + "REPORTING_YEAR_END_DAY" + ] + }, + "links":{ + "$ref":"#/definitions/links", + "description":"Links field is an array of link objects. Also used to specify the URI or the URN to itself. If appropriate, a collection of links to additional external resources." + }, + "usage":{ + "$ref":"#/definitions/UsageType", + "default":"mandatory", + "description":"The usage attribute indicates whether a ReportingYearStartDay/ReportingYearEndDay attribute value must be available for any corresponding existing observation." + }, + "attributeRelationship":{ + "$ref":"#/definitions/AttributeRelationshipType", + "description":"AttributeRelationship describes how the value of this attribute varies with the values of other components. These relationships will be used to determine the attachment level of the attribute in the various data formats." + }, + "measureRelationship":{ + "type":"array", + "uniqueItems":true, + "minItems":1, + "items":{ + "$ref":"#/definitions/NCNameIDType" + }, + "description":"The measureRelationship array identifies the measures that the attribute applies to. If this is not used, the attribute is assumed to apply to all measures. If used, it contains one or more identifiers of (a) local measure(s)." + }, + "conceptIdentity":{ + "$ref":"#/definitions/ConceptReferenceType", + "description":"Urn reference to a concept where the identification of the concept scheme which defines it is contained in another context." + }, + "conceptRoles":{ + "type":"array", + "minItems":1, + "uniqueItems":true, + "items":{ + "$ref":"#/definitions/ConceptReferenceType", + "description":"ConceptRole references concepts which define roles which this attribute serves. If the concept from which the attribute takes its identity also defines a role the concept serves, then the isConceptRole indicator can be set to true on the concept identity rather than repeating the reference here." + } + }, + "localRepresentation":{ + "$ref":"#/definitions/ReportingYearStartOrEndDayRepresentationType" + } + } + } + ] + }, + "RepresentationMapType":{ + "description":"RepresentationMapType describes ... Unless the artefact is returned as a stub, it must contain the 'source' and 'target' properties.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "source":{ + "type":"array", + "minItems":1, + "items":{ + "type":"object", + "properties":{ + "codelist":{ + "$ref":"#/definitions/AnyCodelistReferenceType" + }, + "dataType":{ + "$ref":"#/definitions/DataType" + } + }, + "oneOf":[ + { + "required":[ + "codelist" + ] + }, + { + "required":[ + "dataType" + ] + } + ] + } + }, + "target":{ + "type":"array", + "minItems":1, + "items":{ + "type":"object", + "properties":{ + "codelist":{ + "$ref":"#/definitions/AnyCodelistReferenceType" + }, + "dataType":{ + "$ref":"#/definitions/DataType" + } + }, + "oneOf":[ + { + "required":[ + "codelist" + ] + }, + { + "required":[ + "dataType" + ] + } + ] + } + }, + "representationMappings":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/ValueMappingType" + } + } + } + } + ] + }, + "SimpleCodeDataType":{ + "description":"SimpleCodeDataType restricts SimpleDataType to specify the allowable data types for a simple code. The possible values are simply Alpha, AlphaNumeric, or Numeric.", + "type":"string", + "enum":[ + "Alpha", + "AlphaNumeric", + "Numeric" + ] + }, + "SimpleComponentTextFormatType":{ + "description":"SimpleComponentTextFormatType is a restricted version of the BasicComponentTextFormatType that does not allow for multi-lingual values.", + "type":"object", + "properties":{ + "dataType":{ + "$ref":"#/definitions/SimpleDataType" + }, + "isSequence":{ + "type":"boolean" + }, + "interval":{ + "type":"integer" + }, + "startValue":{ + "type":"number" + }, + "endValue":{ + "type":"number" + }, + "timeInterval":{ + "$ref":"#/definitions/duration" + }, + "startTime":{ + "$ref":"#/definitions/StandardTimePeriodType" + }, + "endTime":{ + "$ref":"#/definitions/StandardTimePeriodType" + }, + "minLength":{ + "type":"integer", + "minimum":1 + }, + "maxLength":{ + "type":"integer", + "minimum":1 + }, + "minValue":{ + "type":"number" + }, + "maxValue":{ + "type":"number" + }, + "decimals":{ + "type":"integer", + "minimum":1 + }, + "pattern":{ + "type":"string" + }, + "sentinelValues":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/sentinelValueType", + "description":"SentinelValue defines a value that has a special meaning within the text format representation of a component." + } + } + } + }, + "AttributeRepresentationType":{ + "description":"AttributeRepresentationType defines the representation for a data attribute. A data attribute can be text (including XHTML and multi-lingual values), a simple value, or an enumerated value", + "type":"object", + "oneOf":[ + { + "properties":{ + "enumeration":{ + "$ref":"#/definitions/AnyCodelistReferenceType", + "description":"Reference to an item scheme or a value list. It consists of a URN." + }, + "enumerationFormat":{ + "$ref":"#/definitions/CodedTextFormatType" + }, + "maxOccurs":{ + "$ref":"#/definitions/OccurenceType", + "default":1 + }, + "minOccurs":{ + "type":"integer", + "minimum":0, + "default":1 + } + }, + "required":[ + "enumeration" + ] + }, + { + "properties":{ + "format":{ + "$ref":"#/definitions/BasicComponentTextFormatType" + }, + "maxOccurs":{ + "$ref":"#/definitions/OccurenceType", + "default":1 + }, + "minOccurs":{ + "type":"integer", + "minimum":0, + "default":1 + } + }, + "required":[ + "format" + ] + } + ] + }, + "SimpleDataStructureRepresentationType":{ + "description":"SimpleDataStructureRepresentationType defines the representation for any non-time dimension data structure definition component.", + "type":"object", + "oneOf":[ + { + "properties":{ + "enumeration":{ + "$ref":"#/definitions/CodelistReferenceType", + "description":"Urn reference to a codelist" + }, + "enumerationFormat":{ + "$ref":"#/definitions/CodedTextFormatType" + } + }, + "required":[ + "enumeration" + ] + }, + { + "properties":{ + "format":{ + "$ref":"#/definitions/SimpleComponentTextFormatType" + } + }, + "required":[ + "format" + ] + } + ] + }, + "StructureMapType":{ + "description":"StructureMapType defines the structure for mapping components of one structure to components of another structure. A structure may be referenced directly meaning the map applies wherever the structure is used, or it may be a reference via a structure usage meaning the map only applies within the context of that usage. Using the related structures, one can make extrapolations between maps. For example, if key families, A, B, and C, are all grouped in a related structures container, then a map from data structure A to C and a map from data structure B to C could be used to infer a relation between data structure A to C. Unless the artefact is returned as a stub, it must contain the 'source', 'target' and 'componentMaps' properties.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/MaintainableType" + }, + { + "properties":{ + "source":{ + "$ref":"#/definitions/StructureOrUsageReferenceType", + "description":"Source provides a reference to a structure (data or metadata) or a structure usage (dataflow or metadataflow) from which components defined by the actual structure are to mapped." + }, + "target":{ + "$ref":"#/definitions/StructureOrUsageReferenceType", + "description":"Target provides a reference to a structure (data or metadata) or a structure usage (dataflow or metadataflow) to which components from the source are to mapped." + }, + "epochMaps":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/EpochMapType", + "description":"Provides the ability to map source to target date formats. The source date is described as the number of epochs since a point in time, where the duration of each epoch is defined, e.g. number of milliseconds since 1970." + } + }, + "datePatternMaps":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/DatePatternMapType", + "description":"Provides the ability to map source to target date formats. The source date is described as a pattern (for example MM-YYYY)." + } + }, + "frequencyFormatMappings":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/FrequencyFormatMappingType", + "description":"Provides..." + } + }, + "componentMaps":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/ComponentMapType", + "description":"ComponentMap defines the relationship between the components of the source and target structures, including information on how the value from the source component relates to values in the target component." + } + }, + "fixedValueMaps":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/FixedValueMapType", + "description":"FixedValueMap defines a fixed value for a source or target component in the mapping." + } + } + } + } + ] + }, + "EpochMapType":{ + "description":"...", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/DateMapType" + }, + { + "required":[ + "basePeriod", + "epochPeriod" + ], + "properties":{ + "basePeriod":{ + "type":"string" + }, + "epochPeriod":{ + "description":"EpochPeriod defines an enumeration of epoch period types.", + "type":"string", + "enum":[ + "nanosecond", + "millisecond", + "microsecond", + "second", + "day" + ] + } + } + } + ] + }, + "DatePatternMapType":{ + "description":"...", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/DateMapType" + }, + { + "required":[ + "sourcePattern", + "locale" + ], + "properties":{ + "sourcePattern":{ + "description":"Describes the source date using conventions for describing years, months, days, etc.", + "type":"string" + }, + "locale":{ + "description":"The locale on which the input will be parsed according to the pattern.", + "type":"string" + } + } + } + ] + }, + "DateMapType":{ + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/IdentifiableType" + }, + { + "required":[ + "mappedComponents" + ], + "properties":{ + "mappedComponents":{ + "type":"array", + "minItems":1, + "items":{ + "type":"object", + "required":[ + "source", + "target" + ], + "properties":{ + "source":{ + "$ref":"#/definitions/NestedIDType", + "description":"(Nested) ID of a local source component." + }, + "target":{ + "$ref":"#/definitions/NestedIDType", + "description":"(Nested) ID of a local target component." + } + } + } + }, + "resolvePeriod":{ + "type":"string", + "enum":[ + "startOfPeriod", + "endOfPeriod", + "midPeriod" + ], + "description":"Indicates the point in time to resolve to when mapping from low fequency periods to higher frequency periods." + } + } + }, + { + "oneOf":[ + { + "required":[ + "frequencyDimension" + ], + "properties":{ + "frequencyDimension":{ + "$ref":"#/definitions/idType" + }, + "mappedFrequencies":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/idType", + "description":"ID of a local frequency format mapping object." + } + } + } + }, + { + "required":[ + "targetFrequencyID" + ], + "properties":{ + "targetFrequencyID":{ + "$ref":"#/definitions/idType" + } + } + } + ] + } + ] + }, + "FrequencyFormatMappingType":{ + "description":"...", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/IdentifiableType" + }, + { + "required":[ + "frequencyId", + "datePattern" + ], + "properties":{ + "frequencyId":{ + "$ref":"#/definitions/idType" + }, + "datePattern":{ + "type":"string" + } + } + } + ] + }, + "ComponentMapType":{ + "description":"ComponentMapType defines the structure for relating a component in a source structure to a component in a target structure.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/AnnotableType" + }, + { + "required":[ + "source", + "target" + ], + "properties":{ + "source":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/NestedIDType", + "description":"(Nested) ID of a local source component." + } + }, + "target":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/NestedIDType", + "description":"(Nested) ID of a local target component." + } + }, + "representationMap":{ + "$ref":"#/definitions/RepresentationMapReferenceType", + "description":"URN for referencing a representation map object." + } + } + } + ] + }, + "FixedValueMapType":{ + "description":"FixedValueMapType defines the structure for providing a fixed value for a source or target component.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/AnnotableType" + }, + { + "oneOf":[ + { + "required":[ + "source" + ], + "properties":{ + "source":{ + "$ref":"#/definitions/NestedIDType" + } + } + }, + { + "required":[ + "target" + ], + "properties":{ + "target":{ + "$ref":"#/definitions/NestedIDType" + } + } + } + ] + }, + { + "properties":{ + "values":{ + "type":"array", + "minItems":1, + "items":{ + "type":"string", + "description":"The fixed value for the component." + } + } + } + } + ] + }, + "TimeDimensionRepresentationType":{ + "description":"TimeDimensionRepresentationType defines the representation for the time dimension. Enumerated values are not allowed.", + "type":"object", + "properties":{ + "format":{ + "$ref":"#/definitions/TimeTextFormatType" + } + }, + "required":[ + "format" + ] + }, + "TimeDimensionType":{ + "description":"TimeDimensionType describes the structure of a time dimension. The time dimension takes its semantic from its concept identity (usually the TIME_PERIOD concept), yet is always has a fixed identifier (TIME_PERIOD). The time dimension always has a fixed text format, which specifies that its format is always the in the value set of the observational time period (see common:ObservationalTimePeriodType). It is possible that the format may be a sub-set of the observational time period value set. For example, it is possible to state that the representation might always be a calendar year. See the enumerations of the dataType attribute in the LocalRepresentation/format for more details of the possible sub-sets. It is also possible to facet this representation with start and end dates. The purpose of such facts is to restrict the value of the time dimension to occur within the specified range. If the time dimension is expected to allow for the standard reporting periods (see common:ReportingTimePeriodType) to be used, then it is strongly recommended that the reporting year start day attribute also be included in the data structure definition. When the reporting year start day attribute is used, any standard reporting period values will be assumed to be based on the start day contained in this attribute. If the reporting year start day attribute is not included and standard reporting periods are used, these values will be assumed to be based on a reporting year which begins January 1.", + "type":"object", + "required":[ + "conceptIdentity", + "localRepresentation" + ], + "allOf":[ + { + "properties":{ + "id":{ + "const":"TIME_PERIOD" + }, + "links":{ + "$ref":"#/definitions/links", + "description":"Links field is an array of link objects. Also used to specify the URI or the URN to itself. If appropriate, a collection of links to additional external resources." + } + } + }, + { + "$ref":"#/definitions/AnnotableType" + }, + { + "properties":{ + "conceptIdentity":{ + "$ref":"#/definitions/ConceptReferenceType", + "description":"Urn reference to a concept where the identification of the concept scheme which defines it is contained in another context." + }, + "localRepresentation":{ + "$ref":"#/definitions/TimeDimensionRepresentationType" + } + } + } + ] + }, + "TimeTextFormatType":{ + "description":"TimeTextFormat is a restricted version of the SimpleComponentTextFormatType that only allows time based format and specifies a default ObservationalTimePeriod representation and facets of a start and end time.", + "type":"object", + "properties":{ + "endTime":{ + "$ref":"#/definitions/StandardTimePeriodType" + }, + "startTime":{ + "$ref":"#/definitions/StandardTimePeriodType" + }, + "dataType":{ + "$ref":"#/definitions/TimeDataType" + }, + "sentinelValues":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/sentinelValueType", + "description":"SentinelValue defines a value that has a special meaning within the text format representation of a component." + } + } + } + }, + "sentinelValueType":{ + "description":"SentinelValueType defines the structure of a sentinel value. A sentinel is a value that has a special meaning within the text format representation of a component. The value is associated with a multi-lingual name and description.", + "type":"object", + "anyOf":[ + { + "required":[ + "value", + "name" + ] + }, + { + "required":[ + "value", + "name", + "names" + ] + } + ], + "properties":{ + "value":{ + "anyOf":[ + { + "type":"string" + }, + { + "type":"number" + }, + { + "type":"integer" + } + ], + "description":"The sentinel value being described." + }, + "name":{ + "description":"Human-readable (best-language-match) name (or meaning) of the sentinel value.", + "$ref":"#/definitions/localisedBestMatchText" + }, + "names":{ + "description":"Human-readable localised names (or meanings) of the sentinel value.", + "$ref":"#/definitions/localisedText" + }, + "description":{ + "$ref":"#/definitions/localisedBestMatchText" + }, + "descriptions":{ + "$ref":"#/definitions/localisedText" + } + } + }, + "TransitionType":{ + "description":"TransitionType describes the details of a transition, which is an expression in a textual or formalised way of the transformation of data between two specific operations performed on the data.", + "type":"object", + "required":[ + "condition", + "targetStep" + ], + "allOf":[ + { + "$ref":"#/definitions/IdentifiableType" + }, + { + "properties":{ + "localID":{ + "$ref":"#/definitions/idType" + }, + "condition":{ + "$ref":"#/definitions/localisedBestMatchText", + "description":"Condition is a textual description of the conditions to be met in order for the target step to be proceeded to. It is informational only (not machine-actionable), provided in the best-match language." + }, + "conditions":{ + "$ref":"#/definitions/localisedText", + "description":"Condition is a textual description of the conditions to be met in order for the target step to be proceeded to. It is informational only (not machine-actionable), and may be supplied in multiple, parallel-language form." + }, + "targetStep":{ + "$ref":"#/definitions/NestedIDType", + "description":"TargetStep references (by nested ID) a local process or sub-process step within the process that should be transitioned to, should the conditions described be met." + } + } + } + ] + }, + "UsageType":{ + "description":"An enumeration of optional | mandatory to indicate the usage of an attribute or measure.", + "type":"string", + "enum":[ + "mandatory", + "optional" + ] + }, + "ValueMappingType":{ + "description":"ValueMappingType defines a mapping of multiple sources to multiple targets.", + "type":"object", + "allOf":[ + { + "$ref":"#/definitions/AnnotableType" + }, + { + "properties":{ + "sourceValues":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/MappedValueType", + "description":"There should be a source value for each source represention (e.g. codelist, data type). Source values can be pattern matched by using regular expression or substrings using start/end indexes." + } + }, + "targetValues":{ + "type":"array", + "minItems":1, + "items":{ + "type":"string", + "description":"The target value(s) is always an absolute string. However, if source value is a regular expression, the target value can output the capture group from the source." + } + }, + "validFrom":{ + "type":"string", + "format":"date-time" + }, + "validTo":{ + "type":"string", + "format":"date-time" + } + } + } + ], + "required":[ + "sourceValues" + ] + }, + "MappedValueType":{ + "type":"object", + "required":[ + "value" + ], + "properties":{ + "value":{ + "type":"string" + }, + "isRegEx":{ + "type":"boolean" + }, + "startIndex":{ + "type":"integer" + }, + "endIndex":{ + "type":"integer" + } + } + }, + "uri":{ + "description":"Contains the URL to the schema allowing to validate the message. This also allows identifying the version of SDMX-JSON format used in this message. Providing the link to the SDMX-JSON schema is recommended.", + "type":"string", + "format":"uri" + }, + "urn":{ + "description":"Universal Resource Name (URN) is constructed according to the generic structure 'urn:sdmx:org.SDMX-IM-package-name.class-name=agencyid:maintainedobject-id(maintainedobject-version).containerobject-id.object-id*'. For more information see: Unique identification of SDMX objects, in: SDMX STANDARDS: SECTION 5 SDMX REGISTRY SPECIFICATION", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.((base\\.((Agency)|(OrganisationUnitScheme)|(AgencyScheme)|(DataProviderScheme)|(MetadataProviderScheme)|(DataConsumerScheme)|(OrganisationUnit)|(DataProvider)|(MetadataProvider)|(DataConsumer)))|(codelist\\.((Codelist)|(Valuelist)|(Hierarchy)|(HierarchyAssociation)|(Code)|(HierarchicalCode)|(Level)))|(conceptscheme\\.((ConceptScheme)|(Concept)))|(datastructure\\.((DataStructure)|(AttributeDescriptor)|(DataAttribute)|(GroupDimensionDescriptor)|(DimensionDescriptor)|(Dimension)|(TimeDimension)|(MeasureDescriptor)|(Measure)|(Dataflow)))|(categoryscheme\\.((CategoryScheme)|(Category)|(Categorisation)|(ReportingTaxonomy)|(ReportingCategory)))|(registry\\.((ProvisionAgreement)|(MetadataProvisionAgreement)|(DataConstraint)|(MetadataConstraint)|(Subscription)))|(metadatastructure\\.((MetadataAttributeDescriptor)|(MetadataAttribute)|(MetadataStructure)|(Metadataflow)))|(process\\.((Process)|(ProcessStep)|(Transition)))|(structuremapping\\.((StructureMap)|(ComponentMap)|(EpochMap)|(DatePatternMap)|(ConceptSchemeMap)|(OrganisationSchemeMap)|(CategorySchemeMap)|(ReportingTaxonomyMap)|(RepresentationMap)|(FrequencyFormatMapping)))|(transformation\\.((TransformationScheme)|(Transformation)|(CustomTypeScheme)|(CustomType)|(NamePersonalisationScheme)|(NamePersonalisation)|(VtlMappingScheme)|(VtlCodelistMapping)|(VtlConceptMapping)|(VtlDataflowMapping)|(RulesetScheme)|(Ruleset)|(UserDefinedOperatorScheme)|(UserDefinedOperator))))=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)(\\.[A-Za-z0-9_@$-]+(\\.[A-Za-z0-9_@$-]+)*)?$" + }, + "WildcardObjectReferenceType":{ + "description":"WildcardObjectReferenceType is a generic URN reference which allows for any object to be referenced with the ability to wildcard certain parts of the identifier. The type of object actually referenced can be determined from the URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.((base\\.((Any)|(Agency)|(OrganisationUnitScheme)|(AgencyScheme)|(DataProviderScheme)|(MetadataProviderScheme)|(DataConsumerScheme)|(OrganisationUnit)|(DataProvider)|(MetadataProvider)|(DataConsumer)))|(codelist\\.((Any)|(Codelist)|(Valuelist)|(Hierarchy)|(HierarchyAssociation)|(Code)|(HierarchicalCode)|(Level)))|(conceptscheme\\.((Any)|(ConceptScheme)|(Concept)))|(datastructure\\.((Any)|(DataStructure)|(AttributeDescriptor)|(DataAttribute)|(GroupDimensionDescriptor)|(DimensionDescriptor)|(Dimension)|(TimeDimension)|(MeasureDescriptor)|(Measure)|(Dataflow)))|(categoryscheme\\.((Any)|(CategoryScheme)|(Category)|(Categorisation)|(ReportingTaxonomy)|(ReportingCategory)))|(registry\\.((Any)|(ProvisionAgreement)|(MetadataProvisionAgreement)|(DataConstraint)|(MetadataConstraint)|(Subscription)))|(metadatastructure\\.((Any)|(MetadataAttributeDescriptor)|(MetadataAttribute)|(MetadataStructure)|(Metadataflow)))|(process\\.((Any)|(Process)|(ProcessStep)|(Transition)))|(structuremapping\\.((Any)|(StructureMap)|(ComponentMap)|(EpochMap)|(DatePatternMap)|(ConceptSchemeMap)|(OrganisationSchemeMap)|(CategorySchemeMap)|(ReportingTaxonomyMap)|(RepresentationMap)|(FrequencyFormatMapping)))|(transformation\\.((Any)|(TransformationScheme)|(Transformation)|(CustomTypeScheme)|(CustomType)|(NamePersonalisationScheme)|(NamePersonalisation)|(VtlMappingScheme)|(VtlCodelistMapping)|(VtlConceptMapping)|(VtlDataflowMapping)|(RulesetScheme)|(Ruleset)|(UserDefinedOperatorScheme)|(UserDefinedOperator))))=(([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*)|(\\*)):(([A-Za-z0-9_@$-]+)|(\\*))\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+))|(\\*))\\)((((\\.[A-Za-z0-9_@$-]+)*)|(\\.\\*))(((\\.[A-Za-z0-9_@$-]+)*)|(\\.\\*)))?$" + }, + "DataStructureReferenceType":{ + "description":"DataStructureReferenceType is a type for referencing a data structure definition object. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.datastructure\\.DataStructure=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "DataflowReferenceType":{ + "description":"DataflowReferenceType is a type for referencing a dataflow object. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.datastructure\\.Dataflow=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "ProvisionAgreementReferenceType":{ + "description":"ProvisionAgreementReferenceType is a type for referencing a provision agreement. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.registry\\.ProvisionAgreement=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "DataProviderReferenceType":{ + "description":"DataProviderReferenceType is a type for referencing a data provider. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.base\\.DataProvider=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):DATA_PROVIDERS\\(1\\.0\\)(\\.[A-Za-z0-9_@$-]+)$" + }, + "MetadataProviderReferenceType":{ + "description":"MetadataProviderReferenceType is a type for referencing a metadata provider. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.base\\.MetadataProvider=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):METADATA_PROVIDERS\\(1\\.0\\)(\\.[A-Za-z0-9_@$-]+)$" + }, + "MetadataStructureReferenceType":{ + "description":"MetadataStructureReferenceType is a type for referencing a metadata structure definition object. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.metadatastructure\\.MetadataStructure=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "MetadataflowReferenceType":{ + "description":"MetadataflowReferenceType is a type for referencing a metadata flow object. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.metadatastructure\\.Metadataflow=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "MetadataProvisionAgreementReferenceType":{ + "description":"MetadataProvisionAgreementReferenceType is a type for referencing a metadata provision agreement. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.registry\\.MetadataProvisionAgreement=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "MetadataSetReferenceType":{ + "description":"MetadataSetReferenceType is a type for referencing a metadata set. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.metadatastructure\\.MetadataSet=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "MetadataAttributeReferenceType":{ + "description":"MetadataAttributeReferenceType is a type for referencing a metadata attribute object in a metadata structur. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.metadatastructure\\.MetadataAttribute=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)(\\.[A-Za-z0-9_@$-]+(\\.[A-Za-z0-9_@$-]+)*)$" + }, + "StructureUsageReferenceType":{ + "description":"StructureUsageReferenceType is a specific type of MaintainableReference that is used for referencing any structure usages. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.((datastructure\\.Dataflow)|(metadatastructure\\.Metadataflow))=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "StructureOrUsageReferenceType":{ + "description":"StructureOrUsageReferenceType is a specific type of a reference for referencing either a structure or a structure usage. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.((datastructure\\.((DataStructure)|(Dataflow)))|(metadatastructure\\.((MetadataStructure)|(Metadataflow))))=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "StructureReferenceType":{ + "description":"StructureReferenceType is a specific type of MaintainableReference that is used for referencing any structure. It consists of a URN and/or a complete set of reference fields; agency, id, and version.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.((datastructure\\.DataStructure)|(metadatastructure\\.MetadataStructure))=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "CategorySchemeReferenceType":{ + "description":"CategorySchemeReferenceType is a type for referencing a category scheme object. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.categoryscheme\\.CategoryScheme=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "CategoryReferenceType":{ + "description":"CategoryReferenceType is a type for referencing a category object. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.categoryscheme\\.Category=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)(\\.[A-Za-z0-9_@$-]+(\\.[A-Za-z0-9_@$-]+)*)$" + }, + "ConceptSchemeReferenceType":{ + "description":"ConceptSchemeReferenceType is a type for referencing a concept scheme object. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.conceptscheme\\.ConceptScheme=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "ConceptReferenceType":{ + "description":"ConceptReferenceType is a type for referencing a concept object. It consists of a URN", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.conceptscheme\\.Concept=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)(\\.[A-Za-z0-9_@$-]+)$" + }, + "CodelistReferenceType":{ + "description":"CodelistReferenceType is a type for referencing a codelist object. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.codelist\\.Codelist=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "AnyCodelistReferenceType":{ + "description":"AnyCodelistReferenceType is a type for referencing a codelist or valuelist object. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.codelist\\.((Codelist)|(ValueList))=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "CodeReferenceType":{ + "description":"CodeReferenceType is a type for referencing a code object. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.codelist\\.Code=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)(\\.[A-Za-z0-9_@$-]+)$" + }, + "EnumerationReferenceType":{ + "description":"EnumerationReferenceType is a specific type of MaintainableReference that is used for referencing item schemes or a value list. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.((base\\.((OrganisationUnitScheme)|(AgencyScheme)|(DataProviderScheme)|(MetadataProviderScheme)|(DataConsumerScheme)))|(codelist\\.((Codelist)|(Valuelist)|(Hierarchy)))|(conceptscheme\\.((ConceptScheme)))|(categoryscheme\\.((CategoryScheme)|(ReportingTaxonomy))))=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "HierarchyReferenceType":{ + "description":"HierarchyReferenceType is a type for referencing a hierarchy object. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.codelist\\.Hierarchy=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "OrganisationSchemeReferenceType":{ + "description":"OrganisationSchemeReferenceType references an organisation scheme regardless of the specific type. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.((base\\.((AgencyScheme)|(DataConsumerScheme)|(DataProviderScheme)|(MetadataProviderScheme)|(OrganisationUnitScheme))))=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "ReportingTaxonomyReferenceType":{ + "description":"ReportingTaxonomyReferenceType is a type for referencing a reporting taxonomy object. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.categoryscheme\\.ReportingTaxonomy=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "FrequencyFormatMappingReferenceType":{ + "description":"FrequencyFormatMappingReferenceType is a type for referencing a frequency format mapping object. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.structuremapping\\.FrequencyFormatMapping=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)(\\.[A-Za-z0-9_@$-]+)$" + }, + "RepresentationMapReferenceType":{ + "description":"RepresentationMapReferenceType is a type for referencing a representation map object. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.structuremapping\\.RepresentationMap=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "RulesetSchemeReferenceType":{ + "description":"RulesetSchemeReferenceType is a type for referencing a ruleset scheme object. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.transformation\\.RulesetScheme=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "NamePersonalisationSchemeReferenceType":{ + "description":"NamePersonalisationSchemeReferenceType is a type for referencing a name personalisation scheme object. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.transformation\\.NamePersonalisationScheme=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "CustomTypeSchemeReferenceType":{ + "description":"CustomTypeSchemeReferenceType is a type for referencing a custom type scheme object. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.transformation\\.CustomTypeScheme=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "UserDefinedOperatorSchemeReferenceType":{ + "description":"UserDefinedOperatorSchemeReferenceType is a type for referencing a user defined operator scheme object. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.transformation\\.UserDefinedOperatorScheme=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "VtlMappingSchemeReferenceType":{ + "description":"VtlMappingSchemeReferenceType is a type for referencing a VTL mapping scheme object. It consists of a URN.", + "type":"string", + "pattern":"^urn:sdmx:org\\.sdmx\\.infomodel\\.transformation\\.VtlMappingScheme=([A-Za-z][A-Za-z0-9_-]*(\\.[A-Za-z][A-Za-z0-9_-]*)*):([A-Za-z0-9_@$-]+)\\((((0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?)|((0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*))(\\.(([A-Za-z-]|([A-Za-z-][A-Za-z0-9-]+)|([A-Za-z0-9-]+[A-Za-z-][A-Za-z0-9-]*))|(0|[1-9][0-9]*)))*)?)|(((0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+\\.(0|[1-9]\\d*))|((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\+)))\\)$" + }, + "duration":{ + "type":"string", + "pattern":"^P((([0-9]+Y([0-9]+M)?([0-9]+D)?|([0-9]+M)([0-9]+D)?|([0-9]+D))(T(([0-9]+H)([0-9]+M)?([0-9]+(\\.[0-9]+)?S)?|([0-9]+M)([0-9]+(\\.[0-9]+)?S)?|([0-9]+(\\.[0-9]+)?S)))?)|(T(([0-9]+H)([0-9]+M)?([0-9]+(\\.[0-9]+)?S)?|([0-9]+M)([0-9]+(\\.[0-9]+)?S)?|([0-9]+(\\.[0-9]+)?S))))$" + } + } +}