khaeru / sdmx

SDMX information model and client in Python
https://sdmx1.readthedocs.io
Apache License 2.0
28 stars 19 forks source link

Implement MetadataSet, MetadataStructureDefinition, etc. #73

Closed brockfanning closed 10 months ago

brockfanning commented 3 years ago

Is there any plan to implement support for reference metadata? My understanding is that it would involve "MetadataStructures", "MetadataStructure" and other related elements. I would be happy to help in whatever way is possible. My goal is to produce SDMX-ML output for reference metadata, and I would prefer to use this library rather than hand-building the XML.

khaeru commented 3 years ago

@brockfanning I'm open to that, but I haven't actually digested that part of the Information Model yet, nor seen particular applications in “the wild”, nor specimens.

I'd be happy to supervise and ensure any implementation conforms to the existing code base. I'd find it easier to do so if you could please share some starting points to understand the intended application(s)—either a specific one you have in mind, or some others that are providing inspiration.

brockfanning commented 3 years ago

@khaeru Sure thing - There is a pilot project which could be used to demonstrate one use, revolving around the UN's Sustainable Development Goals. There is a Microsoft Word template which is intended to be used to author metadata about SDG datasets. The idea is that users would enter metadata into these Word files, and then run them through an authoring-tool web application which will convert the metadata into SDMX.

You can try this out right now with these steps:

  1. Download the template
  2. Enter any text into any of the fields under "Metadata Submission Form"
  3. Save the template
  4. Go to the authoring tool web-app (it may load slowly because it's using Heroku's free option)
  5. Drag your saved template into the app
  6. The SDMX version will be automatically downloaded

That web app is built with Node.js and is using a Javascript-object-to-XML approach to generate the SDMX, as you can see here.

At present I need to do something similar (in fact, basically identical) in Python, and so my first thought was to see if it would make sense to be part of this library.

FYI, the Metadata Structure Definition that describes the SDMX produced by that web app is not yet final, but I could provide a draft version if it would be helpful.

khaeru commented 3 years ago

FYI, the Metadata Structure Definition that describes the SDMX produced by that web app is not yet final, but I could provide a draft version if it would be helpful.

Yes, this is the sort of thing I was hoping for!

brockfanning commented 3 years ago

@khaeru Here you go, again, not final or official:

<?xml version='1.0' encoding='UTF-8'?>
<mes:Structure xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:mes="http://www.sdmx.org/resources/sdmxml/schemas/v2_1/message" xmlns:str="http://www.sdmx.org/resources/sdmxml/schemas/v2_1/structure" xmlns:com="http://www.sdmx.org/resources/sdmxml/schemas/v2_1/common" xsi:schemaLocation="http://www.sdmx.org/resources/sdmxml/schemas/v2_1/message https://registry.sdmx.org/schemas/v2_1/SDMXMessage.xsd">
  <mes:Header>
    <mes:ID>IDREFb1baebc8-ad88-48f7-ba8c-276637c30603</mes:ID>
    <mes:Test>false</mes:Test>
    <mes:Prepared>2020-05-15T18:30:26Z</mes:Prepared>
    <mes:Sender id="UNSD" />
    <mes:Receiver id="not_supplied" />
  </mes:Header>
  <mes:Structures>
    <str:Concepts>
      <str:ConceptScheme urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.ConceptScheme=IAEG-SDGs:SDG_META_CONCEPTS(0.3)" isExternalReference="false" agencyID="IAEG-SDGs" id="SDG_META_CONCEPTS" isFinal="false" version="0.3">
        <com:Name xml:lang="en">SDG Metadata Concepts</com:Name>
        <com:Description xml:lang="en">Metadata concepts for Sustainable Development Goals Indicators</com:Description>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).SDG_INDICATOR_INFO" id="SDG_INDICATOR_INFO">
          <com:Name xml:lang="en">0. Indicator information</com:Name>
          <com:Description xml:lang="en">Description of the Goal, Target, Indicator and data series - if applicable. The date/period when this metadata file is last updated should be provided. The linkages with any other Goals and Targets under the SDG framework, if any, should be described. The name of international organisation(s) responsible for monitoring this indicator should be provided.</com:Description>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).SDG_GOAL" id="SDG_GOAL">
          <com:Name xml:lang="en">0.a. Goal</com:Name>
          <com:Description xml:lang="en">SDG Goal number and name.</com:Description>
          <str:Parent>
            <Ref id="SDG_INDICATOR_INFO" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).SDG_TARGET" id="SDG_TARGET">
          <com:Name xml:lang="en">0.b. Target</com:Name>
          <com:Description xml:lang="en">SDG Target number and name.</com:Description>
          <str:Parent>
            <Ref id="SDG_INDICATOR_INFO" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).SDG_INDICATOR" id="SDG_INDICATOR">
          <com:Name xml:lang="en">0.c. Indicator</com:Name>
          <com:Description xml:lang="en">SDG Indicator number and name.</com:Description>
          <str:Parent>
            <Ref id="SDG_INDICATOR_INFO" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).SDG_SERIES_DESCR" id="SDG_SERIES_DESCR">
          <com:Name xml:lang="en">0.d. Series</com:Name>
          <com:Description xml:lang="en">Description of SDG data series.</com:Description>
          <str:Parent>
            <Ref id="SDG_INDICATOR_INFO" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).META_LAST_UPDATE" id="META_LAST_UPDATE">
          <com:Name xml:lang="en">0.e. Metadata update</com:Name>
          <com:Description xml:lang="en">The date when this metadata report is last updated.</com:Description>
          <str:Parent>
            <Ref id="SDG_INDICATOR_INFO" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).SDG_RELATED_INDICATORS" id="SDG_RELATED_INDICATORS">
          <com:Name xml:lang="en">0.f. Related Indicators</com:Name>
          <com:Description xml:lang="en">Linkages with any other Goals and Targets.</com:Description>
          <str:Parent>
            <Ref id="SDG_INDICATOR_INFO" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).SDG_CUSTODIAN_AGENCIES" id="SDG_CUSTODIAN_AGENCIES">
          <com:Name xml:lang="en">0.g. International organisations(s) responsible for global monitoring</com:Name>
          <com:Description xml:lang="en">Global reporting: International organizations (departments/offices) responsible for monitoring this indicator at the global level. rnCountry reporting: This concept has no national counterpart.</com:Description>
          <str:Parent>
            <Ref id="SDG_INDICATOR_INFO" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).CONTACT" id="CONTACT">
          <com:Name xml:lang="en">1. Data reporter</com:Name>
          <com:Description xml:lang="en">Information of the contact persons and their organization responsible for the reporting of the indicator or time series specified.</com:Description>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).CONTACT_ORGANISATION" id="CONTACT_ORGANISATION">
          <com:Name xml:lang="en">1.a. Organisation</com:Name>
          <com:Description xml:lang="en">Agency responsible for reporting of the indicator or time series specified below.</com:Description>
          <str:Parent>
            <Ref id="CONTACT" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).CONTACT_NAME" id="CONTACT_NAME">
          <com:Name xml:lang="en">1.b. Contact person(s)</com:Name>
          <com:Description xml:lang="en">Name(s) of the contact points for the data or metadata.</com:Description>
          <str:Parent>
            <Ref id="CONTACT" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).ORGANISATION_UNIT" id="ORGANISATION_UNIT">
          <com:Name xml:lang="en">1.c. Contact Organisation Unit</com:Name>
          <com:Description xml:lang="en">Organisation unit information of the contact points for the data or metadata.</com:Description>
          <str:Parent>
            <Ref id="CONTACT" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).CONTACT_FUNCT" id="CONTACT_FUNCT">
          <com:Name xml:lang="en">1.d. Contact Person Function</com:Name>
          <com:Description xml:lang="en">Functional title(s) of the contact points for the data or metadata.</com:Description>
          <str:Parent>
            <Ref id="CONTACT" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).CONTACT_PHONE" id="CONTACT_PHONE">
          <com:Name xml:lang="en">1.e. Contact Phone</com:Name>
          <com:Description xml:lang="en">Phone number(s) of the contact points for the data or metadata.</com:Description>
          <str:Parent>
            <Ref id="CONTACT" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).CONTACT_MAIL" id="CONTACT_MAIL">
          <com:Name xml:lang="en">1.f. Contact Mail</com:Name>
          <com:Description xml:lang="en">Mailing address(es) of the contact points for the data or metadata.</com:Description>
          <str:Parent>
            <Ref id="CONTACT" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).CONTACT_EMAIL" id="CONTACT_EMAIL">
          <com:Name xml:lang="en">1.g. Contact emails</com:Name>
          <com:Description xml:lang="en">E-mail address(es) of the contact points for the data or metadata.</com:Description>
          <str:Parent>
            <Ref id="CONTACT" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).IND_DEF_CON_CLASS" id="IND_DEF_CON_CLASS">
          <com:Name xml:lang="en">2. Definition, concepts and classifications</com:Name>
          <com:Description xml:lang="en">Precise definition of the indicator including references to standards and classifications, preferably relying on international agreed definitions. The indicator definition should be unambiguous and be expressed in universally applicable terms. It must clearly express the unit of measurement (proportion, dollars, number of people, etc.). rnrnPrecise definition of all different concepts and terms associated with the indicator, also including reference to any associated classifications.</com:Description>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).STAT_CONC_DEF" id="STAT_CONC_DEF">
          <com:Name xml:lang="en">2.a. Definition and Concepts</com:Name>
          <com:Description xml:lang="en">Precise definition of the indicator preferably relying on internationally agreed definitions. The indicator definition should be unambiguous and be expressed in universally applicable terms. Precise definition of all different concepts and terms associated with the indicator, also including reference to any associated classifications.</com:Description>
          <str:Parent>
            <Ref id="IND_DEF_CON_CLASS" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).UNIT_MEASURE" id="UNIT_MEASURE">
          <com:Name xml:lang="en">2.b. Unit of Measure</com:Name>
          <com:Description xml:lang="en">Description of the unit of measurement (proportion, dollars, number of people, etc.)</com:Description>
          <str:Parent>
            <Ref id="IND_DEF_CON_CLASS" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).CLASS_SYSTEM" id="CLASS_SYSTEM">
          <com:Name xml:lang="en">2.c. Classifications</com:Name>
          <com:Description xml:lang="en">Describe references to both national and international standards and classification being used. [Information to be provided where applicable.]rn</com:Description>
          <str:Parent>
            <Ref id="IND_DEF_CON_CLASS" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).SRC_TYPE_COLL_METHOD" id="SRC_TYPE_COLL_METHOD">
          <com:Name xml:lang="en">3. Data source type and data collection method</com:Name>
          <com:Description xml:lang="en">Description of data sources, data collection methods, and related information such as descriptions of all data collection methods, data collection and release calendar, data providers and compilers, as well as their institutional mandates.</com:Description>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).SOURCE_TYPE" id="SOURCE_TYPE">
          <com:Name xml:lang="en">3.a. Data sources</com:Name>
          <com:Description xml:lang="en">Description of all actual and recommended sources of data. This description should include, when applicable, any changes of the data source over time, details of denominator (if from a different source) and any other relevant information related to the origin of the source or indicator. Similar details should be given for administrative sources.</com:Description>
          <str:Parent>
            <Ref id="SRC_TYPE_COLL_METHOD" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).COLL_METHOD" id="COLL_METHOD">
          <com:Name xml:lang="en">3.b. Data collection method</com:Name>
          <com:Description xml:lang="en">Description of all methods used for data collection. This description should include, when applicable, the sample frame used, the questions used to collect the data, the type of interview, the dates/duration of fieldwork, the sample size and the response rate. Some additional information on questionnaire design and testing, interviewer training, methods used to monitor non-response etc. should be provided here. Questionnaires used should be annexed (if very long: via hyperlink).</com:Description>
          <str:Parent>
            <Ref id="SRC_TYPE_COLL_METHOD" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).FREQ_COLL" id="FREQ_COLL">
          <com:Name xml:lang="en">3.c. Data collection calendar</com:Name>
          <com:Description xml:lang="en">Dates when source collection is next planned.</com:Description>
          <str:Parent>
            <Ref id="SRC_TYPE_COLL_METHOD" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).REL_CAL_POLICY" id="REL_CAL_POLICY">
          <com:Name xml:lang="en">3.d. Data release calendar</com:Name>
          <com:Description xml:lang="en">Expected dates of release of new data for this indicator, including the year (or, ideally, the quarter/month when the next data point associated with the indicator will become available).</com:Description>
          <str:Parent>
            <Ref id="SRC_TYPE_COLL_METHOD" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).DATA_SOURCE" id="DATA_SOURCE">
          <com:Name xml:lang="en">3.e. Data providers</com:Name>
          <com:Description xml:lang="en">Identification of national and/or international data provider(s), specifying the organization(s) responsible for producing the data.</com:Description>
          <str:Parent>
            <Ref id="SRC_TYPE_COLL_METHOD" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).COMPILING_ORG" id="COMPILING_ORG">
          <com:Name xml:lang="en">3.f. Data compilers</com:Name>
          <com:Description xml:lang="en">Organization(s) responsible for compilation of on this indicator either at national or global level.</com:Description>
          <str:Parent>
            <Ref id="SRC_TYPE_COLL_METHOD" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).INST_MANDATE" id="INST_MANDATE">
          <com:Name xml:lang="en">3.g. Institutional Mandate</com:Name>
          <com:Description xml:lang="en">Description of the set of rules or other formal set of instructions assigning responsibility as well as the authority to an organisation for the collection, processing, and dissemination of statistics for this indicator.</com:Description>
          <str:Parent>
            <Ref id="SRC_TYPE_COLL_METHOD" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).OTHER_METHOD" id="OTHER_METHOD">
          <com:Name xml:lang="en">4. Other methodological considerations</com:Name>
          <com:Description xml:lang="en">Other methodological considerations. These include rationale behind the indicator, comments and limitations, computation methodology at the country, regional, and global level,  treatment of missing values if applicable, and information related to quality assurance.</com:Description>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).RATIONALE" id="RATIONALE">
          <com:Name xml:lang="en">4.a. Rationale</com:Name>
          <com:Description xml:lang="en">Description of the purpose and rationale behind the indicator, as well as examples and guidance on its correct interpretation and meaning.</com:Description>
          <str:Parent>
            <Ref id="OTHER_METHOD" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).REC_USE_LIM" id="REC_USE_LIM">
          <com:Name xml:lang="en">4.b. Comment and limitations</com:Name>
          <com:Description xml:lang="en">Comments on the feasibility, suitability, relevance and limitations of the indicator. Also includes data comparability issues, presence of wide confidence intervals (such as for maternal mortality ratios); provides further details on additional non-official indicators commonly used together with the indicator.</com:Description>
          <str:Parent>
            <Ref id="OTHER_METHOD" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).DATA_COMP" id="DATA_COMP">
          <com:Name xml:lang="en">4.c. Method of computation</com:Name>
          <com:Description xml:lang="en">Explanation of how the indicator is calculated, including mathematical formulas and descriptive information of computations made on the source data to produce the indicator (including adjustments and weighting). This explanation should also highlight cases in which mixed sources are used or where the calculation has changed over time (i.e., discontinuities in the series).</com:Description>
          <str:Parent>
            <Ref id="OTHER_METHOD" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).DATA_VALIDATION" id="DATA_VALIDATION">
          <com:Name xml:lang="en">4.d. Validation</com:Name>
          <com:Description xml:lang="en">Description of process of monitoring the results of data compilation and ensuring the quality of the statistical results, including consultation process with countries on the national data submitted to the SDGs Indicators Database. Descriptions and links to all relevant reference materials should be provided.</com:Description>
          <str:Parent>
            <Ref id="OTHER_METHOD" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).ADJUSTMENT" id="ADJUSTMENT">
          <com:Name xml:lang="en">4.e. Adjustments</com:Name>
          <com:Description xml:lang="en">Global reporting: Description of any adjustments with respect to use of standard classifications and harmonization of breakdowns for age group and other dimensions, or adjustments made for compliance with specific international or national definitions.rnNational reporting:  This concept is typically not applicable for national reporting.</com:Description>
          <str:Parent>
            <Ref id="OTHER_METHOD" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).IMPUTATION" id="IMPUTATION">
          <com:Name xml:lang="en">4.f. Treatment of missing values (i) at country level and (ii) at regional level.</com:Name>
          <com:Description xml:lang="en">Global reporting: (National level) Description of the methodology employed for producing estimates for the indicator when country data are not available, including any mathematical formulas and description of additional variables used as input into the estimation process.rn(Regional level) Description of how missing values for individual countries or areas are imputed or otherwise estimated by international agencies to derive regional or global aggregates of the indicator. rnNational reporting: This concept is not applicable for national reporting.</com:Description>
          <str:Parent>
            <Ref id="OTHER_METHOD" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).REG_AGG" id="REG_AGG">
          <com:Name xml:lang="en">4.g. Regional aggregations</com:Name>
          <com:Description xml:lang="en">Global reporting: Description of the methodology, including any mathematical formulas, used for the calculation of the regional/global aggregates from the country values. Description of the weighting structure used for aggregating country indicator values to regional and global levels. Additional methodological details on how the data from countries or areas is assembled by custodian international agencies to provide regional and global aggregates. This is distinct from the method of computation, which looks at how the indicator is compiled at a national level. rnNational reporting: This concept is not applicable for national reporting.</com:Description>
          <str:Parent>
            <Ref id="OTHER_METHOD" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).DOC_METHOD" id="DOC_METHOD">
          <com:Name xml:lang="en">4.h. Methods and guidance available to countries for the compilation of the data at the national level</com:Name>
          <com:Description xml:lang="en">Global reporting: Description of methodology used by countries for the compilation of data at national level and the relevant international recommendations and guidelines available to countries. Descriptions and links to all relevant reference materials should be provided. rnNational reporting: For national reporting a country may refer to the globally available metadata and explain how it is being used.</com:Description>
          <str:Parent>
            <Ref id="OTHER_METHOD" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).QUALITY_MGMNT" id="QUALITY_MGMNT">
          <com:Name xml:lang="en">4.i. Quality management</com:Name>
          <com:Description xml:lang="en">Description of systems and frameworks in place within an organisation to manage the quality of statistical products and processes.rn</com:Description>
          <str:Parent>
            <Ref id="OTHER_METHOD" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).QUALITY_ASSURE" id="QUALITY_ASSURE">
          <com:Name xml:lang="en">4.j. Quality assurance</com:Name>
          <com:Description xml:lang="en">Description of practices and guidelines focusing on quality in general and dealing with quality of statistical programmes at your agency, including measures for ensuring the efficient use of resources.rn</com:Description>
          <str:Parent>
            <Ref id="OTHER_METHOD" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).QUALITY_ASSMNT" id="QUALITY_ASSMNT">
          <com:Name xml:lang="en">4.k. Quality assessment</com:Name>
          <com:Description xml:lang="en">Description of overall evaluation of fulfilling quality requirements, based on standard quality criteria.</com:Description>
          <str:Parent>
            <Ref id="OTHER_METHOD" />
          </str:Parent>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).COVERAGE" id="COVERAGE">
          <com:Name xml:lang="en">5. Data availability and disaggregation</com:Name>
          <com:Description xml:lang="en">Global reporting: Indicate for how many countries the data for this indicator are already currently available on a regular basis. Data availability by regional breakdowns and time periods can also be descibed here. Describe the specification of the dimensions and levels used for disaggregation of the indicator (e.g., income, sex, age group, geographic location, disability status, etc.).rnNational reporting: Data availability by sub-national breakdowns and time periods can be descibed here. Describe the specification of the dimensions and levels used for disaggregation of the indicator (e.g., income, sex, age group, geographic location, disability status, etc.).</com:Description>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).COMPARABILITY" id="COMPARABILITY">
          <com:Name xml:lang="en">6. Comparability / Deviation from international standards</com:Name>
          <com:Description xml:lang="en">Explanation on the differences between country produced and internationally estimated data on this indicator, highlighting and summarising the main sources of differences.</com:Description>
        </str:Concept>
        <str:Concept urn="urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=IAEG-SDGs:SDG_META_CONCEPTS(0.3).OTHER_DOC" id="OTHER_DOC">
          <com:Name xml:lang="en">7. References and Documentation</com:Name>
          <com:Description xml:lang="en">Descriptions and links to all relevant reference materials related to this indicator.</com:Description>
        </str:Concept>
      </str:ConceptScheme>
    </str:Concepts>
    <str:MetadataStructures>
      <str:MetadataStructure urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataStructure=IAEG-SDGs:SDG_MSD(0.3)" isExternalReference="false" agencyID="IAEG-SDGs" id="SDG_MSD" isFinal="false" version="0.3">
        <com:Name xml:lang="en">SDG Metadata Structure Definition</com:Name>
        <com:Description xml:lang="en">Metadata Structure Definition for Sustainable Development Goals Indicators.</com:Description>
        <str:MetadataStructureComponents>
          <str:MetadataTarget urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataTarget=IAEG-SDGs:SDG_MSD(0.3).KEY_TARGET" id="KEY_TARGET">
            <str:KeyDescriptorValuesTarget urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.DimensionDescriptorValuesTarget=IAEG-SDGs:SDG_MSD(0.3).KEY_TARGET.DIMENSION_DESCRIPTOR_VALUES_TARGET" id="DIMENSION_DESCRIPTOR_VALUES_TARGET">
              <str:LocalRepresentation>
                <str:TextFormat textType="KeyValues" />
              </str:LocalRepresentation>
            </str:KeyDescriptorValuesTarget>
            <str:IdentifiableObjectTarget urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.IdentifiableObjectTarget=IAEG-SDGs:SDG_MSD(0.3).KEY_TARGET.Dataflow" id="Dataflow" objectType="Dataflow">
              <str:LocalRepresentation>
                <str:TextFormat textType="IdentifiableReference" />
              </str:LocalRepresentation>
            </str:IdentifiableObjectTarget>
          </str:MetadataTarget>
          <str:ReportStructure urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.ReportStructure=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT" id="SDG_META_RPT">
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.ADJUSTMENT" minOccurs="0" maxOccurs="1" id="ADJUSTMENT">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="ADJUSTMENT" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.CLASS_SYSTEM" minOccurs="0" maxOccurs="1" id="CLASS_SYSTEM">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="CLASS_SYSTEM" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.COLL_METHOD" minOccurs="0" maxOccurs="1" id="COLL_METHOD">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="COLL_METHOD" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.COMPARABILITY" minOccurs="0" maxOccurs="1" id="COMPARABILITY">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="COMPARABILITY" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.COMPILING_ORG" minOccurs="0" maxOccurs="1" id="COMPILING_ORG">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="COMPILING_ORG" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.CONTACT" minOccurs="0" maxOccurs="1" id="CONTACT">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="CONTACT" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.CONTACT_EMAIL" minOccurs="0" maxOccurs="1" id="CONTACT_EMAIL">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="CONTACT_EMAIL" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.CONTACT_FUNCT" minOccurs="0" maxOccurs="1" id="CONTACT_FUNCT">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="CONTACT_FUNCT" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.CONTACT_MAIL" minOccurs="0" maxOccurs="1" id="CONTACT_MAIL">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="CONTACT_MAIL" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.CONTACT_NAME" minOccurs="0" maxOccurs="1" id="CONTACT_NAME">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="CONTACT_NAME" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.CONTACT_ORGANISATION" minOccurs="0" maxOccurs="1" id="CONTACT_ORGANISATION">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="CONTACT_ORGANISATION" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.CONTACT_PHONE" minOccurs="0" maxOccurs="1" id="CONTACT_PHONE">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="CONTACT_PHONE" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.COVERAGE" minOccurs="0" maxOccurs="1" id="COVERAGE">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="COVERAGE" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.DATA_COMP" minOccurs="0" maxOccurs="1" id="DATA_COMP">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="DATA_COMP" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.DATA_SOURCE" minOccurs="0" maxOccurs="1" id="DATA_SOURCE">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="DATA_SOURCE" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.DATA_VALIDATION" minOccurs="0" maxOccurs="1" id="DATA_VALIDATION">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="DATA_VALIDATION" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.DOC_METHOD" minOccurs="0" maxOccurs="1" id="DOC_METHOD">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="DOC_METHOD" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.FREQ_COLL" minOccurs="0" maxOccurs="1" id="FREQ_COLL">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="FREQ_COLL" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.IMPUTATION" minOccurs="0" maxOccurs="1" id="IMPUTATION">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="IMPUTATION" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.IND_DEF_CON_CLASS" minOccurs="0" maxOccurs="1" id="IND_DEF_CON_CLASS">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="IND_DEF_CON_CLASS" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.INST_MANDATE" minOccurs="0" maxOccurs="1" id="INST_MANDATE">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="INST_MANDATE" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.META_LAST_UPDATE" minOccurs="0" maxOccurs="1" id="META_LAST_UPDATE">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="META_LAST_UPDATE" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.ORGANISATION_UNIT" minOccurs="0" maxOccurs="1" id="ORGANISATION_UNIT">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="ORGANISATION_UNIT" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.OTHER_DOC" minOccurs="0" maxOccurs="1" id="OTHER_DOC">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="OTHER_DOC" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.OTHER_METHOD" minOccurs="0" maxOccurs="1" id="OTHER_METHOD">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="OTHER_METHOD" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.QUALITY_ASSMNT" minOccurs="0" maxOccurs="1" id="QUALITY_ASSMNT">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="QUALITY_ASSMNT" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.QUALITY_ASSURE" minOccurs="0" maxOccurs="1" id="QUALITY_ASSURE">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="QUALITY_ASSURE" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.QUALITY_MGMNT" minOccurs="0" maxOccurs="1" id="QUALITY_MGMNT">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="QUALITY_MGMNT" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.RATIONALE" minOccurs="0" maxOccurs="1" id="RATIONALE">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="RATIONALE" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.REC_USE_LIM" minOccurs="0" maxOccurs="1" id="REC_USE_LIM">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="REC_USE_LIM" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.REG_AGG" minOccurs="0" maxOccurs="1" id="REG_AGG">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="REG_AGG" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.REL_CAL_POLICY" minOccurs="0" maxOccurs="1" id="REL_CAL_POLICY">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="REL_CAL_POLICY" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.SDG_CUSTODIAN_AGENCIES" minOccurs="0" maxOccurs="1" id="SDG_CUSTODIAN_AGENCIES">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="SDG_CUSTODIAN_AGENCIES" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.SDG_GOAL" minOccurs="0" maxOccurs="1" id="SDG_GOAL">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="SDG_GOAL" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.SDG_INDICATOR" minOccurs="0" maxOccurs="1" id="SDG_INDICATOR">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="SDG_INDICATOR" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.SDG_INDICATOR_INFO" minOccurs="0" maxOccurs="1" id="SDG_INDICATOR_INFO">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="SDG_INDICATOR_INFO" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.SDG_RELATED_INDICATORS" minOccurs="0" maxOccurs="1" id="SDG_RELATED_INDICATORS">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="SDG_RELATED_INDICATORS" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.SDG_SERIES_DESCR" minOccurs="0" maxOccurs="1" id="SDG_SERIES_DESCR">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="SDG_SERIES_DESCR" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.SDG_TARGET" minOccurs="0" maxOccurs="1" id="SDG_TARGET">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="SDG_TARGET" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.SOURCE_TYPE" minOccurs="0" maxOccurs="1" id="SOURCE_TYPE">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="SOURCE_TYPE" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.SRC_TYPE_COLL_METHOD" minOccurs="0" maxOccurs="1" id="SRC_TYPE_COLL_METHOD">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="SRC_TYPE_COLL_METHOD" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.STAT_CONC_DEF" minOccurs="0" maxOccurs="1" id="STAT_CONC_DEF">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="STAT_CONC_DEF" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataAttribute urn="urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataAttribute=IAEG-SDGs:SDG_MSD(0.3).SDG_META_RPT.UNIT_MEASURE" minOccurs="0" maxOccurs="1" id="UNIT_MEASURE">
              <str:ConceptIdentity>
                <Ref maintainableParentID="SDG_META_CONCEPTS" package="conceptscheme" maintainableParentVersion="0.3" agencyID="IAEG-SDGs" id="UNIT_MEASURE" class="Concept" />
              </str:ConceptIdentity>
            </str:MetadataAttribute>
            <str:MetadataTarget>
              <Ref id="KEY_TARGET" />
            </str:MetadataTarget>
          </str:ReportStructure>
        </str:MetadataStructureComponents>
      </str:MetadataStructure>
    </str:MetadataStructures>
  </mes:Structures>
</mes:Structure>
brockfanning commented 3 years ago

@khaeru Also for easier reference, here is an example of an SDMX message generated according to that MSD:

<?xml version="1.0" encoding="utf-8"?>
<mes:GenericMetadata xmlns:mes="http://www.sdmx.org/resources/sdmxml/schemas/v2_1/message" xmlns:gen="http://www.sdmx.org/resources/sdmxml/schemas/v2_1/metadata/generic" xmlns:com="http://www.sdmx.org/resources/sdmxml/schemas/v2_1/common">
  <mes:Header>
    <mes:ID>MESSAGE_ID_PLACEHOLDER</mes:ID>
    <mes:Test>false</mes:Test>
    <mes:Prepared>2021-03-28T17:31:40.830Z</mes:Prepared>
    <mes:Sender id="sender"/>
    <mes:Structure structureID="MDS1">
      <com:Structure>
        <URN>urn:sdmx:org.sdmx.infomodel.metadatastructure.MetadataStructure=IAEG-SDGs:SDG_MSD(0.3)</URN>
      </com:Structure>
    </mes:Structure>
  </mes:Header>
  <mes:MetadataSet structureRef="MDS1" setID="c0cb607c-f0b4-4b4b-8c37-389d8695ceaf">
    <com:Name xml:lang="en">SDG METADATA SET</com:Name>
    <gen:Report id="SDG_META_RPT">
      <gen:Target id="KEY_TARGET">
        <gen:ReferenceValue id="DIMENSION_DESCRIPTOR_VALUES_TARGET">
          <gen:DataKey>
            <com:KeyValue id="SERIES">
              <com:Value>SI_POV_DAY1</com:Value>
            </com:KeyValue>
            <com:KeyValue id="REPORTING_TYPE">
              <com:Value>G</com:Value>
            </com:KeyValue>
            <com:KeyValue id="REF_AREA">
              <com:Value>1</com:Value>
            </com:KeyValue>
          </gen:DataKey>
        </gen:ReferenceValue>
        <gen:ReferenceValue id="Dataflow">
          <gen:ObjectReference>
            <URN>urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=IAEG-SDGs:DF_SDG_GLH(1.2)</URN>
          </gen:ObjectReference>
        </gen:ReferenceValue>
      </gen:Target>
      <gen:AttributeSet>
        <gen:ReportedAttribute id="ORGANISATION_UNIT">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="SDG_INDICATOR_INFO">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="CONTACT">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="IND_DEF_CON_CLASS">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="SRC_TYPE_COLL_METHOD">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="OTHER_METHOD">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="SDG_GOAL">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="SDG_TARGET">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="SDG_INDICATOR">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="SDG_SERIES_DESCR">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="META_LAST_UPDATE">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="SDG_RELATED_INDICATORS">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="SDG_CUSTODIAN_AGENCIES">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="CONTACT_ORGANISATION">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="CONTACT_NAME">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="CONTACT_FUNCT">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="CONTACT_PHONE">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="CONTACT_MAIL">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="CONTACT_EMAIL">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="STAT_CONC_DEF">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="UNIT_MEASURE">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="CLASS_SYSTEM">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="SOURCE_TYPE">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="COLL_METHOD">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="FREQ_COLL">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="REL_CAL_POLICY">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="DATA_SOURCE">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="COMPILING_ORG">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="INST_MANDATE">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="RATIONALE">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="REC_USE_LIM">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="DATA_COMP">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="DATA_VALIDATION">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="ADJUSTMENT">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="IMPUTATION">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="REG_AGG">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="DOC_METHOD">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="QUALITY_MGMNT">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="QUALITY_ASSURE">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="QUALITY_ASSMNT">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="COVERAGE">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="COMPARABILITY">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
        <gen:ReportedAttribute id="OTHER_DOC">
          <com:Text xml:lang="en"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>]]></com:Text>
        </gen:ReportedAttribute>
      </gen:AttributeSet>
    </gen:Report>
  </mes:MetadataSet>
</mes:GenericMetadata>
khaeru commented 3 years ago

Excellent, thank you!

So this makes clear (again, just for me, because I had simply not looked at this previously): the MetadataSet is a collection of non-data (e.g. text) fields that describe some target (e.g. data in a data flow, but possibly other things); and the MetadataStructure describes the structure of a MetadataSet. In a sense, the MetadataSet contains things that could be attached as Attributes or Annotations on a DataSet, but can be more expansive and be passed around separate from the data.

(That's very cool—aside from the application you mention, I think it could be a basis for the kind of thing colleagues have been doing for the IPCC AR6 data thus far using separate spreadsheet “templates” for data and model descriptions; see e.g. https://data.ene.iiasa.ac.at/ar6-scenario-submission/#/about)

To proceed in the same manner to the rest of the codebase, I recommend these steps:

  1. Add these files to https://github.com/khaeru/sdmx-test-data/. I don't have a dev workflow set up there (I just push commits directly to main), but I guess they can be added in a PR (and later updated, as you say they're in a draft state).
  2. Add XFAIL tests to tests/reader/test_reader_xml.py for reading both the structure and metadata messages.
  3. Expand sdmx.model, sdmx.message, and sdmx.reader.xml in tandem until all the classes and corresponding reader functions are present. This will be a large number of classes and functions, but hopefully conceptually pretty simple by following the example of existing code (although maybe I flatter myself how easy it is to read). Here I can give more specific advice as comments on a PR.
  4. Expand sdmx.writer.xml until the same messages can be “round-tripped,” as checked by the roundtrip tests you've already modified before.

Since (3) will be substantial, I'd suggest targeting to complete that first and merge it before starting on (4).

khaeru commented 3 years ago

@brockfanning just to be clear, is it on your radar to tackle this at some point?

No pressure and no problem if not; just would like to know as an input to planning future development.

brockfanning commented 3 years ago

@khaeru At this time we're working around the issue in a different way, and I also don't have any funding to work on it. So as much as I'd like to contribute to the project, realistically I will probably not be able to tackle it until my contract situation changes.

khaeru commented 3 years ago

Got it—thanks for the info! Please do advise if anything changes.