Quality Indicators Dictionary and Markup Language

The scenario of rapidly growing geodata catalogues requires tools focused on facilitate users the choice of products. Having quality fields populated in metadata allow the users to rank and then select the best fit-for-purpose products. In this direction, QualityML is a dictionary that contains hierarchically structured concepts to precisely define and relate quality levels: from quality classes to quality measurements. These levels are used to encode quality semantics for geospatial data by mapping them to the corresponding metadata schemas. The benefits of having encoded quality semantics, in the case of data producers, are related with improvements in their product discovery and better transmission of their characteristics. In the case of data users, they would better compare quality and uncertainty measures to take the best selection of data as well as to perform dataset intercomparison. Also, it allows other components (such as visualization, discovery, or comparison tools) to be quality-aware and interoperable.

On one hand, the QualityML is a profile of the ISO geospatial metadata standards (e.g. ISO 19157) providing a set of rules for precisely documenting quality measure parameters that is structured in 5 levels. On the other hand, QualityML includes semantics and vocabularies for the quality concepts. Whenever possible, it uses statistic expressions from the UncertML dictionary (http://www.uncertml.org) encoding. However, it also extends UncertML to provide a list of alternative metrics that are commonly used to quantify quality beyond the uncertainty concept. Unfortunately, the website of UncertML was shut down in 2016. It still can be queried from the Web Archive project. Given the situation, in 2018 QualityML decided to duplicate all UncertML records that were used at that time.

Finally, keep in mind that QualityML is not just suitable for encoding geospatial dataset level quality but also considers pixel and object level uncertainties. This is done by linking the metadata quality descriptions with layers representing not just the data, but the uncertainty values associated with each geospatial element.

This page is structured in the following sections:

A URI is defined for each measure, domain and metric.

All relative URIs in this page refer to https://www.qualityml.org/1.0/

The research leading to these results has been carried out in several projects that have received funding from the European Union: GeoViQua (Seventh Framework Programme, grant agreement no. 265178), WQeMS (Horizon 2020, grant agreement no. 101004157), EIFFEL (Horizon 2020, grant agreement no. 101003518) and CitiObs (Horizon Europe, grant agreement no. 101086421).

Generic quality element

A Quality element is a combination of a quality class, a quality indicator, a quality domain, a quality metric (which include a metrics name, metrics description, metrics parameters, its values and units of measure). The combination of a quality domain and a quality metrics are commonly known as quality measures. We suggest 2 ways to map the QualityML concepts to ISO 19139 and ISO 19115-3. The first way makes a simple use of the ISO values keeping the structure of Record as simple as possible. The second one extends Record using QualityML XML schemas to allow a more structured encoding:

Without extending Record. RECOMMENDED as implementation does not support extending the XML encoding. See the complete XML encoding of this example here.

With an extension of Record. Not commonly supported by implementations.

The section about XML encodings provides some examples on how to encode the QualityML concepts in ISO 19139 or 19115-3 documents.

Quality classes

The ISO 19157:2013 Geographic information - Data quality defines 7 data quality elements (or classes) describing a certain aspect of the quality of geographic data in which quality elements can be classified. In 2022, we added a new class called "certainty" that is applicable to decision ready information. This class provide simple indicators for decision makers in an standardized language and it is inspired by the IPCC

Quality indicators

The ISO 19157:2013 Geographic information - Data quality defines 18 quality indicators (or sub-classes) in which quality elements can be classified.

Data quality elements recommended by INSPIRE spatial data theme Hydrography

source: INSPIRE Data Specification on Hydrography – Technical Guidelines (pdf, 3.77 MB)

INSPIRE recommendation

Where it is impossible to express the evaluation of a data quality element in a quantitative way, the evaluation of the element should be expressed with a textual statement as a data quality descriptive result.

Quality measures matrices

We provide a matrix of the combinations of indicators, measures and metrics commonly used for each quality class. Both ISO 19157 and ISO 19138 have a list of metrics in the Annex D and share the same identifier (last field in the tables). Actually ISO 19157 supersedes ISO 19138 and contains all metrics in ISO 19138 but adds the new Id. 119 (Physical structure conflicts), Id. 128 (Bias of positions), Id. 159 (Chronological error) and Ids. 101 to 104 (Aggregation Measures).

Quality domain

This section contains the definition of the domain where quality metrics are applied (including link to the schema).

Quality Metrics

Whenever possible, UncertML statistics are used. When needed new metrics are defined here based on uncertml basic types. In some sense QualityML extends UncertML.

XML schemas and examples are available here (for convenience a exact copy of uncertml is included).

Quality metrics sets

This table provides a way to aggregate some quality metrics in a single element that can group them. This is particularly useful when using several related metrics in the ISO 19139 encoding.

Reserved words

This table provides a list of keywords that are useful for the WMS-Q specification.

XML encoding

Here, some examples on how to encode quality metadata in ISO 19139 metadata documents using the qualityML framework and the qualityML URIs are presented. These examples shown only the "gmd:dataQualityInfo", but a couple of complete metadata examples can be found here.

Example using QualityML in an ISO metadata, without extending Record (so, without the need for the qml or uml namespace) for dataset level quality (Recommended: e.g. a GeoNetwork record using ISO 19115:2003 template)

<gmd:MD_Metadata> <gmd:dataQualityInfo> <gmd:DQ_DataQuality> <gmd:report> <gmd:DQ_CompletenessCommission> <gmd:nameOfMeasure> <gco:CharacterString>Excess</gco:CharacterString> </gmd:nameOfMeasure> <gmd:measureIdentification> <gmd:RS_Identifier> <gmd:code> <gmx:Anchor xlink:href="https://www.qualityml.org/1.0/measure/Excess?domain=NonConformance">Excess,NonConformance</gmx:Anchor> </gmd:code> </gmd:RS_Identifier> </gmd:measureIdentification> <gmd:result> <gmd:DQ_QuantitativeResult> <gmd:valueType> <gco:RecordType>Double precision real</gco:RecordType> </gmd:valueType> <gmd:valueUnit/> <gmd:errorStatistic> <gmx:Anchor xlink:href="https://www.qualityml.org/1.0/metrics/Items?subtype=rate&max=100">Items</gmx:Anchor> </gmd:errorStatistic> <gmd:value> <gco:Record>3</gco:Record> </gmd:value> </gmd:DQ_QuantitativeResult> </gmd:result> </gmd:DQ_CompletenessCommission> </gmd:report> </gmd:DQ_DataQuality> </gmd:dataQualityInfo> </gmd:MD_Metadata>

Example using QualityML in an ISO metadata, without extending Record (so, without the need for the qml or uml namespace) for dataset level quality (Recommended: e.g. a GeoNetwork record using ISO 19115:2003 template) with conventional units of measure

<gmd:MD_Metadata> <gmd:dataQualityInfo> <gmd:DQ_DataQuality> <gmd:report> <gmd:DQ_TemporalValidity> <gmd:nameOfMeasure> <gco:CharacterString>Temporal density</gco:CharacterString> </gmd:nameOfMeasure> <gmd:measureIdentification> <gmd:MD_Identifier> <gmd:code> <gmx:Anchor xlink:href="https://www.qualityml.org/1.0/measure/TemporalDensity?domain=Dates">TemporalDensity,Dates</gmx:Anchor> </gmd:code> </gmd:MD_Identifier> </gmd:measureIdentification> <gmd:result> <gmd:DQ_QuantitativeResult> <gmd:valueType> <gco:RecordType>Integer</gco:RecordType> </gmd:valueType> <gmd:valueUnit> <gml:ConventionalUnit gml:id="ConventionalUnit1"> <gml:identifier codeSpace="urn:ogc:def:uom:UCUM">d</gml:identifier> <gml:conversionToPreferredUnit uom="s"> <gml:factor>86400</gml:factor> </gml:conversionToPreferredUnit> </gml:ConventionalUnit> </gmd:valueUnit> <gmd:errorStatistic> <gmx:Anchor xlink:href="https://www.qualityml.org/1.0/metrics/Items?subtype=count&max=100">Items</gmx:Anchor> </gmd:errorStatistic> <gmd:value> <gco:Record>22</gco:Record> </gmd:value> </gmd:DQ_QuantitativeResult> </gmd:result> </gmd:DQ_TemporalValidity> </gmd:report> </gmd:DQ_DataQuality> </gmd:dataQualityInfo> </gmd:MD_Metadata>

Example using UncertML in an ISO metadata extending "Record" (extending XML is not commonly supported by implementations)

<gmd:MD_Metadata> <md:dataQualityInfo> <gmd:MD_DataQuality> <gmd:report> <gmd:DQ_QuantitativeAttributeAccuracy> <gmd:result> <gmd:DQ_QuantitativeResult> <gmd:valueType> <gco:RecordType xlink:href="http://www.uncertml.org/distributions/normal"> Value for vertical DEM accuracy </gco:RecordType> </gmd:valueType> <gmd:valueUnit xlink:href="urn:ogc:def:uom:OGC:1.0:metre"/> <gmd:value> <gco:Record> <un:NormalDistribution> <un:mean>1.2</un:mean> <un:variance>3.0625</un:variance> </un:NormalDistribution> </gco:Record> </gmd:value> </gmd:DQ_QuantitativeResult> </gmd:result> </gmd:DQ_QuantitativeAttributeAccuracy> </gmd:report> </gmd:MD_DataQuality> </md:dataQualityInfo> </gmd:MD_Metadata>

Back to top of page

Example using QualityML in an ISO metadata extending "record" for dataset level quality (extending XML is not commonly supported by implementations)

<gmd:MD_Metadata> <md:dataQualityInfo> <gmd:MD_DataQuality> <gmd:report> <gmd:DQ_CompletenessOmission> <gmd:nameOfMeasure> <gco:CharacterString>Missing</gco:CharacterString> </gmd:nameOfMeasure> <gmd:measureIdentification> <gmd:MD_Identifier> <gmd:code> <gco:CharacterString>https://www.qualityml.org/1.0/measure/Missing</gco:CharacterString> </gmd:code> </gmd:MD_Identifier> </gmd:measureIdentification> <gmd:result> <gmd:DQ_QuantitativeResult> <gmd:valueType> <gco:RecordType xlink:href="https://www.qualityml.org/1.0/metrics/items">Rate of missing items</gco:RecordType> </gmd:valueType> <gmd:valueUnit/> <gmd:value> <gco:Record> <qml:Items> <qml:rate max="100">3</qml:rate> </qml:Items> </gco:Record> </gmd:value> </gmd:DQ_QuantitativeResult> </gmd:result> </gmd:DQ_CompletenessOmission> </gmd:report> </gmd:MD_DataQuality> </md:dataQualityInfo> </gmd:MD_Metadata>

Back to top of page

Example using QualityML in an ISO metadata extending "Record" at pixel level quality (extending XML is not commonly supported by implementations)

<gmd:MD_Metadata> <gmd:distributionInfo> <gmd:MD_Distribution> <gmd:transferOptions> <gmd:MD_DigitalTransferOptions id="TemperatureConfidenceInterval"> <gmd:onLine> <gmd:CI_OnlineResource> <!-- Any service that allow to retrieve the data values or a visualization of them --> <gmd:linkage> <gmd:URL>http://www.server.bob/wms.cgi?REQUEST=GetMap&amp;VERSION=1.3.0&amp;SERVICE=WMS&amp; LAYERS=TemperatureConfidenceInterval&amp;STYLES=</gmd:URL> </gmd:linkage> <gmd:protocol> <gco:CharacterString>serviceType:WebMapService:1.3.0:HTTP-GET</gco:CharacterString> </gmd:protocol> <gmd:name> <gco:CharacterString>TemperatureConfidenceInterval</gco:CharacterString> </gmd:name> </gmd:CI_OnlineResource> </gmd:onLine> </gmd:MD_DigitalTransferOptions> </gmd:transferOptions> </gmd:MD_Distribution> </gmd:distributionInfo> <gmd:dataQualityInfo> <gmd:DQ_DataQuality> <gmd:report> <gmd:DQ_QuantitativeAttributeAccuracy> <gmd:nameOfMeasure> <gco:CharacterString>Quantitative Attribute Correctness</gco:CharacterString> </gmd:nameOfMeasure> <gmd:measureIdentification> <gmd:MD_Identifier> <gmd:code> <gco:CharacterString> https://www.qualityml.org/1.0/measure/QuantitativeAttributeCorrectness </gco:CharacterString> </gmd:code> </gmd:MD_Identifier> </gmd:measureIdentification> <gmd:result> <gmd:DQ_QuantitativeResult> <gmd:valueType> <gco:RecordType xlink:href="https://www.qualityml.org/1.0/metrics/Half-lengthConfidenceInterval"> Half-length Confidence Interval </gco:RecordType> </gmd:valueType> <gmd:valueUnit/> <gmd:value> <gco:Record> <qml:HalfLengthConfidenceInterval level="0.683"> <un:values href="#TemperatureConfidenceInterval"/> </qml:HalfLengthConfidenceInterval> </gco:Record> </gmd:value> </gmd:DQ_QuantitativeResult> </gmd:result> </gmd:DQ_QuantitativeAttributeAccuracy> </gmd:report> </gmd:DQ_DataQuality> </gmd:dataQualityInfo> </gmd:MD_Metadata>

Back to top of page