Validate SDMX-ML against official schemas

Validate SDMX-ML against official schemas#

sdmx is capable of generating XML for all kinds of SDMX components. When communicating with remote services though, only valid SDMX-ML messages can be sent. To help ensure your generated XML complies with the standard you can call validate_xml().

Validation requires having a copy of the official schema files available. To help make this easier, you can use install_schemas(), which will cache a local copy for use in validation.

Cache schema files#

Installation of the schemas defaults to v2.1 format. For SDMX v3.0 you need to supply the version string.

Note

This only needs to be run once for each SDMX-ML version.

In [1]: import sdmx

In [2]: sdmx.install_schemas()
Out[2]: PosixPath('/home/docs/.cache/sdmx/2.1')

# or
In [3]: sdmx.install_schemas(version="3.0")
Out[3]: PosixPath('/home/docs/.cache/sdmx/3.0.0')

The schema files will be downloaded and placed in your local cache directory.

Validate SDMX-ML messages#

Generate an SDMX-ML message, perhaps by following Generate SDMX-ML from Python objects. Once you have a file on disk that has an SDMX-ML message it can be validated by running validate_xml(). These instructions will use the samples provided by the SDMX technical working group.

>>> import sdmx
>>> sdmx.validate_xml("samples/common/common.xml")
True
>>> sdmx.validate_xml("samples/demography/demography.xml")
True

Validating SDMX v3.0 messages requires a version parameter to be supplied.

>>> sdmx.validate_xml("samples/Codelist/codelist.xml", version="3.0")

Invalid messages will return False. You will also see a log message to help in tracing the problem:

Element '{http://www.sdmx.org/resources/sdmxml/schemas/v2_1/common}Annotations': This element is not expected.
Expected is one of ( {http://www.sdmx.org/resources/sdmxml/schemas/v2_1/common}Description,
{http://www.sdmx.org/resources/sdmxml/schemas/v2_1/structure}Structure )., line 17