# Test run on 11:04 - 19.01.2026 with test suite Annex III - Natural risk zones (NZ)

Report URI | Link
Status | Passed, manual checks required
Started | 19/01/2026 10:04:45 GMT
Duration | 2.150 s
Report version | 2.1.0-b181101
Log URI | Link

| Total Count | Skipped | Failed | Warnings | Manual
--- | --- | --- | --- | --- | ---
Test suites | 10 | 0 | 0 | 0 | 3
Test cases | 23 | 0 | 0 | 0 | 4
Assertions | 55 | 0 | 0 | 0 | 6

Level of detail
All details Less information Simplified
Show
All Only failed Only manual

### Parameters

tests_to_execute | .*
files_to_test | .*

### Test object: hazard_area.gml

Files: 1

Size: 1 MB

Associated test object types:

- GML feature collections (A set of XML documents. Each document contains a GML feature collection.)

### Feature statistics

Type | Total Count
--- | ---
all | 21
HazardArea | 21

### Log path: Conformance class: INSPIRE GML encoding

    Testing 21 features
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-2025.1.1/data-encoding/inspire-gml/ets-inspire-gml-bsxets.xml
    Statistics table: 10 ms
    Test Suite 'Conformance class: INSPIRE GML encoding' started
    Test Case 'Basic tests' started
    Test Assertion 'gml.a.1: Errors loading the XML documents': PASSED - 0 ms
    Test Assertion 'gml.a.2: Document root element': PASSED - 0 ms
    Test Assertion 'gml.a.3: Character encoding': NOT_APPLICABLE
    Test Case 'Basic tests' finished: PASSED
    Test Suite 'Conformance class: INSPIRE GML encoding' finished: PASSED

### Log path: Conformance class: Reference systems, General requirements

    Testing 21 features
    Indexing features (parsing errors: 0): 1 ms
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-2025.1.1/data/reference-systems/ets-reference-systems-bsxets.xml
    Statistics table: 10 ms
    Test Suite 'Conformance class: Reference systems, General requirements' started
    Test Case 'Spatial reference systems' started
    Test Assertion 'rs.a.1: Spatial reference systems in feature geometries': PASSED - 13 ms
    Test Assertion 'rs.a.2: Default spatial reference systems in feature collections': PASSED - 0 ms
    Test Case 'Spatial reference systems' finished: PASSED
    Test Case 'Temporal reference systems' started
    Test Assertion 'rs.a.3: Temporal reference systems in features': PASSED - 1 ms
    Test Case 'Temporal reference systems' finished: PASSED
    Test Suite 'Conformance class: Reference systems, General requirements' finished: PASSED

### Log path: Conformance class: Reference systems, Natural Risk Zones

    Testing 21 features
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-2025.1.1/data-nz/nz-rs/ets-nz-rs-bsxets.xml
    Statistics table: 12 ms
    Test Suite 'Conformance class: Reference systems, Natural Risk Zones' started
    Test Case 'Additional theme-specific rules for reference system' started
    Test Assertion 'nz-rs.a.1: Test always passes': PASSED - 0 ms
    Test Case 'Additional theme-specific rules for reference system' finished: PASSED
    Test Suite 'Conformance class: Reference systems, Natural Risk Zones' finished: PASSED

### Log path: Conformance class: Information accessibility, General requirements

    Testing 21 features
    Indexing features (parsing errors: 0): 2 ms
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-2025.1.1/data/information-accessibility/ets-information-accessibility-bsxets.xml
    Statistics table: 11 ms
    Test Suite 'Conformance class: Information accessibility, General requirements' started
    Test Case 'Coordinate reference systems (CRS)' started
    Checking URL: 'http://www.opengis.net/def/crs/EPSG/0/4258'
    Test Assertion 'ia.a.1: CRS publicly accessible via HTTP': PASSED - 13 ms
    Test Case 'Coordinate reference systems (CRS)' finished: PASSED
    Test Suite 'Conformance class: Information accessibility, General requirements' finished: PASSED

### Log path: Conformance class: Information accessibility, Natural Risk Zones

    Testing 21 features
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-2025.1.1/data-nz/nz-ia/ets-nz-ia-bsxets.xml
    Statistics table: 11 ms
    Test Suite 'Conformance class: Information accessibility, Natural Risk Zones' started
    Test Case 'Code lists' started
    Test Assertion 'nz-ia.a.1: ExposedElementCategoryValue': PASSED - 0 ms
    Test Assertion 'nz-ia.a.2: SpecificExposedElementTypeValue': PASSED - 0 ms
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Checking URL: 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood&lang=en&format=jsonc'
    Test Assertion 'nz-ia.a.3: NaturalHazardCategoryValue': PASSED - 530 ms
    Test Assertion 'nz-ia.a.4: SpecificHazardTypeValue': PASSED - 0 ms
    Test Case 'Code lists' finished: PASSED
    Test Case 'Feature references' started
    Test Assertion 'nz-ia.b.1: RiskZone.exposedElement': PASSED - 1 ms
    Test Assertion 'nz-ia.b.2: RiskZone.source': PASSED - 1 ms
    Test Assertion 'nz-ia.b.3: HazardArea.source': PASSED - 1 ms
    Test Assertion 'nz-ia.b.4: ObservedEvent.isMonitoredBy': PASSED - 1 ms
    Test Case 'Feature references' finished: PASSED
    Test Suite 'Conformance class: Information accessibility, Natural Risk Zones' finished: PASSED

### Log path: Conformance class: Data consistency, General requirements

    Testing 21 features
    Indexing features (parsing errors: 0): 3 ms
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-2025.1.1/data/data-consistency/ets-data-consistency-bsxets.xml
    Statistics table: 10 ms
    Test Suite 'Conformance class: Data consistency, General requirements' started
    Test Case 'Version consistency' started
    Test Assertion 'dc.a.1: Version lifespan plausible': PASSED - 0 ms
    Test Assertion 'dc.a.2: Unique identifier persistency': PASSED_MANUAL
    Test Assertion 'dc.a.3: Spatial object type stable': PASSED_MANUAL
    Test Case 'Version consistency' finished: PASSED_MANUAL
    Test Case 'Temporal consistency' started
    Test Assertion 'dc.b.1: Valid time plausible': PASSED - 0 ms
    Test Case 'Temporal consistency' finished: PASSED
    Test Suite 'Conformance class: Data consistency, General requirements' finished: PASSED_MANUAL

### Log path: Conformance class: Data consistency, Natural Risk Zones

    Testing 21 features
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-2025.1.1/data-nz/nz-dc/ets-nz-dc-bsxets.xml
    Statistics table: 10 ms
    Test Suite 'Conformance class: Data consistency, Natural Risk Zones' started
    Test Case 'Additional theme-specific rules for data consistency' started
    Test Assertion 'nz-dc.a.1: Test always passes': PASSED - 0 ms
    Test Case 'Additional theme-specific rules for data consistency' finished: PASSED
    Test Suite 'Conformance class: Data consistency, Natural Risk Zones' finished: PASSED

### Log path: Conformance class: INSPIRE GML application schemas, General requirements

    Testing 21 features
    Indexing features (parsing errors: 0): 2 ms
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-2025.1.1/data/schemas/ets-schemas-bsxets.xml
    Statistics table: 10 ms
    Test Suite 'Conformance class: INSPIRE GML application schemas, General requirements' started
    Test Case 'Schema' started
    Test Assertion 'gmlas.a.1: Mapping of source data to INSPIRE': PASSED_MANUAL
    Test Assertion 'gmlas.a.2: Modelling of additional spatial object types': PASSED_MANUAL
    Test Case 'Schema' finished: PASSED_MANUAL
    Test Case 'Validation against declared schema' started
    Test Assertion 'gmlas.b.1: xsi:schemaLocation attribute': PASSED - 0 ms
    Validating hazard_area.gml
    Duration: 521 ms. Errors: 0.
    Test Assertion 'gmlas.b.2: validate XML documents against declared schema': PASSED - 534 ms
    Test Case 'Validation against declared schema' finished: PASSED
    Test Case 'GML model' started
    Test Assertion 'gmlas.c.1: Consistency with the GML model': PASSED - 1 ms
    Test Assertion 'gmlas.c.2: nilReason attributes require xsi:nil=true': PASSED - 1 ms
    Test Assertion 'gmlas.c.3: nilReason values': PASSED - 0 ms
    Test Case 'GML model' finished: PASSED
    Test Case 'Simple features' started
    Test Assertion 'gmlas.d.1: No spatial topology objects': PASSED - 1 ms
    Test Assertion 'gmlas.d.2: No non-linear interpolation': PASSED - 0 ms
    Test Assertion 'gmlas.d.3: Surface geometry elements': PASSED - 1 ms
    Test Assertion 'gmlas.d.4: No non-planar interpolation': PASSED - 0 ms
    Test Assertion 'gmlas.d.5: Geometry elements': PASSED - 1 ms
    Test Assertion 'gmlas.d.6: Point coordinates in gml:pos': PASSED - 0 ms
    Test Assertion 'gmlas.d.7: Curve/Surface coordinates in gml:posList': PASSED - 1 ms
    Test Assertion 'gmlas.d.8: No array property elements': PASSED - 0 ms
    Test Assertion 'gmlas.d.9: 1, 2 or 3 coordinate dimensions': PASSED - 0 ms
    Test Assertion 'gmlas.d.10: Validate geometries (1)': PASSED - 641 ms
    Test Assertion 'gmlas.d.11: Validate geometries (2)': PASSED - 0 ms
    Test Case 'Simple features' finished: PASSED
    Test Case 'Code list values in basic data types' started
    Test Assertion 'gmlas.e.1: GrammaticalNumber attributes': PASSED - 18 ms
    Test Assertion 'gmlas.e.2: GrammaticalGender attributes': PASSED - 7 ms
    Test Assertion 'gmlas.e.3: NameStatus attributes': PASSED - 7 ms
    Test Assertion 'gmlas.e.4: Nativeness attributes': PASSED - 8 ms
    Test Case 'Code list values in basic data types' finished: PASSED
    Test Case 'Constraints' started
    Test Assertion 'gmlas.f.1: At least one of the two attributes pronunciationSoundLink and pronunciationIPA shall not be void': PASSED - 0 ms
    Test Case 'Constraints' finished: PASSED
    Test Suite 'Conformance class: INSPIRE GML application schemas, General requirements' finished: PASSED_MANUAL

### Log path: Conformance class: GML application schemas, Natural Risk Zones

    Testing 21 features
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-2025.1.1/data-nz/nz-gml/ets-nz-gml-bsxets.xml
    Statistics table: 13 ms
    Test Suite 'Conformance class: GML application schemas, Natural Risk Zones' started
    Test Case 'Basic test' started
    Test Assertion 'nz-gml.a.1: Feature in dataset': PASSED - 1 ms
    Test Case 'Basic test' finished: PASSED
    Test Case 'Validation against INSPIRE official schema' started
    Validating hazard_area.gml
    Duration: 286 ms. Errors: 0.
    Test Assertion 'nz-gml.b.1: validate XML documents against official schema': PASSED - 300 ms
    Test Case 'Validation against INSPIRE official schema' finished: PASSED
    Test Suite 'Conformance class: GML application schemas, Natural Risk Zones' finished: PASSED

### Log path: Conformance class: Application schema, Natural Risk Zones

    Testing 21 features
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-2025.1.1/data-nz/nz-as/ets-nz-as-bsxets.xml
    Statistics table: 10 ms
    Test Suite 'Conformance class: Application schema, Natural Risk Zones' started
    Test Case 'Code list values' started
    Test Assertion 'nz-as.a.1: hazardCategory': PASSED_MANUAL - 38 ms
    Test Assertion 'nz-as.a.2: exposedElementCategory': PASSED - 28 ms
    Test Case 'Code list values' finished: PASSED_MANUAL
    Test Case 'Constraints' started
    Test Assertion 'nz-as.b.1: sourceOfSpatialRepresentation': PASSED - 0 ms
    Test Assertion 'nz-as.b.2: LevelOrIntensity': PASSED - 0 ms
    Test Assertion 'nz-as.b.3: LikelihoodOfOccurrence': PASSED - 1 ms
    Test Case 'Constraints' finished: PASSED
    Test Case 'domainSet Constraints' started
    Test Assertion 'nz-as.c.1: domainSet': PASSED - 0 ms
    Test Case 'domainSet Constraints' finished: PASSED
    Test Case 'rangeSet Constraints' started
    Test Assertion 'nz-as.d.1: rangeSet': PASSED_MANUAL
    Test Case 'rangeSet Constraints' finished: PASSED_MANUAL
    Test Case 'Risk zone theme-specific requirements' started
    Test Assertion 'nz-as.e.1: RiskZone.source': PASSED - 0 ms
    Test Assertion 'nz-as.e.2: RiskZone.exposedElement': PASSED - 0 ms
    Test Case 'Risk zone theme-specific requirements' finished: PASSED
    Test Suite 'Conformance class: Application schema, Natural Risk Zones' finished: PASSED_MANUAL

## Conformance class: INSPIRE GML encoding
1

This test suite examines GML documents against basic requirements for the GML encoding for spatial data sets in INSPIRE. This only covers application-schema-independent, generic requirements. Requirements related to specific application schemas are part of conformance classes with a dependency on this conformance class.
This is a draft version. It has limitations and is expected to contain errors. Please report any issues or problems in GitHub.
Known limitations are documented in the description of the applicable test case or test assertion.
Source: Conformance Class 'INSPIRE GML encoding'
Pre-requisite conformance classes:

- Conformance Class 'GML 3.2 documents [OGC]'

Status | Passed
Duration | 0.001 s
Test suite ID | EID545f9e49-009b-4114-9333-7ca26413b5d4
Author | interactive instruments GmbH
Date created | 15/08/2016 00:00:00 GMT
Version | 0.2.2
Last editor | Consosrtium Bilbomatica y Guadaltel
Last updated | 15/05/2024 16:00:00 GMT
Reference | Link
Hash | CBF29CE484222325

### Basic tests
3
click to expand contents

Verify that all documents contain GML features and use the expected character encoding.

Status | Passed
Duration | 0.001 s
Test case ID | EIDf66872d4-3a1f-4581-a501-94200219bf13

##### gml.a.1: Errors loading the XML documents click to expand contents

Report errors that occurred during loading the documents in the test object. A typical example is an XML document that is not well-formed and therefore cannot be processed.

Status | Passed
Duration | 0.001 s
Assertion ID | EIDcab35f1a-6292-44b9-ae2c-9ec62fc0f4b6
Assertion URI | Link

Expression: if (not($validationErrors)) then 'PASSED' else ('FAILED', for $error in $validationErrors return (local:addMessage('TR.validationError', map { 'text': $error })))

##### gml.a.2: Document root element click to expand contents

Check for each XML document that the root element is a GML feature or a GML feature collection.
For feature collections the following root elements are recognised:

- wfs:FeatureCollection (WFS 2.0),
- gml:FeatureCollection (GML 3.2),
- base:SpatialDataSet (INSPIRE Base 3.2 or 3.3).

This test is a pre-condition to identify the INSPIRE features in the test object.
Relevant requirements and recommendations:

- Recommendation 11 - For the exchange of spatial objects in GML, an XML document with a FeatureCollection root element from ISO 19142:2010 (WFS 2.0) should be used.

Known limitations:

- Currently only feature collections are recognized as the test engine BaseX is not schema-aware. A new extension function would be required to identify all feature elements.

Source: Abstract Test Case 'Basic test', INSPIRE Data Specification Template, (A.6.1), A.9.5

Status | Passed
Duration | 0.001 s
Assertion ID | EID928d8204-3015-4811-82fd-f4779b35385b
Assertion URI | Link

Expression:(: Potential TODO: extension to identify all feature elements :) let $filesWithErrors := $db[not(wfs:FeatureCollection or gml:FeatureCollection or base32:SpatialDataSet or base:SpatialDataSet or gml:AbstractFeature)][position() le $limitErrors] return (if ($filesWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.filesWithErrors', count($filesWithErrors)), for $file in $filesWithErrors order by local:filename($file) let $root := $file/element() return local:addMessage('TR.incorrectRoot', map { 'filename': local:filename($root), 'elementName': local-name($root), 'namespace': namespace-uri($root) }))

##### gml.a.3: Character encoding click to expand contents

This test ensures that all linguistic texts can be encoded consistently and in any language – which in turn simplifies the processing of data. The use of UTF-8 also aligns with common practice and is the default character encoding for XML documents.
Inspect each XML document. If an XML declaration exists, verify that the encoding attribute has the value "UTF-8" or that the attribute is missing.
Relevant requirements:

- Requirement 12 - XML documents shall be required to be encoded using UTF-8 as character encoding.

Known limitations:

- Currently the test is disabled as the test needs an BaseX extension - the XML declaration is NOT part of the node set in XML databases.

Source: Abstract Test Case 'Character encoding', INSPIRE Data Specification Template, (A.6.1), A.9.5

Status | Not applicable
Duration | 0.001 s
Assertion ID | EIDbdfdccf3-8c0d-489c-ad96-6acb7e017009
Assertion URI | Link

Expression:() (: TODO, requires extension to BaseX :)

## Conformance class: Reference systems, General requirements
2

This test suite examines a data set against the basic requirements related to reference systems (spatial and temporal, units of measurement). This test suite only examines requirements that are not specific to a data theme. Additional test cases will be defined per data theme, where needed.
This is a draft version. It has limitations and is expected to contain errors. Please report any issues or problems in GitHub.
Known limitations are documented in the description of the applicable test case or test assertion. There is a general limitation in all assertions that extensions in additional application schemas are only supported, if the unqualified name of the feature type in the extension is the same as the name of the feature type in the INSPIRE application schema.
Source: Conformance Class 'Reference systems'
Pre-requisite conformance classes:

- Conformance Class 'INSPIRE GML application schemas'

Status | Passed
Duration | 0.014 s
Test suite ID | EID63f586f0-080c-493b-8ca2-9919427440cc
Author | interactive instruments GmbH
Date created | 15/08/2016 00:00:00 GMT
Version | 0.2.4
Last editor | Consortium Bilbomatica y Guadaltel
Last updated | 15/05/2024 16:00:00 GMT
Reference | Link
Hash | CBF29CE484222325

### Spatial reference systems
2
click to expand contents

Verify that all references to spatial coordinate reference systems are using one of the http URIs approved for use in INSPIRE data sets.

Status | Passed
Duration | 0.013 s
Test case ID | EID3f6ab9e4-f76b-4043-9e0d-498293f41972

##### rs.a.1: Spatial reference systems in feature geometries click to expand contents

Verify that all references to coordinate reference systems in the features (srsName) use one of the approved CRS URIs listed in TG requirement 2.
Relevant requirements:

- IR Requirement Annex II Section 1.2: Datum for three-dimensional and two-dimensional coordinate reference systems. For the three-dimensional and two-dimensional coordinate reference systems and the horizontal component of compound coordinate reference systems used for making spatial data sets available, the datum shall be the datum of the European Terrestrial Reference System 1989 (ETRS89) in areas within its geographical scope, or the datum of the International Terrestrial Reference System (ITRS) or other geodetic coordinate reference systems compliant with ITRS in areas that are outside the geographical scope of ETRS89. Compliant with the ITRS means that the system definition is based on the definition of the ITRS and there is a well documented relationship between both systems, according to EN ISO 19111.
- IR Requirement Annex II Section 1.3: Datum for three-dimensional and two-dimensional coordinate reference systems. Spatial data sets shall be made available using at least one of the coordinate reference systems:
  - Two-dimensional geodetic coordinates (latitude and longitude) based on a datum specified in 1.2 and using the parameters of the GRS80 ellipsoid.
  - Plane coordinates using the ETRS89 Lambert Azimuthal Equal Area coordinate reference system.
  - Plane coordinates using the ETRS89 Lambert Conformal Conic coordinate reference system.
  - Plane coordinates using the ETRS89 Transverse Mercator coordinate reference system.
  - Compound coordinate reference system using one of the systems above plus, for the vertical component, one of the following coordinate reference systems shall be used:
  - For the vertical component on land, the European Vertical Reference System (EVRS) shall be used to express gravity-related heights within its geographical scope. Other vertical reference systems related to the Earth gravity field shall be used to express gravity-related heights in areas that are outside the geographical scope of EVRS.
  - For the vertical component in the free atmosphere, barometric pressure, converted to height using ISO 2533:1975 International Standard Atmosphere, or other linear or parametric reference systems shall be used. Where other parametric reference systems are used, these shall be described in an accessible reference using EN ISO 19111-2:2012.
  - For the vertical component in marine areas where there is an appreciable tidal range (tidal waters), the Lowest Astronomical Tide (LAT) shall be used as the reference surface.
  - For the vertical component in marine areas without an appreciable tidal range, in open oceans and effectively in waters that are deeper than 200 meters, the Mean Sea Level (MSL) or a well- defined reference level close to the MSL shall be used as the reference surface.
  - Three-dimensional Cartesian coordinates based on a datum specified in 1.2 and using the parameters of the Geodetic Reference System 1980 (GRS80) ellipsoid.
  - Three-dimensional geodetic coordinates (latitude, longitude and ellipsoidal height) based on a datum specified in 1.2 and using the parameters of the GRS80 ellipsoid.
  - For regions outside of continental Europe, Member States may define suitable coordinate reference systems. The geodetic codes and parameters needed to describe these coordinate reference systems and to allow conversion and transformation operations shall be documented and an identifier shall be created, according to EN ISO 19111 and ISO 19127.
- IR Requirement Annex II Section 1.5 (1): Coordinate Reference System Identifiers. Coordinate reference system parameters and identifiers shall be managed in one or several common registers for coordinate reference systems.
- IR Requirement Annex II Section 1.5 (2): Coordinate Reference System Identifiers. Only identifiers contained in a common register shall be used for referring to the coordinate reference systems listed in this Section.
- TG Requirement 2: The list of other coordinate reference system identifiers approved for use in INSPIRE is available in the following table: https://github.com/INSPIRE-MIF/helpdesk/blob/main/crs.md

Source: Abstract Test Case 'Spatial reference systems', INSPIRE Data Specification Template, A.2.1, A.2.2, A6.2, A.6.3, A.9.1

Status | Passed
Duration | 0.013 s
Assertion ID | EIDdf2eceaf-f406-465f-80c3-61369d69e64f
Assertion URI | Link

Expression: let $codelisturl := 'https://inspire.ec.europa.eu/crs/crs.en.xml' let $crsuris:= fn:doc($codelisturl)/*:register/*:containeditems/*:crs/*:crsidentifier/@id let $featuresWithErrors := $features[.//@srsName[not(. = $crsuris)]][position() le $limitErrors] return (if ($featuresWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id let $srsnames := $feature//@srsName[not(. = $crsuris)] return for $srsname in $srsnames return local:addMessage('TR.unknownCRS1', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id), 'crs': string($srsname) }))

##### rs.a.2: Default spatial reference systems in feature collections click to expand contents

Verify that all references to coordinate reference systems in the bounding box of the feature collection (srsName) use one of the CRS URIs listed in TG requirement 2.
Relevant requirements:

- IR Requirement Annex II Section 1.2: Datum for three-dimensional and two-dimensional coordinate reference systems. For the three-dimensional and two-dimensional coordinate reference systems and the horizontal component of compound coordinate reference systems used for making spatial data sets available, the datum shall be the datum of the European Terrestrial Reference System 1989 (ETRS89) in areas within its geographical scope, or the datum of the International Terrestrial Reference System (ITRS) or other geodetic coordinate reference systems compliant with ITRS in areas that are outside the geographical scope of ETRS89. Compliant with the ITRS means that the system definition is based on the definition of the ITRS and there is a well documented relationship between both systems, according to EN ISO 19111.
- IR Requirement Annex II Section 1.3: Datum for three-dimensional and two-dimensional coordinate reference systems. Spatial data sets shall be made available using at least one of the coordinate reference systems:
  - Two-dimensional geodetic coordinates (latitude and longitude) based on a datum specified in 1.2 and using the parameters of the GRS80 ellipsoid.
  - Plane coordinates using the ETRS89 Lambert Azimuthal Equal Area coordinate reference system.
  - Plane coordinates using the ETRS89 Lambert Conformal Conic coordinate reference system.
  - Plane coordinates using the ETRS89 Transverse Mercator coordinate reference system.
  - Compound coordinate reference system using one of the systems above plus, for the vertical component, one of the following coordinate reference systems shall be used:
  - For the vertical component on land, the European Vertical Reference System (EVRS) shall be used to express gravity-related heights within its geographical scope. Other vertical reference systems related to the Earth gravity field shall be used to express gravity-related heights in areas that are outside the geographical scope of EVRS.
  - For the vertical component in the free atmosphere, barometric pressure, converted to height using ISO 2533:1975 International Standard Atmosphere, or other linear or parametric reference systems shall be used. Where other parametric reference systems are used, these shall be described in an accessible reference using EN ISO 19111-2:2012.
  - For the vertical component in marine areas where there is an appreciable tidal range (tidal waters), the Lowest Astronomical Tide (LAT) shall be used as the reference surface.
  - For the vertical component in marine areas without an appreciable tidal range, in open oceans and effectively in waters that are deeper than 200 meters, the Mean Sea Level (MSL) or a well- defined reference level close to the MSL shall be used as the reference surface.
  - Three-dimensional Cartesian coordinates based on a datum specified in 1.2 and using the parameters of the Geodetic Reference System 1980 (GRS80) ellipsoid.
  - Three-dimensional geodetic coordinates (latitude, longitude and ellipsoidal height) based on a datum specified in 1.2 and using the parameters of the GRS80 ellipsoid.
  - For regions outside of continental Europe, Member States may define suitable coordinate reference systems. The geodetic codes and parameters needed to describe these coordinate reference systems and to allow conversion and transformation operations shall be documented and an identifier shall be created, according to EN ISO 19111 and ISO 19127.
- IR Requirement Annex II Section 1.5 (1): Coordinate Reference System Identifiers. Coordinate reference system parameters and identifiers shall be managed in one or several common registers for coordinate reference systems.
- IR Requirement Annex II Section 1.5 (2): Coordinate Reference System Identifiers. Only identifiers contained in a common register shall be used for referring to the coordinate reference systems listed in this Section.
- TG Requirement 2: The list of other coordinate reference system identifiers approved for use in INSPIRE is available in the following table: https://github.com/INSPIRE-MIF/helpdesk/blob/main/crs.md

Source: Abstract Test Case 'Spatial reference systems', INSPIRE Data Specification Template, A.2.1, A.2.2, A.6.2, A.6.3, A.9.1

Status | Passed
Duration | 0.001 s
Assertion ID | EID5aa4e48c-7967-49a4-bff4-cda0188a2a82
Assertion URI | Link

Expression: let $codelisturl := 'https://inspire.ec.europa.eu/crs/crs.en.xml' let $crsuris:= fn:doc($codelisturl)/*:register/*:containeditems/*:crs/*:crsidentifier/@id let $filesWithErrors := $db[*/wfs:boundedBy/*/@srsName[not(. = $crsuris)] or */gml:boundedBy/*/@srsName[not(. = $crsuris)]][position() le $limitErrors] return (if ($filesWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.filesWithErrors', count($filesWithErrors)), for $file in $filesWithErrors order by local:filename($file) let $root := $file/element() let $srsnames := $file/*/*[local-name() = 'boundedBy']/*/@srsName[not(. = $crsuris)] return for $srsname in $srsnames return local:addMessage('TR.unknownCRS2', map { 'filename': local:filename($root), 'crs': string($srsname) }))

### Temporal reference systems
1
click to expand contents

Verify that all references to temporal coordinate reference systems are using one of the http URIs approved for use in INSPIRE data sets.

Status | Passed
Duration | 0.001 s
Test case ID | EID9d1677e1-e2e3-4776-845c-1cce60649881

##### rs.a.3: Temporal reference systems in features click to expand contents

Verify that all references to coordinate reference systems in the features use one of the approved http URIs, i.e. check that all references to coordinate reference systems in the frame XML attributes in the features use the URI 'http://www.opengis.net/def/trs/ISO-8601/'.
Note that all values in the XML Schema date/time types is automatically in the required reference system.
Relevant requirements:

- IR Requirement Article 11 (1): Temporal Reference Systems. The default temporal reference system referred to in point 5 of part B of the Annex to Commission Regulation (EC) No 1205/2008 (14) shall be used, unless other temporal reference systems are specified for a specific spatial data theme in Annex II.

Source: Abstract Test Case 'Temporal reference systems', INSPIRE Data Specification Template, A.2.5

Status | Passed
Duration | 0.001 s
Assertion ID | EID11310d1c-24e5-45da-9b50-b04f82200ffe
Assertion URI | Link

Expression: let $crsuris := ( 'http://www.opengis.net/def/trs/ISO-8601' ) let $featuresWithErrors := $features[.//gml:TimeInstance/@frame[not(. = $crsuris)] | .//gml:TimeInstance/gml:timePosition/@frame[not(. = $crsuris)] | .//gml:TimePeriod/@frame[not(. = $crsuris)] | .//gml:TimePeriod/gml:beginPosition/@frame[not(. = $crsuris)] | .//gml:TimePeriod/gml:endPosition/@frame[not(. = $crsuris)]][position() le $limitErrors] return (if ($featuresWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id let $frames := $feature//@frame[not(. = $crsuris)] return for $frame in $frames return local:addMessage('TR.unknownTRS', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id), 'trs': string($frame) }))

## Conformance class: Reference systems, Natural Risk Zones
1

This test suite examines a data set against the theme-specific requirements related to reference systems.
This is a draft version. It has limitations and is expected to contain errors. Please report any issues or problems in GitHub.
Known limitations are documented in the description of the applicable test case or test assertion. There is a general limitation in all assertions that extensions in additional application schemas are only supported, if the unqualified name of the feature type in the extension is the same as the name of the feature type in the INSPIRE application schema.
Source: Conformance Class 'Reference systems, Natural Risk Zones'
Pre-requisite conformance classes:

- Conformance Class 'Reference systems'

Status | Passed
Duration | 0.001 s
Test suite ID | EIDf62fe181-52f2-4212-b925-fc7ac8bfb2a1
Author | Consortium Bilbomatica, Guadaltel y Geograma
Date created | 30/07/2020 13:30:00 GMT
Version | 0.1.0
Last editor | Consortium Bilbomatica, Guadaltel y Geograma
Last updated | 03/08/2020 15:00:00 GMT
Reference | Link
Hash | CBF29CE484222325

### Additional theme-specific rules for reference system
1
click to expand contents

Additional theme-specific rules for reference system. Currently none exists, so this is a placeholder.

Status | Passed
Duration | 0.001 s
Test case ID | EID942b30b2-273d-43a3-9ea3-37f3260abb38

##### nz-rs.a.1: Test always passes click to expand contents

This conformance class includes no assertions beyond the ones referenced by dependencies, i.e. those that apply across the data themes. This assertion will always pass and is included for technical reasons.

Status | Passed
Duration | 0.001 s
Assertion ID | EID695f0325-5684-446f-8d11-62e0683e5ac5
Assertion URI | Link

## Conformance class: Information accessibility, General requirements
1

This test suite examines a data set against the basic requirements related to the accessibility of resources referenced by the data. This test suite only examines requirements that are not specific to a data theme. Additional test cases will be defined per data theme, where needed.
This is a draft version. It has limitations and is expected to contain errors. Please report any issues or problems in GitHub.
Known limitations are documented in the description of the applicable test case or test assertion. There is a general limitation in all assertions that extensions in additional application schemas are only supported, if the unqualified name of the feature type in the extension is the same as the name of the feature type in the INSPIRE application schema.
Source: Conformance Class 'Information accessibility'
Pre-requisite conformance classes:

- Conformance Class 'INSPIRE GML application schemas'

Status | Passed
Duration | 0.013 s
Test suite ID | EID499937ea-0590-42d2-bd7a-1cafff35ecdb
Author | interactive instruments GmbH
Date created | 15/08/2016 00:00:00 GMT
Version | 0.2.3
Last editor | Consortium Bilbomatica y Guadaltel
Last updated | 15/05/2024 16:00:00 GMT
Reference | Link
Hash | CBF29CE484222325

### Coordinate reference systems (CRS)
1
click to expand contents

Verify that referenced coordinate reference systems can be accessed.

Status | Passed
Duration | 0.013 s
Test case ID | EIDf27df7ae-e6de-4d30-b189-230850ec78a2

##### ia.a.1: CRS publicly accessible via HTTP click to expand contents

Verify that any coordinate reference system is publicly accessible via HTTP, i.e. inspect links to coordinate reference systems. Verify that a HTTP GET request to the URI of each unique link (srsName, frame) retrieves a document.
Relevant requirements:

- IR Requirement Article 10 (3): Life-cycle of Spatial Objects. Where the attributes beginLifespanVersion and endLifespanVersion are used, the value of endLifespanVersion shall not be before the value of beginLifespanVersion.

Source: Abstract Test Case 'CRS', INSPIRE Data Specification Template, A.6.2

Status | Passed
Duration | 0.013 s
Assertion ID | EID0bb601c0-8bde-4cbf-972a-aa4425669649
Assertion URI | Link

Expression: let $uris := distinct-values(($features//@srsName,$features//@frame)) let $urimap := local:check-resource-uris($uris, 30, true()) let $errorregex := '(^notHTTP$|^idNotFound$|^EXCEPTION|^\d{3}$)' let $featuresWithErrors := $features[.//@srsName[matches(map:get($urimap,.),$errorregex)] or .//@frame[matches(map:get($urimap,.),$errorregex)]][position() le $limitErrors] return (if ($featuresWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id let $featureuris := ($feature//@srsName[matches(map:get($urimap,.),$errorregex)]|$feature//@frame[matches(map:get($urimap,.),$errorregex)]) return for $uri in $featureuris return local:addMessage('TR.brokenLinkCRS', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id), 'rsid': string($uri) }))

## Conformance class: Information accessibility, Natural Risk Zones
2

This test suite examines requirements associated with the Information accessibility.
This is a draft version. It has limitations and is expected to contain errors. Please report any issues or problems in GitHub.
Known limitations are documented in the description of the applicable test case or test assertion. There is a general limitation in all assertions that extensions in additional application schemas are only supported, if the unqualified name of the feature type in the extension is the same as the name of the feature type in the INSPIRE application schema.
Source: Conformance Class 'Information accessibility, Natural Risk Zones'
Pre-requisite conformance classes:

- Conformance class: 'Information accessibility'

Status | Passed
Duration | 0.534 s
Test suite ID | EIDe3d08307-45ad-4797-9074-ced0147797b5
Author | Consortium Bilbomatica, Guadaltel y Geograma
Date created | 03/08/2020 14:30:00 GMT
Version | 0.1.3
Last editor | Consortium Bilbomatica y Guadaltel
Last updated | 14/05/2024 16:30:00 GMT
Reference | Link
Hash | CBF29CE484222325

### Code lists
4
click to expand contents

Verify that code lists extensions can be accessed.

Status | Passed
Duration | 0.530 s
Test case ID | EID78a8def0-0848-461f-85fa-52dc0ef6d552

##### nz-ia.a.1: ExposedElementCategoryValue click to expand contents

Check that any code list extensions are publicly accessible via HTTP, i.e. inspect extensible code list vanzed property elements. If a reference (@xlink:href) has a value that does not start with http://inspire.ec.europa.eu/codelist/, verify that a HTTP GET request to the URI retrieves a document. Otherwise report brokenLink.
This data theme currently has the following extensible code list:

- ExposedElementCategoryValue : http://inspire.ec.europa.eu/codelist/ExposedElementCategoryValue

Source: Abstract Test Case 'Code List', INSPIRE Data Specification on Natural Risk Zones, A.6.3

Status | Passed
Duration | 0.001 s
Assertion ID | EID946853c9-f945-4b3a-982e-f23590f2d2e8
Assertion URI | Link

Expression: let $features_selected := $features[self::nz-core:ExposedElement|self::nz-core:ExposedElementCoverage] let $property_string := 'ExposedElementCategoryValue' let $messages := let $this_features := for $this_feature in $features_selected return if (name($this_feature) = 'nz-core:ExposedElement') then $this_feature/nz-core:assessmentOfVulnerability else $this_feature for $actual_feature in $this_features let $feature := if (name($actual_feature) = 'nz-core:assessmentOfVulnerability') then $actual_feature/nz-core:VulnerabilityAssessment else $actual_feature let $urls := for $x in $feature/nz-core:typeOfElement/nz-core:ExposedElementClassification/nz-core:exposedElementCategory/@xlink:href return if (starts-with($x, 'http://inspire.ec.europa.eu/codelist/')) then () else if (starts-with($x, 'https://inspire.ec.europa.eu/codelist/')) then concat('https://inspire.ec.europa.eu/registry/rest?uri=',$x,codepoints-to-string(38),'lang=en', codepoints-to-string(38),'format=jsonc') else $x let $map := local:check-resource-uris($urls, 30, true()) let $invalid_urls := for $href in $urls let $url := string($href) let $validuri := map:get($map, $url) return if ($validuri = 'notHTTP' or starts-with($validuri, 'EXCEPTION') or $validuri = 'idNotFound' or matches($validuri,'^\d{3}$')) then $url else () let $invalid_urls_orig := for $url in $invalid_urls return if (starts-with($url, 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/')) then tokenize(substring($url,48), codepoints-to-string(38))[1] else $url return if (not(exists($feature/nz-core:typeOfElement/nz-core:ExposedElementClassification))) then () else if (not($feature/nz-core:typeOfElement/nz-core:ExposedElementClassification/nz-core:exposedElementCategory)) then local:addMessage('TR.missingElementNaturalRiskZone', map {'filename': local:filename($actual_feature), 'featureType':local-name($actual_feature/..), 'gmlid': string($actual_feature/../@*:id), 'property':'nz-core:exposedElementCategory'}) else if (count($feature/nz-core:typeOfElement/nz-core:ExposedElementClassification/nz-core:exposedElementCategory) != 1) then local:addMessage('TR.wrongMultiplicitySpatialRepresentation', map {'filename': local:filename($actual_feature), 'id': string($actual_feature/../@*:id), 'element': 'nz-core:exposedElementCategory'}) else if (not(exists($feature/nz-core:typeOfElement/nz-core:ExposedElementClassification/nz-core:exposedElementCategory/@xlink:href))) then local:addMessage('TR.missingAttributeRiskZone', map {'filename': local:filename($actual_feature), 'featureType':local-name($actual_feature/..), 'gmlid': string($actual_feature/../@*:id), 'property': $property_string, 'attribute': 'xlink:href'}) else if (count($invalid_urls_orig) > 0) then local:addMessage('TR.brokenLinkNaturalRiskZones', map {'filename': local:filename($actual_feature), 'featureType':local-name($actual_feature/..), 'gmlid': string($actual_feature/../@*:id), 'property': $property_string, 'value': string-join($invalid_urls_orig, ',')}) else () return (if ($messages) then 'FAILED' else 'PASSED', local:error-statistics('TR.recordsWithErrors', count(fn:distinct-values($messages//etf:argument[@token='id']/text()))), $messages)

##### nz-ia.a.2: SpecificExposedElementTypeValue click to expand contents

Check that any code list extensions are publicly accessible via HTTP, i.e. inspect extensible code list vanzed property elements. If a reference (@xlink:href) has a value that does not start with http://inspire.ec.europa.eu/codelist/, verify that a HTTP GET request to the URI retrieves a document. Otherwise report brokenLink.
This data theme currently has the following extensible code list:

- SpecificExposedElementTypeValue : http://inspire.ec.europa.eu/codelist/SpecificExposedElementTypeValue

Source: Abstract Test Case 'Code List', INSPIRE Data Specification on Natural Risk Zones, A.6.3

Status | Passed
Duration | 0.001 s
Assertion ID | EID19a06a7c-87a9-45eb-846a-b7ad0db0dbb6
Assertion URI | Link

Expression: let $property_string := 'SpecificExposedElementTypeValue' let $features_selectedee := $features[self::nz-core:ExposedElement] let $messagesee := for $feature in $features_selectedee/nz-core:assessmentOfVulnerability/nz-core:VulnerabilityAssessment/nz-core:typeOfElement/nz-core:ExposedElementClassification let $envDom := $feature/nz-core:specificExposedElementType let $urls := for $x in $envDom/@xlink:href return if (starts-with($x, 'http://inspire.ec.europa.eu/codelist/')) then () else if (starts-with($x, 'https://inspire.ec.europa.eu/codelist/')) then concat('https://inspire.ec.europa.eu/registry/rest?uri=',$x,codepoints-to-string(38),'lang=en', codepoints-to-string(38),'format=jsonc') else $x let $map := local:check-resource-uris($urls, 30, true()) let $invalid_urls := for $href in $urls let $url := string($href) let $validuri := map:get($map, $url) return if ($validuri = 'notHTTP' or starts-with($validuri, 'EXCEPTION') or $validuri = 'idNotFound' or matches($validuri,'^\d{3}$')) then $url else () let $invalid_urls_orig := for $url in $invalid_urls return if (starts-with($url, 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/')) then tokenize(substring($url,48), codepoints-to-string(38))[1] else $url return if (not(exists($feature/nz-core:specificExposedElementType))) then local:addMessage('TR.missingElementNaturalRiskZone', map {'filename': local:filename($feature/../../../..),'featureType':local-name($feature/../../../..), 'gmlid':string($feature/../../../../@*:id), 'property':'nz-core:specificExposedElementType'}) else if (count($feature/nz-core:specificExposedElementType) != 1) then local:addMessage('TR.wrongMultiplicitySpatialRepresentation', map {'filename': local:filename($feature/../../../..), 'id': string($feature/../../../../@*:id), 'element': 'nz-core:specificExposedElementType'}) else if(count($invalid_urls_orig) > 0) then local:addMessage('TR.brokenLinkNaturalRiskZones', map {'filename': local:filename($feature/../../../..), 'featureType':local-name($feature/../../../..), 'gmlid': string($feature/../../../../@*:id), 'property': $property_string, 'value': string-join($invalid_urls_orig, ',')}) else () let $features_selectedec := $features[self::nz-core:ExposedElementCoverage] let $messagesec := for $feature in $features_selectedec/nz-core:typeOfElement/nz-core:ExposedElementClassification let $envDom := $feature/nz-core:specificExposedElementType let $urls := for $x in $envDom/@xlink:href return if (starts-with($x, 'http://inspire.ec.europa.eu/codelist/')) then () else if (starts-with($x, 'https://inspire.ec.europa.eu/codelist/')) then concat('https://inspire.ec.europa.eu/registry/rest?uri=',$x,codepoints-to-string(38),'lang=en', codepoints-to-string(38),'format=jsonc') else $x let $map := local:check-resource-uris($urls, 30, true()) let $invalid_urls := for $href in $urls let $url := string($href) let $validuri := map:get($map, $url) return if ($validuri = 'notHTTP' or starts-with($validuri, 'EXCEPTION') or $validuri = 'idNotFound' or matches($validuri,'^\d{3}$')) then $url else () let $invalid_urls_orig := for $url in $invalid_urls return if (starts-with($url, 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/')) then tokenize(substring($url,48), codepoints-to-string(38))[1] else $url return if (not(exists($feature/nz-core:specificExposedElementType))) then local:addMessage('TR.missingElementNaturalRiskZone', map {'filename': local:filename($feature/../..),'featureType':local-name($feature/../..), 'gmlid':string($feature/../../@*:id), 'property':'nz-core:specificExposedElementType'}) else if (count($feature/nz-core:specificExposedElementType) != 1) then local:addMessage('TR.wrongMultiplicitySpatialRepresentation', map {'filename': local:filename($feature/../..), 'id': string($feature/../../@*:id), 'element': 'nz-core:specificExposedElementType'}) else if(count($invalid_urls_orig) > 0) then local:addMessage('TR.brokenLinkNaturalRiskZones', map {'filename': local:filename($feature/../..), 'featureType':local-name($feature/../..), 'gmlid': string($feature/../../@*:id), 'property': $property_string, 'value': string-join($invalid_urls_orig, ',')}) else () let $totalmessages := ($messagesee, $messagesec) return (if ($totalmessages) then 'FAILED' else 'PASSED', local:error-statistics('TR.recordsWithErrors', count(fn:distinct-values($totalmessages//etf:argument[@token='id']/text()))), $totalmessages)

##### nz-ia.a.3: NaturalHazardCategoryValue click to expand contents

Check that any code list extensions are publicly accessible via HTTP, i.e. inspect extensible code list vanzed property elements. If a reference (@xlink:href) has a value that does not start with http://inspire.ec.europa.eu/codelist/, verify that a HTTP GET request to the URI retrieves a document. Otherwise report brokenLink.
This data theme currently has the following extensible code list:

- NaturalHazardCategoryValue : http://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue

Source: Abstract Test Case 'Code List', INSPIRE Data Specification on Natural Risk Zones, A.6.3

Status | Passed
Duration | 0.530 s
Assertion ID | EIDc2fb6ed9-379a-427d-a08f-5856ae7c20f1
Assertion URI | Link

Expression: let $features_selected := $features[self::nz-core:ObservedEvent|self::nz-core:HazardArea|self::nz-core:RiskZone|self::nz-core:ExposedElement] let $property_string := 'NaturalHazardCategoryValue' let $messages := let $this_features := for $this_feature in $features_selected return if (name($this_feature) = 'nz-core:ObservedEvent') then $this_feature/nz-core:typeOfHazard else if (name($this_feature) = 'nz-core:HazardArea') then $this_feature/nz-core:typeOfHazard else if (name($this_feature) = 'nz-core:RiskZone') then $this_feature/nz-core:sourceOfRisk else if (name($this_feature) = 'nz-core:ExposedElement') then $this_feature/nz-core:assessmentOfVulnerability else () for $actual_feature in $this_features let $feature := if (name($actual_feature) = 'nz-core:assessmentOfVulnerability') then $actual_feature/nz-core:VulnerabilityAssessment/nz-core:sourceOfVulnerability else $actual_feature let $urls := for $x in $feature/nz-core:NaturalHazardClassification/nz-core:hazardCategory/@xlink:href return if (starts-with($x, 'http://inspire.ec.europa.eu/codelist/')) then () else if (starts-with($x, 'https://inspire.ec.europa.eu/codelist/')) then concat('https://inspire.ec.europa.eu/registry/rest?uri=',$x,codepoints-to-string(38),'lang=en', codepoints-to-string(38),'format=jsonc') else $x let $map := local:check-resource-uris($urls, 30, true()) let $invalid_urls := for $href in $urls let $url := string($href) let $validuri := map:get($map, $url) return if ($validuri = 'notHTTP' or starts-with($validuri, 'EXCEPTION') or $validuri = 'idNotFound' or matches($validuri,'^\d{3}$')) then $url else () let $invalid_urls_orig := for $url in $invalid_urls return if (starts-with($url, 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/')) then tokenize(substring($url,48), codepoints-to-string(38))[1] else $url return if (name($feature) = 'nz-core:sourceOfVulnerability' and not(exists($feature/nz-core:NaturalHazardClassification))) then () else if (not(exists($feature/nz-core:NaturalHazardClassification/nz-core:hazardCategory))) then local:addMessage('TR.missingElementNaturalRiskZone', map {'filename': local:filename($actual_feature),'featureType':local-name($actual_feature/..), 'gmlid':string($actual_feature/../@*:id), 'property':'nz-core:hazardCategory'}) else if (count($feature/nz-core:NaturalHazardClassification/nz-core:hazardCategory) != 1) then local:addMessage('TR.wrongMultiplicitySpatialRepresentation', map {'filename': local:filename($actual_feature), 'id': string($actual_feature/../@*:id), 'element': 'nz-core:hazardCategory'}) else if (not(exists($feature/nz-core:NaturalHazardClassification/nz-core:hazardCategory/@xlink:href))) then local:addMessage('TR.missingAttributeRiskZone', map {'filename': local:filename($actual_feature), 'featureType':local-name($actual_feature/..), 'gmlid': string($actual_feature/../@*:id), 'property': $property_string, 'attribute': 'xlink:href'}) else if(count($invalid_urls_orig) > 0) then local:addMessage('TR.brokenLinkNaturalRiskZones', map {'filename': local:filename($actual_feature), 'featureType':local-name($actual_feature/..), 'gmlid': string($actual_feature/../@*:id), 'property': $property_string, 'value': string-join($invalid_urls_orig, ',')}) else () return (if ($messages) then 'FAILED' else 'PASSED', local:error-statistics('TR.recordsWithErrors', count(fn:distinct-values($messages//etf:argument[@token='id']/text()))), $messages)

##### nz-ia.a.4: SpecificHazardTypeValue click to expand contents

Check that any code list extensions are publicly accessible via HTTP, i.e. inspect extensible code list vanzed property elements. If a reference (@xlink:href) has a value that does not start with http://inspire.ec.europa.eu/codelist/, verify that a HTTP GET request to the URI retrieves a document. Otherwise report brokenLink.
This data theme currently has the following extensible code list:

- SpecificHazardTypeValue : http://inspire.ec.europa.eu/codelist/SpecificHazardTypeValue

Source: Abstract Test Case 'Code List', INSPIRE Data Specification on Natural Risk Zones, A.6.3

Status | Passed
Duration | 0.001 s
Assertion ID | EID66745790-5452-41c7-a193-8ed37d280bb7
Assertion URI | Link

Expression: let $features_selected := $features[self::nz-core:ObservedEvent|self::nz-core:HazardArea|self::nz-core:RiskZone|self::nz-core:ExposedElement] let $property_string := 'SpecificHazardTypeValue' let $messages := let $this_features := for $this_feature in $features_selected return if (name($this_feature) = 'nz-core:ObservedEvent') then $this_feature/nz-core:typeOfHazard else if (name($this_feature) = 'nz-core:HazardArea') then $this_feature/nz-core:typeOfHazard else if (name($this_feature) = 'nz-core:RiskZone') then $this_feature/nz-core:sourceOfRisk else if (name($this_feature) = 'nz-core:ExposedElement') then $this_feature/nz-core:assessmentOfVulnerability else () for $actual_feature in $this_features let $feature := if (name($actual_feature) = 'nz-core:assessmentOfVulnerability') then $actual_feature/nz-core:VulnerabilityAssessment/nz-core:sourceOfVulnerability else $actual_feature let $urls := for $x in $feature/nz-core:NaturalHazardClassification/nz-core:specificHazardType/@xlink:href return if (starts-with($x, 'http://inspire.ec.europa.eu/codelist/')) then () else if (starts-with($x, 'https://inspire.ec.europa.eu/codelist/')) then concat('https://inspire.ec.europa.eu/registry/rest?uri=',$x,codepoints-to-string(38),'lang=en', codepoints-to-string(38),'format=jsonc') else $x let $map := local:check-resource-uris($urls, 30, true()) let $invalid_urls := for $href in $urls let $url := string($href) let $validuri := map:get($map, $url) return if ($validuri = 'notHTTP' or starts-with($validuri, 'EXCEPTION') or $validuri = 'idNotFound' or matches($validuri,'^\d{3}$')) then $url else () let $invalid_urls_orig := for $url in $invalid_urls return if (starts-with($url, 'https://inspire.ec.europa.eu/registry/rest?uri=https://inspire.ec.europa.eu/codelist/')) then tokenize(substring($url,48), codepoints-to-string(38))[1] else $url return if (not(exists($feature/nz-core:NaturalHazardClassification/nz-core:specificHazardType))) then local:addMessage('TR.missingElementNaturalRiskZone', map {'filename': local:filename($actual_feature),'featureType':local-name($actual_feature/..), 'gmlid':string($actual_feature/../@*:id), 'property':'nz-core:specificHazardType'}) else if (count($feature/nz-core:NaturalHazardClassification/nz-core:specificHazardType) != 1) then local:addMessage('TR.wrongMultiplicitySpatialRepresentation', map {'filename': local:filename($actual_feature), 'id': string($actual_feature/../@*:id), 'element': 'nz-core:specificHazardType'}) else if(count($invalid_urls_orig) > 0) then local:addMessage('TR.brokenLinkNaturalRiskZones', map {'filename': local:filename($actual_feature), 'featureType':local-name($actual_feature/..), 'gmlid': string($actual_feature/../@*:id), 'property': $property_string, 'value': string-join($invalid_urls_orig, ',')}) else () return (if ($messages) then 'FAILED' else 'PASSED', local:error-statistics('TR.recordsWithErrors', count(fn:distinct-values($messages//etf:argument[@token='id']/text()))), $messages)

### Feature references
4
click to expand contents

Verify that referenced features can be retrieved.

Status | Passed
Duration | 0.004 s
Test case ID | EIDd8b35694-d212-4b09-9b64-162ffc062e6e

##### nz-ia.b.1: RiskZone.exposedElement click to expand contents

Check that any feature reference in an association role is publicly accessible via HTTP, i.e. inspect all relevant properties. If a reference (@xlink:href) has a value that starts with "#", verify that an element with a gml:id attribute with the referenced identifier exists in the same document. If the reference starts with "http", verify that a HTTP GET request to the URI retrieves an XML document. Otherwise report brokenLink.
This data theme currently has the following association role:

- RiskZone.exposedElement: ExposedElement or ExposedElementCoverage

Source: Abstract Test Case 'Feature references', INSPIRE Data Specification on Natural Risk Zones, A.4.2

Status | Passed
Duration | 0.001 s
Assertion ID | EIDc8a65b75-00cc-4c83-a0d9-dc16fc025148
Assertion URI | Link

Expression: let $features_selected := $features[self::nz-core:RiskZone] let $gml_ids := $features//@gml:id let $property_string := 'RiskZone.exposedElement' let $messages := for $feature in $features_selected let $urls := for $x in $feature/nz-core:exposedElement/@xlink:href return if (starts-with($x, '#')) then () else $x let $map := local:check-resource-uris($urls, 30, true()) let $invalid_urls := for $href in $urls let $url := string($href) let $validuri := map:get($map, $url) return if ($validuri = 'notHTTP' or starts-with($validuri, 'EXCEPTION') or $validuri = 'idNotFound' or matches($validuri,'^\d{3}$')) then $url else () let $invalid_element_reference := for $x in $feature/nz-core:exposedElement/@xlink:href return if (starts-with($x, '#')) then if (not(substring($x, 2) = $gml_ids)) then $x else () else () return if (count($feature/nz-core:exposedElement) = 0) then local:addMessage('TR.missingElementNaturalRiskZone', map {'filename': local:filename($feature), 'featureType':local-name($feature), 'gmlid': string($feature/@*:id), 'property': 'nz-core:exposedElement'}) else if (count($invalid_urls) > 0) then local:addMessage('TR.brokenLinkNaturalRiskZones', map {'filename': local:filename($feature), 'featureType':local-name($feature), 'gmlid': string($feature/@*:id), 'property': $property_string, 'value': string-join($invalid_urls, ',')}) else if ((count($invalid_element_reference) > 0) and (count($feature/nz-core:exposedElement/@nilReason) = 0)) then local:addMessage('TR.missingReferencedElementNaturalRiskZones', map {'filename': local:filename($feature), 'featureType':local-name($feature), 'gmlid': string($feature/@*:id), 'property': $property_string, 'value': string-join($invalid_element_reference, ',')}) else () return (if ($messages) then 'FAILED' else 'PASSED', local:error-statistics('TR.recordsWithErrors', count(fn:distinct-values($messages//etf:argument[@token='id']/text()))), $messages)

##### nz-ia.b.2: RiskZone.source click to expand contents

Check that any feature reference in an association role is publicly accessible via HTTP, i.e. inspect all relevant properties. If a reference (@xlink:href) has a value that starts with "#", verify that an element with a gml:id attribute with the referenced identifier exists in the same document. If the reference starts with "http", verify that a HTTP GET request to the URI retrieves an XML document. Otherwise report brokenLink.
This data theme currently has the following association role:

- RiskZone.source: HazardArea or HazardCoverage

Source: Abstract Test Case 'Feature references', INSPIRE Data Specification on Natural Risk Zones, A.4.2

Status | Passed
Duration | 0.001 s
Assertion ID | EID993e9bea-2013-4bd5-b032-6ada55279f53
Assertion URI | Link

Expression: let $features_selected := $features[self::nz-core:RiskZone] let $gml_ids := $features//@gml:id let $property_string := 'RiskZone.source' let $messages := for $feature in $features_selected let $urls := for $x in $feature/nz-core:source/@xlink:href return if (starts-with($x, '#')) then () else $x let $map := local:check-resource-uris($urls, 30, true()) let $invalid_urls := for $href in $urls let $url := string($href) let $validuri := map:get($map, $url) return if ($validuri = 'notHTTP' or starts-with($validuri, 'EXCEPTION') or $validuri = 'idNotFound' or matches($validuri,'^\d{3}$')) then $url else () let $invalid_element_reference := for $x in $feature/nz-core:source/@xlink:href return if (starts-with($x, '#')) then if (not(substring($x, 2) = $gml_ids)) then $x else () else () return if (count($feature/nz-core:source) = 0) then local:addMessage('TR.missingElementNaturalRiskZone', map {'filename': local:filename($feature), 'featureType':local-name($feature), 'gmlid': string($feature/@*:id), 'property': 'nz-core:source'}) else if (count($feature/nz-core:source) != 1) then local:addMessage('TR.wrongMultiplicitySpatialRepresentation', map {'filename': local:filename($feature), 'id': string($feature/@*:id), 'element': 'nz-core:source'}) else if (count($invalid_urls) > 0) then local:addMessage('TR.brokenLinkNaturalRiskZones', map {'filename': local:filename($feature), 'featureType':local-name($feature), 'gmlid': string($feature/@*:id), 'property': $property_string, 'value': string-join($invalid_urls, ',')}) else if ((count($invalid_element_reference) > 0) and (count($feature/nz-core:source/@nilReason) = 0)) then local:addMessage('TR.missingReferencedElementNaturalRiskZones', map {'filename': local:filename($feature), 'featureType':local-name($feature), 'gmlid': string($feature/@*:id), 'property': $property_string, 'value': string-join($invalid_element_reference, ',')}) else () return (if ($messages) then 'FAILED' else 'PASSED', local:error-statistics('TR.recordsWithErrors', count(fn:distinct-values($messages//etf:argument[@token='id']/text()))), $messages)

##### nz-ia.b.3: HazardArea.source click to expand contents

Check that any feature reference in an association role is publicly accessible via HTTP, i.e. inspect all relevant properties. If a reference (@xlink:href) has a value that starts with "#", verify that an element with a gml:id attribute with the referenced identifier exists in the same document. If the reference starts with "http", verify that a HTTP GET request to the URI retrieves an XML document. Otherwise report brokenLink.
This data theme currently has the following association role:

- HazardArea.source: ObservedEvent or ObservedEventCoverage

Source: Abstract Test Case 'Feature references', INSPIRE Data Specification on Natural Risk Zones, A.4.2

Status | Passed
Duration | 0.001 s
Assertion ID | EIDa5c0f1ec-f848-469a-8076-1720c987cb05
Assertion URI | Link

Expression: let $features_selected := $features[self::nz-core:HazardArea] let $gml_ids := $features//@gml:id let $property_string := 'HazardArea.source' let $messages := for $feature in $features_selected let $urls := for $x in $feature/nz-core:source/@xlink:href return if (starts-with($x, '#')) then () else $x let $map := local:check-resource-uris($urls, 30, true()) let $invalid_urls := for $href in $urls let $url := string($href) let $validuri := map:get($map, $url) return if ($validuri = 'notHTTP' or starts-with($validuri, 'EXCEPTION') or $validuri = 'idNotFound' or matches($validuri,'^\d{3}$')) then $url else () let $invalid_element_reference := for $x in $feature/nz-core:source/@xlink:href return if (starts-with($x, '#')) then if (not(substring($x, 2) = $gml_ids)) then $x else () else () return if (count($invalid_urls) > 0) then local:addMessage('TR.brokenLinkNaturalRiskZones', map {'filename': local:filename($feature), 'featureType':local-name($feature), 'gmlid': string($feature/@*:id), 'property': $property_string, 'value': string-join($invalid_urls, ',')}) else if ((count($invalid_element_reference) > 0) and (count($feature/nz-core:source/@nilReason) = 0)) then local:addMessage('TR.missingReferencedElementNaturalRiskZones', map {'filename': local:filename($feature), 'featureType':local-name($feature), 'gmlid': string($feature/@*:id), 'property': $property_string, 'value': string-join($invalid_element_reference, ',')}) else () return (if ($messages) then 'FAILED' else 'PASSED', local:error-statistics('TR.recordsWithErrors', count(fn:distinct-values($messages//etf:argument[@token='id']/text()))), $messages)

##### nz-ia.b.4: ObservedEvent.isMonitoredBy click to expand contents

Check that any feature reference in an association role is publicly accessible via HTTP, i.e. inspect all relevant properties. If a reference (@xlink:href) has a value that starts with "#", verify that an element with a gml:id attribute with the referenced identifier exists in the same document. If the reference starts with "http", verify that a HTTP GET request to the URI retrieves an XML document. Otherwise report brokenLink.
This data theme currently has the following association role:

- ObservedEvent.isMonitoredBy: EnvironmentalMonitoringProgramme

Source: Abstract Test Case 'Feature references', INSPIRE Data Specification on Natural Risk Zones, A.4.2

Status | Passed
Duration | 0.001 s
Assertion ID | EID8ae2f99e-b18f-427e-b05d-ea8551443aff
Assertion URI | Link

Expression: let $features_selected := $features[self::nz-core:ObservedEvent] let $gml_ids := $features//@gml:id let $property_string := 'ObservedEvent.isMonitoredBy' let $messages := for $feature in $features_selected let $urls := for $x in $feature/nz-core:isMonitoredBy/@xlink:href return if (starts-with($x, '#')) then () else $x let $map := local:check-resource-uris($urls, 30, true()) let $invalid_urls := for $href in $urls let $url := string($href) let $validuri := map:get($map, $url) return if ($validuri = 'notHTTP' or starts-with($validuri, 'EXCEPTION') or $validuri = 'idNotFound' or matches($validuri,'^\d{3}$')) then $url else () let $invalid_element_reference := for $x in $feature/nz-core:isMonitoredBy/@xlink:href return if (starts-with($x, '#')) then if (not(substring($x, 2) = $gml_ids)) then $x else () else () return if (count($invalid_urls) > 0) then local:addMessage('TR.brokenLinkNaturalRiskZones', map {'filename': local:filename($feature), 'featureType':local-name($feature), 'gmlid': string($feature/@*:id), 'property': $property_string, 'value': string-join($invalid_urls, ',')}) else if ((count($invalid_element_reference) > 0) and (count($feature/nz-core:isMonitoredBy/@nilReason) = 0)) then local:addMessage('TR.missingReferencedElementNaturalRiskZones', map {'filename': local:filename($feature), 'featureType':local-name($feature), 'gmlid': string($feature/@*:id), 'property': $property_string, 'value': string-join($invalid_element_reference, ',')}) else () return (if ($messages) then 'FAILED' else 'PASSED', local:error-statistics('TR.recordsWithErrors', count(fn:distinct-values($messages//etf:argument[@token='id']/text()))), $messages)

## Conformance class: Data consistency, General requirements
2

This test suite examines a data set against the basic requirements related to the consistency of the data. This test suite only examines requirements that are not specific to a data theme. Additional test cases will be defined per data theme, where needed.
This is a draft version. It has limitations and is expected to contain errors. Please report any issues or problems in GitHub.
Known limitations are documented in the description of the applicable test case or test assertion. There is a general limitation in all assertions that extensions in additional application schemas are only supported, if the unqualified name of the feature type in the extension is the same as the name of the feature type in the INSPIRE application schema.
Source: Conformance Class 'Data consistency'
Pre-requisite conformance classes:

- Conformance Class 'INSPIRE GML application schemas'

Status | Passed, manual checks required
Duration | 0.001 s
Test suite ID | EID61070ae8-13cb-4303-a340-72c8b877b00a
Author | interactive instruments GmbH
Date created | 15/08/2016 00:00:00 GMT
Version | 0.2.3
Last editor | Consortium Bilbomatica y Guadaltel
Last updated | 15/05/2024 16:00:00 GMT
Reference | Link
Hash | CBF29CE484222325

### Version consistency
3
click to expand contents

Verify that the information about a spatial object is consistent over time.

Status | Passed, manual checks required
Duration | 0.001 s
Test case ID | EID34e2a27a-e57e-486a-a612-bfa89c963116

##### dc.a.1: Version lifespan plausible click to expand contents

Verify that all endLifespanVersion values are from the allowed range. For all features verify that either

- beginLifespanVersion or endLifespanVersion are missing or nil or
- endLifespanVersion is not before the value of beginLifespanVersion.

Relevant requirements:

- IR Requirement Article 10 (3): Life-cycle of Spatial Objects. Where the attributes beginLifespanVersion and endLifespanVersion are used, the value of endLifespanVersion shall not be before the value of beginLifespanVersion.

Source: Abstract Test Case 'Version consistency', INSPIRE Data Specification Template, A.3.3

Status | Passed
Duration | 0.001 s
Assertion ID | EIDc88de361-bf4d-4fdb-8cc0-68d1a62e5eae
Assertion URI | Link

Expression: let $featuresWithErrors := $features[(*[self::*:beginLifespanVersion and not(@xsi:nil='true')] and *[self::*:endLifespanVersion and not(@xsi:nil='true')] and xs:dateTime(*:beginLifespanVersion[1]/text()) > xs:dateTime(*:endLifespanVersion[1]/text()))][position() le $limitErrors] return (if ($featuresWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id let $begin := $feature/*[self::*:beginLifespanVersion][1]/text() let $end := $feature/*[self::*:endLifespanVersion][1]/text() return local:addMessage('TR.endTooEarly', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id), 'begin': $begin, 'end': $end, 'propertyBegin': 'beginLifespanVersion', 'propertyEnd': 'endLifespanVersion' }))

##### dc.a.2: Unique identifier persistency click to expand contents

Verify that identifiers are persistent for a spatial object, i.e. inspect the documentation of the spatial data set and verify that rules for identifiers are specified in a way that the identifiers (namespace and localId) do not change during the life-cycle of a spatial object. If older versions of the data set are available compare the features and verify that the namespace and localId part of the INSPIRE identifiers have not changed between the versions.
Relevant requirements:

- IR Requirement Article 9 (2): Identifier Management. The external object identifier for the unique identification of spatial objects shall not be changed during the life-cycle of a spatial object.

Source: Abstract Test Case 'Version consistency', INSPIRE Data Specification Template, A.3.1

Status | Passed, manual checks required
Duration | 0.001 s
Assertion ID | EIDeaa9832a-a372-484a-b25b-c67e1c808e0f
Assertion URI | Link

##### dc.a.3: Spatial object type stable click to expand contents

Verify that the type of a spatial object is unchanged for different versions, i.e. inspect the documentation of the spatial data set and verify that rules for the mapping to the INSPIRE application schema are specified in a way that the spatial object type do not change during its life-cycle. If older versions of the data set are available compare the features and verify that the types of the features has not changed between the versions.
Relevant requirements:

- IR Requirement Article 9 (2): Identifier Management. The external object identifier for the unique identification of spatial objects shall not be changed during the life-cycle of a spatial object.

Source: Abstract Test Case 'Version consistency', INSPIRE Data Specification Template, A.3.2

Status | Passed, manual checks required
Duration | 0.001 s
Assertion ID | EID2b8243c8-e2e7-402d-97f1-86110b70e55e
Assertion URI | Link

### Temporal consistency
1
click to expand contents

Verify that the temporal validity of the real-world entity is consistent.

Status | Passed
Duration | 0.001 s
Test case ID | EID4ca5564d-2643-4ee3-9ec9-bf97043d3fa0

##### dc.b.1: Valid time plausible click to expand contents

For all features verify that either

- validFrom or validTo are missing or nil or
- validTo is not before the value of validFrom.

Relevant requirements:

- IR Requirement Article 12 (3): Other Requirements and Rules. Where the attributes validFrom and validTo are used, the value of validTo shall not be before the value of validFrom.

Source: Abstract Test Case 'Temporal consistency', INSPIRE Data Specification Template, A.3.4

Status | Passed
Duration | 0.001 s
Assertion ID | EIDcefa9614-ce69-43d4-bed5-7758e7d890a9
Assertion URI | Link

Expression: let $featuresWithErrors := for $feature in $features let $validFrom := if(not(contains($feature/*[local-name()='validFrom']/text(), 'T'))) then xs:dateTime(concat($feature/*[local-name()='validFrom']/text(), 'T00:00:00')) else xs:dateTime($feature/*[local-name()='validFrom']/text()) let $validTo := if(not(contains($feature/*[local-name()='validTo']/text(), 'T'))) then xs:dateTime(concat($feature/*[local-name()='validTo']/text(), 'T00:00:00')) else xs:dateTime($feature/*[local-name()='validTo']/text()) let $featureWithErrors := $feature[*[self::*:validFrom and not(@xsi:nil='true')] and *[self::*:validTo and not(@xsi:nil='true')] and $validFrom >= $validTo][position() le $limitErrors] return $featureWithErrors return (if ($featuresWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id let $begin := $feature/*[self::*:validFrom][1]/text() let $end := $feature/*[self::*:validTo][1]/text() return local:addMessage('TR.endTooEarly', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id), 'begin': $begin, 'end': $end, 'propertyBegin': 'validFrom', 'propertyEnd': 'validTo' }))

## Conformance class: Data consistency, Natural Risk Zones
1

This test suite examines a data set against the theme-specific requirements related to data consistency.
This is a draft version. It has limitations and is expected to contain errors. Please report any issues or problems in GitHub.
Known limitations are documented in the description of the applicable test case or test assertion. There is a general limitation in all assertions that extensions in additional application schemas are only supported, if the unqualified name of the feature type in the extension is the same as the name of the feature type in the INSPIRE application schema.
Source: Conformance Class 'Data consistency, Natural Risk Zones'
Pre-requisite conformance classes:

- Conformance Class 'Data consistency'

Status | Passed
Duration | 0.001 s
Test suite ID | EIDc1386fc3-eb79-41dc-a2ff-9ca48e0576eb
Author | Consortium Bilbomatica, Guadaltel y Geograma
Date created | 30/07/2020 13:30:00 GMT
Version | 0.1.0
Last editor | Consortium Bilbomatica, Guadaltel y Geograma
Last updated | 03/08/2020 15:00:00 GMT
Reference | Link
Hash | CBF29CE484222325

### Additional theme-specific rules for data consistency
1
click to expand contents

Additional theme-specific rules for data consistency. Currently none exists, so this is a placeholder.

Status | Passed
Duration | 0.001 s
Test case ID | EID50af296e-cfa3-4e61-9fef-3941ea20e349

##### nz-dc.a.1: Test always passes click to expand contents

This conformance class includes no assertions beyond the ones referenced by dependencies, i.e. those that apply across the data themes. This assertion will always pass and is included for technical reasons.

Status | Passed
Duration | 0.001 s
Assertion ID | EIDcc2ad8ef-0db1-41a4-b3f6-73bbe1bd9ae3
Assertion URI | Link

## Conformance class: INSPIRE GML application schemas, General requirements
6

This test suite examines GML documents against basic requirements for the GML encoding for spatial data sets in INSPIRE. This only covers application-schema-independent, generic requirements. Requirements related to specific application schemas are part of conformance classes with a dependency on this conformance class.
This is a draft version. It has limitations and is expected to contain errors. Please report any issues or problems in GitHub.
Known limitations are documented in the description of the applicable test case or test assertion. There is a general limitation in all assertions that extensions in additional application schemas are only supported, if the unqualified name of the feature type in the extension is the same as the name of the feature type in the INSPIRE application schema.
Source: Conformance Class 'INSPIRE GML application schemas'
Pre-requisite conformance classes:

- Conformance Class 'INSPIRE GML encoding'

Status | Passed, manual checks required
Duration | 1.221 s
Test suite ID | EID09820daf-62b2-4fa3-a95f-56a0d2b7c4d8
Author | interactive instruments GmbH
Date created | 15/08/2016 00:00:00 GMT
Version | 0.2.9
Last editor | Consortium Bilbomatica y Guadaltel
Last updated | 15/05/2024 16:00:00 GMT
Reference | Link
Hash | CBF29CE484222325

### Schema
2
click to expand contents

Verify whether each relevant element of the dataset under inspection carries a name specified in the target application schema.

Status | Passed, manual checks required
Duration | 0.001 s
Test case ID | EID071a80e9-332e-4219-b600-329f47b98ef1

##### gmlas.a.1: Mapping of source data to INSPIRE click to expand contents

Verify whether each relevant element of the source data set under inspection has been properly mapped to the INSPIRE application schemas. Inspect the documentation of the source data set and determine, if all relevant information has been mapped correctly to the INSPIRE application schema, i.e. that spatial object types, data types, attributes, association roles, code lists, and enumerations are mapped to the INSPIRE application schemas with the correct designation of mnemonic names.
Relevant requirements:

- Article 4(1) - For the exchange and classification of spatial objects from data sets meeting the conditions laid down in Article 4 of Directive 2007/2/EC, Member States shall use the spatial object types and associated data types, enumerations and code lists that are defined in Annexes II, III and IV for the themes the data sets relate to.

Source: Abstract Test Case 'Schema', INSPIRE Data Specification Template, A.1.1

Status | Passed, manual checks required
Duration | 0.001 s
Assertion ID | EID09ad14e3-d46f-42fc-9b01-64cb6ed2134c
Assertion URI | Link

##### gmlas.a.2: Modelling of additional spatial object types click to expand contents

Inspect the XML Schema namespace of each feature element. If a namespace URI does not start with "http://inspire.ec.europa.eu/schemas/" or "urn:x-inspire:specification:gmlas:" it is not one of the approved INSPIRE application schema namespaces. Review the extension documentation for the identified namespaces to check that any extensions do not overlap with the spatial object types and associated data types and enumerations that are defined in Annexes II, III and IV of the Implementing Rule.
Relevant requirements:

- Article 4(1) - For the exchange and classification of spatial objects from data sets meeting the conditions laid down in Article 4 of Directive 2007/2/EC, Member States shall use the spatial object types and associated data types, enumerations and code lists that are defined in Annexes II, III and IV for the themes the data sets relate to.

Source: Abstract Test Case 'Schema', INSPIRE Data Specification Template, A.1.1

Status | Passed, manual checks required
Duration | 0.001 s
Assertion ID | EIDa24f1604-1e86-43d7-b1b0-47ede44b4f9c
Assertion URI | Link

### Validation against declared schema
2
click to expand contents

Verify that all XML documents validate against the XML schema(s) declared in the schemaLocation attribute.

Status | Passed
Duration | 0.534 s
Test case ID | EID2c6fe882-7c53-47f2-b4c4-66b15c248be4

##### gmlas.b.1: xsi:schemaLocation attribute click to expand contents

Verify for each XML document that the xsi:schemaLocation attribute is provided in the root element.
Relevant requirements:

- TG Requirement 6: Data instance (XML) documents shall validate without error against the provided XML schema.

Source: Abstract Test Case 'Schema validation', INSPIRE Data Specification Template, A.9.5

Status | Passed
Duration | 0.001 s
Assertion ID | EID40646a32-7b85-411f-abc7-1eba528d7d95
Assertion URI | Link

Expression: let $filesWithErrors := $db[not(/*/@xsi:schemaLocation)][position() le $limitErrors] return (if ($filesWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.filesWithErrors', count($filesWithErrors)), for $file in $filesWithErrors order by local:filename($file) let $root := $file/element() return local:addMessage('TR.noSchemaLocation', map { 'filename': local:filename($root) }))

##### gmlas.b.2: validate XML documents against declared schema click to expand contents

Validate each document against the schema(s) specified in the xsi:schemaLocation attribute using strict XML schema validation.
Relevant requirements:

- IR Requirement Article 3: Common Types. Types that are common to several of the themes listed in Annexes I, II and III to Directive 2007/2/EC shall conform to the definitions and constraints and include the attributes and association roles set out in Annex I.
- IR Requirement Article 4 (2): Types for the Exchange and Classification of Spatial Objects. Spatial object types and data types shall comply with the definitions and constraints and include the attributes and association roles set out in the Annexes.
- IR Requirement Article 4 (3): Types for the Exchange and Classification of Spatial Objects. The enumerations and code lists used in attributes or association roles of spatial object types or data types shall comply with the definitions and include the values set out in Annex II. The enumeration and code list values are uniquely identified by language-neutral mnemonic codes for computers. The values may also include a language-specific name to be used for human interaction.
- IR Requirement Article 5 (2): Types. Types that are a sub-type of another type shall also include all this type‘s attributes and association roles.
- IR Requirement Article 5 (3): Types. Abstract types shall not be instantiated.
- IR Requirement Article 6 (5): Code Lists and Enumerations. Attributes or association roles of spatial object types or data types that have an enumeration type may only take values from the lists specified for the enumeration type.
- IR Requirement Article 9 (1): Identifier Management. The data type Identifier defined in Section 2.1 of Annex I shall be used as a type for the external object identifier of a spatial object.
- TG Requirement 1: Spatial object types and data types shall comply with the multiplicities defined for the attributes and association roles in this section.
- TG Requirement 6: Data instance (XML) documents shall validate without error against the provided XML schema.

Note that validation is done on a file-by-file basis and access to many remote schema files is time consuming. I.e. it will be much faster to validate a single document with many features than many files with a few features each.
Source: Abstract Test Case 'Schema validation', INSPIRE Data Specification Template, A.1.1, A.1.2, A.1.3, A.1.4, A.1.5, A.3.2, (A.6.1), A.8.1, A.9.5

Status | Passed
Duration | 0.534 s
Assertion ID | EID0eaac0f2-9ab3-44ab-9f02-4ee0a1587d14
Assertion URI | Link

Expression: let $errors := (for $file in $db return try { let $root := $file/element() let $logentry := local:log('Validating ' || local:filename($root)) let $start := prof:current-ms() let $query := "declare variable $file external; validate:xsd-info($file)" let $messages := xquery:eval($query, map{ 'file': $file }, map{ 'timeout': 60 }) (:let $messages := validate:xsd-info($file):) let $duration := prof:current-ms()-$start let $errors := count($messages) let $logentry := local:log('Duration: ' || $duration || ' ms. Errors: ' || $errors || '.') return if ($errors>0) then (local:addMessage('TR.invalidSchema', map { 'filename': local:filename($root), 'count': string($errors) }), for $message in $messages return local:addMessage('TR.xmlSchemaError', map { 'filename': local:filename($root), 'error': $message })) else () } catch * { let $logerror := local:log('Exception: ' || $err:description) return local:addMessage('TR.timeoutFileOperation', map { 'filename': local:filename($file/element()), 'description': $err:description }) } )[position() le $limitErrors] return (if ($errors) then 'FAILED' else 'PASSED', local:error-statistics('TR.filesWithErrors', count($errors[@ref eq 'TR.invalidSchema'])), $errors[position() le $limitErrors])

### GML model
3
click to expand contents

Verify that the XML documents meet the requirements of the GML model that are not tested by XML schema validation alone.

Status | Passed
Duration | 0.002 s
Test case ID | EID18099150-f7ac-4174-a7b6-45121383a5d3

##### gmlas.c.1: Consistency with the GML model click to expand contents

Inspect each property element and verify that it either carries a URI reference to an object (@xlink:href), contains one or more object elements as child elements or contains a non-empty text node (whitespace is trimmed before checking for empty text).
Strictly, empty string values are valid according to the GML model, but they are not an appropriate value for any of the string-valued attributes in INSPIRE.
Relevant requirements:

- IR Requirement Article 4 (2): Types for the Exchange and Classification of Spatial Objects. Spatial object types and data types shall comply with the definitions and constraints and include the attributes and association roles set out in the Annexes.
- IR Requirement Article 4 (3): Types for the Exchange and Classification of Spatial Objects. The enumerations and code lists used in attributes or association roles of spatial object types or data types shall comply with the definitions and include the values set out in Annex II. The enumeration and code list values are uniquely identified by language-neutral mnemonic codes for computers. The values may also include a language-specific name to be used for human interaction.

Source: Abstract Test Case 'GML model', INSPIRE Data Specification Template, A.1.3, (A.6.1), A.9.5

Status | Passed
Duration | 0.001 s
Assertion ID | EIDb33aaf9a-898f-4625-b87f-81c07ac09adf
Assertion URI | Link

Expression: let $indeterminatePositionValues := ('unknown', 'now') let $featuresWithErrors := $features[*[not(@xlink:href or element() or (text() and string-length(normalize-space(text()))>0) or (self::*:uom) or (string-length(@uom)>0) or @xsi:nil eq 'true' or @indeterminatePosition = $indeterminatePositionValues)] or */*/*[not(@xlink:href or element() or (text() and string-length(normalize-space(text()))>0) or (self::*:uom) or (string-length(@uom)>0) or @xsi:nil eq 'true' or @indeterminatePosition = $indeterminatePositionValues)]][position() le $limitErrors] return (if ($featuresWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id let $properties := $feature/*[not(@xlink:href or element() or (text() and string-length(normalize-space(text()))>0) or (self::*:uom) or (string-length(@uom)>0) or @xsi:nil eq 'true' or @indeterminatePosition = $indeterminatePositionValues)] | $feature/*/*/*[not(@xlink:href or element() or (text() and string-length(normalize-space(text()))>0) or (self::*:uom) or (string-length(@uom)>0) or @xsi:nil eq 'true' or @indeterminatePosition = $indeterminatePositionValues)] return local:addMessage('TR.emptyValue', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id), 'propertyNames': fn:string-join($properties/local-name(),', ') }))

##### gmlas.c.2: nilReason attributes require xsi:nil=true click to expand contents

Inspect each XML element that represents a feature property and that has a nilReason XML attribute. Verify that xsi:nil='true' is present in the property element, i.e. a reason is only provided in properties that are void / nil.
Limitation: This test currently does not analyse properties of data types or objects embedded in a feature.
Relevant requirements:

- IR Requirement Article 4 (2): Types for the Exchange and Classification of Spatial Objects. Spatial object types and data types shall comply with the definitions and constraints and include the attributes and association roles set out in the Annexes.
- IR Requirement Article 4 (3): Types for the Exchange and Classification of Spatial Objects. The enumerations and code lists used in attributes or association roles of spatial object types or data types shall comply with the definitions and include the values set out in Annex II. The enumeration and code list values are uniquely identified by language-neutral mnemonic codes for computers. The values may also include a language-specific name to be used for human interaction.

Source: Abstract Test Case 'GML model', INSPIRE Data Specification Template, A.1.3, (A.6.1), A.9.5

Status | Passed
Duration | 0.001 s
Assertion ID | EIDb62f96a5-349f-40dd-b777-1e52ea09b686
Assertion URI | Link

Expression: let $featuresWithErrors := $features[*[@nilReason and not(@xsi:nil eq 'true')]][position() le $limitErrors] return (if ($featuresWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id let $properties := $feature/*[@nilReason and not(@xsi:nil eq 'true')] return local:addMessage('TR.nilMissing', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id), 'propertyNames': fn:string-join($properties/local-name(),', ') }))

##### gmlas.c.3: nilReason values click to expand contents

Inspect all nilReason values and verify that either the values from the INSPIRE registry or the pre-defined values from the GML standard are used. Otherwise report incorrectReason. Valid values are:

- 'http://inspire.ec.europa.eu/codelist/VoidReasonValue/Unknown'
- 'http://inspire.ec.europa.eu/codelist/VoidReasonValue/Unpopulated'
- 'http://inspire.ec.europa.eu/codelist/VoidReasonValue/Withheld'
- 'unknown'
- 'other:unpopulated'
- 'withheld'

Limitation: This test currently does not analyse properties of data types or objects embedded in a feature.
Relevant requirements:

- IR Requirement Article 4 (2): Types for the Exchange and Classification of Spatial Objects. Spatial object types and data types shall comply with the definitions and constraints and include the attributes and association roles set out in the Annexes.
- IR Requirement Article 4 (3): Types for the Exchange and Classification of Spatial Objects. The enumerations and code lists used in attributes or association roles of spatial object types or data types shall comply with the definitions and include the values set out in Annex II. The enumeration and code list values are uniquely identified by language-neutral mnemonic codes for computers. The values may also include a language-specific name to be used for human interaction.

Source: Abstract Test Case 'GML model', INSPIRE Data Specification Template, A.1.3, (A.6.1), A.9.5

Status | Passed
Duration | 0.001 s
Assertion ID | EIDabc9199e-d5a8-4829-80bd-09b7e49e2a76
Assertion URI | Link

Expression: let $values := ( 'http://inspire.ec.europa.eu/codelist/VoidReasonValue/Unknown', 'http://inspire.ec.europa.eu/codelist/VoidReasonValue/Unpopulated', 'http://inspire.ec.europa.eu/codelist/VoidReasonValue/Withheld', 'unknown', 'other:unpopulated', 'withheld' ) let $featuresWithErrors := $features[*[@xsi:nil eq 'true' and @nilReason and not(@nilReason = $values)]][position() le $limitErrors] return (if ($featuresWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id let $properties := $feature/*[@xsi:nil eq 'true' and @nilReason and not(@nilReason = $values)] let $values := distinct-values($properties/@nilReason) return local:addMessage('TR.incorrectReason', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id), 'propertyNames': fn:string-join($properties/local-name(),', '), 'values': fn:string-join($values, ', ') }))

### Simple features
11
click to expand contents

Verify that all features that are not excluded from the default requirement that geometries meet the requirements of the Simple Features standard fulfill the requirements.

Status | Passed
Duration | 0.645 s
Test case ID | EID7e0765c8-c149-4cf2-956f-ca4db0e0ed94

##### gmlas.d.1: No spatial topology objects click to expand contents

Verify that no spatial topology types are used, i.e. check that none of the GML object elements for spatial topology are used as child elements of a feature from the application schema.
Relevant requirements:

- IR Requirement Article 12 (1): Other Requirements and Rules. The value domain of spatial properties defined in this Regulation shall be restricted to the Simple Feature spatial schema as defined in Herring, John R. (ed.), OpenGIS® Implementation Standard for Geographic information – Simple feature access – Part 1: Common architecture, version 1.2.1, Open Geospatial Consortium, 2011, unless specified otherwise for a specific spatial data theme or type.

Note:

- Cadastral Parcel and Building 3D features are excluded from this requirement.

Source: Abstract Test Case 'Simple features', INSPIRE Data Specification Template, A.1.7

Status | Passed
Duration | 0.001 s
Assertion ID | EIDf625c820-71a1-41e2-afb2-11cdc7d5a01b
Assertion URI | Link

Expression: let $featuresToInspect := $features[not(self::cp3:* or self::cp:* or self::bu-core3d3:* or self::bu-core3d:*)] let $featuresWithErrors := $featuresToInspect[.//*[self::gml:Node|self::gml:Edge|self::gml:Face|self::gml:TopoSolid|self::gml:TopoPoint|self::gml:TopoCurve|self::gml:TopoSurface|self::gml:TopoVolume|self::gml:TopoComplex]][position() le $limitErrors] return (if ($featuresWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id let $element := $feature//*[self::gml:Node|self::gml:Edge|self::gml:Face|self::gml:TopoSolid|self::gml:TopoPoint|self::gml:TopoCurve|self::gml:TopoSurface|self::gml:TopoVolume|self::gml:TopoComplex][1] return local:addMessage('TR.spatialTopologyTypeFound', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id), 'elementName': name($element) }))

##### gmlas.d.2: No non-linear interpolation click to expand contents

Verify that only linear interpolation is used, i.e. check that none of the nonlinear GML curve segment object elements are used as child elements of a feature from the application schema.
Relevant requirements:

- IR Requirement Article 12 (1): Other Requirements and Rules. The value domain of spatial properties defined in this Regulation shall be restricted to the Simple Feature spatial schema as defined in Herring, John R. (ed.), OpenGIS® Implementation Standard for Geographic information – Simple feature access – Part 1: Common architecture, version 1.2.1, Open Geospatial Consortium, 2011, unless specified otherwise for a specific spatial data theme or type.

Note:

- Cadastral Parcel and Building 3D features are excluded from this requirement.

Source: Abstract Test Case 'Simple features', INSPIRE Data Specification Template, A.1.7

Status | Passed
Duration | 0.001 s
Assertion ID | EID44cf3e26-809e-49a9-8ec0-750a373e9ff1
Assertion URI | Link

Expression: let $featuresToInspect := $features[not(self::cp3:* or self::cp:* or self::bu-core3d3:* or self::bu-core3d:*)] let $featuresWithErrors := $featuresToInspect[.//gml:Curve/gml:segments/*[not(self::gml:LineStringSegment)]][position() le $limitErrors] return (if ($featuresWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id let $elements := $feature//gml:Curve/gml:segments/*[not(self::gml:LineStringSegment)] return local:addMessage('TR.invalidInterpolationFound', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id), 'elementName': name($elements[1]) }))

##### gmlas.d.3: Surface geometry elements click to expand contents

Verify that only gml:Polygon or gml:Surface are used, i.e. check that none of the disallowed GML surface object elements are used as child elements of a feature from the application schema.
Relevant requirements:

- IR Requirement Article 12 (1): Other Requirements and Rules. The value domain of spatial properties defined in this Regulation shall be restricted to the Simple Feature spatial schema as defined in Herring, John R. (ed.), OpenGIS® Implementation Standard for Geographic information – Simple feature access – Part 1: Common architecture, version 1.2.1, Open Geospatial Consortium, 2011, unless specified otherwise for a specific spatial data theme or type.

Note:

- Cadastral Parcel and Building 3D features are excluded from this requirement.

Source: Abstract Test Case 'Simple features', INSPIRE Data Specification Template, A.1.7

Status | Passed
Duration | 0.001 s
Assertion ID | EID3d7ad0b2-c9f5-4910-aa09-b3226b720f7d
Assertion URI | Link

Expression: let $featuresToInspect := $features[not(self::cp3:* or self::cp:* or self::bu-core3d3:* or self::bu-core3d:*)] let $featuresWithErrors := $featuresToInspect[.//*[self::gml:OrientableSurface|self::gml:CompositeSurface|self::gml:PolyhedralSurface|self::gml:Tin|self::gml:TriangulatedSurface]][position() le $limitErrors] return (if ($featuresWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id let $element := $feature//*[self::gml:OrientableSurface|self::gml:CompositeSurface|self::gml:PolyhedralSurface|self::gml:Tin|self::gml:TriangulatedSurface][1] return local:addMessage('TR.invalidSurfaceElementFound', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id), 'elementName': name($element) }))

##### gmlas.d.4: No non-planar interpolation click to expand contents

Verify that only planar interpolation is used, i.e. check that only PolygonPatch is used as a GML surface patch object elements in features from the application schema.
Relevant requirements:

- IR Requirement Article 12 (1): Other Requirements and Rules. The value domain of spatial properties defined in this Regulation shall be restricted to the Simple Feature spatial schema as defined in Herring, John R. (ed.), OpenGIS® Implementation Standard for Geographic information – Simple feature access – Part 1: Common architecture, version 1.2.1, Open Geospatial Consortium, 2011, unless specified otherwise for a specific spatial data theme or type.

Note:

- Cadastral Parcel and Building 3D features are excluded from this requirement.

Source: Abstract Test Case 'Simple features', INSPIRE Data Specification Template, A.1.7

Status | Passed
Duration | 0.001 s
Assertion ID | EID008b7c4f-b315-4596-b5e9-4a29910eb43f
Assertion URI | Link

Expression: let $featuresToInspect := $features[not(self::cp3:* or self::cp:* or self::bu-core3d3:* or self::bu-core3d:*)] let $featuresWithErrors := $featuresToInspect[.//gml:Surface/gml:patches/*[not(self::gml:PolygonPatch)]][position() le $limitErrors] return (if ($featuresWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id let $element := $feature//gml:Surface/gml:patches/*[not(self::gml:PolygonPatch)][1] return local:addMessage('TR.invalidSurfacePatchElementFound', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id), 'elementName': name($element) }))

##### gmlas.d.5: Geometry elements click to expand contents

Verify that only valid GML geometry elements are used, i.e. check that none of the disallowed GML geometry object elements are used as child elements of a feature from the application schema.
Relevant requirements:

- IR Requirement Article 12 (1): Other Requirements and Rules. The value domain of spatial properties defined in this Regulation shall be restricted to the Simple Feature spatial schema as defined in Herring, John R. (ed.), OpenGIS® Implementation Standard for Geographic information – Simple feature access – Part 1: Common architecture, version 1.2.1, Open Geospatial Consortium, 2011, unless specified otherwise for a specific spatial data theme or type.

Note:

- Cadastral Parcel and Building 3D features are excluded from this requirement.

Source: Abstract Test Case 'Simple features', INSPIRE Data Specification Template, A.1.7

Status | Passed
Duration | 0.001 s
Assertion ID | EID4f2f9722-897a-4bad-b11e-d4e119b6690d
Assertion URI | Link

Expression: let $featuresToInspect := $features[not(self::cp3:* or self::cp:* or self::bu-core3d3:* or self::bu-core3d:*)] let $featuresWithErrors := $featuresToInspect[.//*[self::gml:Solid|self::gml:MultiSolid|self::gml:CompositeSolid|self::gml:CompositeCurve|self::gml:Grid]][position() le $limitErrors] return (if ($featuresWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id let $element := $feature//*[self::gml:Solid|self::gml:MultiSolid|self::gml:CompositeSolid|self::gml:CompositeCurve|self::gml:Grid][1] return local:addMessage('TR.invalidGeometryElementFound', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id), 'elementName': name($element) }))

##### gmlas.d.6: Point coordinates in gml:pos click to expand contents

Verify that in points only gml:pos is used for coordinates.
Relevant requirements:

- IR Requirement Article 12 (1): Other Requirements and Rules. The value domain of spatial properties defined in this Regulation shall be restricted to the Simple Feature spatial schema as defined in Herring, John R. (ed.), OpenGIS® Implementation Standard for Geographic information – Simple feature access – Part 1: Common architecture, version 1.2.1, Open Geospatial Consortium, 2011, unless specified otherwise for a specific spatial data theme or type.

Note:

- Cadastral Parcel and Building 3D features are excluded from this requirement.

Source: Abstract Test Case 'Simple features', INSPIRE Data Specification Template, A.1.7

Status | Passed
Duration | 0.001 s
Assertion ID | EIDbc49770c-4eab-4330-8462-af0664ae0b80
Assertion URI | Link

Expression: let $featuresToInspect := $features[not(self::cp3:* or self::cp:* or self::bu-core3d3:* or self::bu-core3d:*)] let $featuresWithErrors := $featuresToInspect[.//gml:Point/*[not(self::gml:pos)]][position() le $limitErrors] return (if ($featuresWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id let $element := $feature//gml:Point/*[not(self::gml:pos)][1] return local:addMessage('TR.invalidPositionElementFound', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id), 'elementName': name($element), 'geometryType': 'point', 'posElementName': 'gml:pos' }))

##### gmlas.d.7: Curve/Surface coordinates in gml:posList click to expand contents

Verify that in curves and surfaces only gml:posList is used for coordinates.
Relevant requirements:

- IR Requirement Article 12 (1): Other Requirements and Rules. The value domain of spatial properties defined in this Regulation shall be restricted to the Simple Feature spatial schema as defined in Herring, John R. (ed.), OpenGIS® Implementation Standard for Geographic information – Simple feature access – Part 1: Common architecture, version 1.2.1, Open Geospatial Consortium, 2011, unless specified otherwise for a specific spatial data theme or type.

Note:

- Cadastral Parcel and Building 3D features are excluded from this requirement.

Source: Abstract Test Case 'Simple features', INSPIRE Data Specification Template, A.1.7

Status | Passed
Duration | 0.001 s
Assertion ID | EID894c6a96-4fb2-4921-ad98-1d2a52985887
Assertion URI | Link

Expression: let $featuresToInspect := $features[not(self::cp3:* or self::cp:* or self::bu-core3d3:* or self::bu-core3d:*)] let $featuresWithErrors := $featuresToInspect[.//*[self::gml:LineString|self::gml:LineStringSegment|self::gml:LinearRing]/*[not(self::gml:posList)]][position() le $limitErrors] return (if ($featuresWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id let $element := ($feature//*[self::gml:LineString|self::gml:LineStringSegment|self::gml:LinearRing|self::gml:Arc|self::gml:Circle]/*[not(self::gml:posList)])[1] return local:addMessage('TR.invalidPositionElementFound', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id), 'elementName': name($element), 'geometryType': 'curve/surface', 'posElementName': 'gml:posList' }))

##### gmlas.d.8: No array property elements click to expand contents

Verify that geometry aggregates do not use the GML array property elements, i.e. check that the only the regular property elements are used, but not the array property elements. For example, for a gml:MultiPoint, only gml:pointMember may be used, not gml:pointMembers.
Relevant requirements:

- IR Requirement Article 12 (1): Other Requirements and Rules. The value domain of spatial properties defined in this Regulation shall be restricted to the Simple Feature spatial schema as defined in Herring, John R. (ed.), OpenGIS® Implementation Standard for Geographic information – Simple feature access – Part 1: Common architecture, version 1.2.1, Open Geospatial Consortium, 2011, unless specified otherwise for a specific spatial data theme or type.

Note:

- Cadastral Parcel and Building 3D features are excluded from this requirement.

Source: Abstract Test Case 'Simple features', INSPIRE Data Specification Template, A.1.7

Status | Passed
Duration | 0.001 s
Assertion ID | EID160e4f83-e9c3-45c5-b684-20027f8f191a
Assertion URI | Link

Expression: let $featuresToInspect := $features[not(self::cp3:* or self::cp:* or self::bu-core3d3:* or self::bu-core3d:*)] let $featuresWithErrors := $featuresToInspect[.//*[self::gml:MultiPoint/gml:pointMembers|self::gml:MultiCurve/gml:curveMembers|self::gml:MultiSurface/gml:surfaceMembers|self::gml:MultiGeometry/gml:geometryMembers]][position() le $limitErrors] return (if ($featuresWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id let $element := ($feature//*[self::gml:MultiPoint|self::gml:MultiCurve|self::gml:MultiSurface|self::gml:MultiGeometry]/*[self::gml:pointMembers|self::gml:curveMembers|self::gml:surfaceMembers|self::gml:geometryMembers])[1] return local:addMessage('TR.arrayElementFound', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id), 'elementName': name($element) }))

##### gmlas.d.9: 1, 2 or 3 coordinate dimensions click to expand contents

Coordinate reference systems may have 1, 2 or 3 dimensions, i.e. check all occurances of srsDimension and for values greater than '3'.
Relevant requirements:

- IR Requirement Article 12 (1): Other Requirements and Rules. The value domain of spatial properties defined in this Regulation shall be restricted to the Simple Feature spatial schema as defined in Herring, John R. (ed.), OpenGIS® Implementation Standard for Geographic information – Simple feature access – Part 1: Common architecture, version 1.2.1, Open Geospatial Consortium, 2011, unless specified otherwise for a specific spatial data theme or type.

Note:

- Cadastral Parcel and Building 3D features are excluded from this requirement.

Source: Abstract Test Case 'Simple features', INSPIRE Data Specification Template, A.1.7

Status | Passed
Duration | 0.001 s
Assertion ID | EIDf9e92525-152a-41fa-9990-42691f39b1ce
Assertion URI | Link

Expression: let $featuresToInspect := $features[not(self::cp3:* or self::cp:* or self::bu-core3d3:* or self::bu-core3d:*)] let $featuresWithErrors := $featuresToInspect[.//@srsDimension > 3][position() le $limitErrors] return (if ($featuresWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id let $dimension := $feature//@srsDimension[. > 3][1] return local:addMessage('TR.tooManyDimensions', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id), 'dimension': string($dimension) }))

##### gmlas.d.10: Validate geometries (1) click to expand contents

Verify that in curves and surfaces only gml:posList is used for coordinates, i.e. validate all geometry elements of a feature from the application schema using a geometry library.
Relevant requirements:

- IR Requirement Article 12 (1): Other Requirements and Rules. The value domain of spatial properties defined in this Regulation shall be restricted to the Simple Feature spatial schema as defined in Herring, John R. (ed.), OpenGIS® Implementation Standard for Geographic information – Simple feature access – Part 1: Common architecture, version 1.2.1, Open Geospatial Consortium, 2011, unless specified otherwise for a specific spatial data theme or type.

Note:

- Cadastral Parcel and Building 3D features are excluded from this requirement.

Source: Abstract Test Case 'Simple features', INSPIRE Data Specification Template, A.1.7

Status | Passed
Duration | 0.641 s
Assertion ID | EID79aec969-3ca0-4190-a6e9-8b49682f414a
Assertion URI | Link

Expression: let $featuresToInspect := $features[not(self::cp3:* or self::cp:* or self::bu-core3d3:* or self::bu-core3d:*)] let $messages := for $feature in $featuresToInspect return try { let $vr := ggeo:validateAndReport($feature,'110') return if (xs:boolean($vr/ggeo:isValid)) then () else for $message in $vr/ggeo:message[@type='ERROR'] return local:addMessage('TR.invalidGeometry', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id), 'text': $message/text() }) } catch * { let $dummy := local:log('Processing feature ' || string($feature/@gml:id) || '. Exception: ' || $err:code || ' - ' || $err:description || ' [' || $err:module || ', line: ' || $err:line-number || ', column: ' || $err:column-number || ']') return () (: silently record the exception in the log, but do not raise errors in the test report as parsing exceptions are already reported in assertion gmlas.d.11 :) } return (if ($messages) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count(fn:distinct-values($messages//etf:argument[@token='gmlid']/text()))), $messages)

##### gmlas.d.11: Validate geometries (2) click to expand contents

Report any errors found while parsing GML geometries.
Relevant requirements:

- IR Requirement Article 12 (1): Other Requirements and Rules. The value domain of spatial properties defined in this Regulation shall be restricted to the Simple Feature spatial schema as defined in Herring, John R. (ed.), OpenGIS® Implementation Standard for Geographic information – Simple feature access – Part 1: Common architecture, version 1.2.1, Open Geospatial Consortium, 2011, unless specified otherwise for a specific spatial data theme or type.

Source: Abstract Test Case 'Simple features', INSPIRE Data Specification Template, A.1.7

Status | Passed
Duration | 0.001 s
Assertion ID | EID9aeba9b2-4b29-46bd-9bf7-7999eea9a173
Assertion URI | Link

Expression: if (map:size($geometryParsingErrors)=0) then 'PASSED' else ('FAILED', local:error-statistics('TR.featuresWithErrors', map:size($geometryParsingErrors)), for $key in map:keys($geometryParsingErrors)[position() le $limitErrors] return local:addMessage('TR.invalidGmlGeometry', map { 'filename': local:filename($features[@gml:id=$key]), 'featureType': local-name($features[@gml:id=$key]), 'gmlid': $key, 'description': map:get($geometryParsingErrors, $key) }))

### Code list values in basic data types
4
click to expand contents

Verify whether all attributes whose value type is a code list take the values set out therein. This is usually part of the tests of the corresponding application schema. However, for data types that are used across the INSPIRE application schemas, this is best done in this test suite to avoid duplicating the same test in many test suites. The relevant data types for the Annex I data themes with code list values are: GeographicalName.

Status | Passed
Duration | 0.040 s
Test case ID | EID2bb450fc-b68f-468e-85b6-56ee9741b731

##### gmlas.e.1: GrammaticalNumber attributes click to expand contents

When an attribute has a code list as its type, verify that the values comply with the definitions and include the values set out in Annex II of the regulation. For this attribute, the allowed values are specified in code list http://inspire.ec.europa.eu/codelist/GrammaticalNumberValue.
For datasets using version 3 of the GML application schema, the value is the last path element of the code list value URI and it is in the child text node. For datasets using version 4 of the GML application schema, the value is in the xlink:href XML attribute and is the HTTP URI of the code list value.
Relevant requirements:

- IR Requirement Article 4 (1): Types for the Exchange and Classification of Spatial Objects. For the exchange and classification of spatial objects from data sets meeting the conditions laid down in Article 4 of Directive 2007/2/EC, Member States shall use the spatial object types and associated data types, enumerations and code lists that are defined in Annexes II, III and IV for the themes the data sets relate to.
- IR Requirement Article 4 (3): Types for the Exchange and Classification of Spatial Objects. The enumerations and code lists used in attributes or association roles of spatial object types or data types shall comply with the definitions and include the values set out in Annex II. The enumeration and code list values are uniquely identified by language-neutral mnemonic codes for computers. The values may also include a language-specific name to be used for human interaction.
- IR Requirement Article 6 (1): Code Lists and Enumerations. Codelists shall be of one of the following types, as specified in the Annexes:
  1. code lists whose allowed values comprise only the values specified in this Regulation;
  2. code lists whose allowed values comprise the values specified in this Regulation and narrower values defined by data providers;
  3. code lists whose allowed values comprise the values specified in this Regulation and additional values at any level defined by data providers;
  4. code lists, whose allowed values comprise any values defined by data providers.
  For the purposes of points 2, 3 and 4, in addition to the allowed values, data providers may use the values specified in the relevant INSPIRE Technical Guidance document available on the INSPIRE web site of the Joint Research Centre.
- IR Requirement Article 6 (2): Code Lists and Enumerations. Code lists may be hierarchical. Values of hierarchical code lists may have a more generic parent value. Where the valid values of a hierarchical code list are specified in a table in this Regulation, the parent values are listed in the last column.
- IR Requirement Article 6 (3): Code Lists and Enumerations. Where, for an attribute whose type is a code list as referred to in points 2, 3 or 4 of paragraph 1, a data provider provides a value that is not specified in this Regulation, that value and its definition shall be made available in a register.
- IR Requirement Article 6 (4): Code Lists and Enumerations. Attributes or association roles of spatial object types or data types whose type is a code list may only take values that are allowed according to the specification of the code list.

Source: Abstract Test Case 'Code list values', INSPIRE Data Specification on Geographical Names, A.1.3

Status | Passed
Duration | 0.018 s
Assertion ID | EID12abc9dc-27ff-406f-8cdd-f55db5523c97
Assertion URI | Link

Expression: let $objects3 := $features/*/gn3:GeographicalName let $objects4 := $features/*/gn:GeographicalName let $messages := local:check-code-list-values($objects3, $objects4, 'grammaticalNumber', 'http://inspire.ec.europa.eu/codelist/GrammaticalNumberValue', 1) return (if ($messages) then 'FAILED' else 'PASSED', $messages)

##### gmlas.e.2: GrammaticalGender attributes click to expand contents

When an attribute has a code list as its type, verify that the values comply with the definitions and include the values set out in Annex II of the regulation. For this attribute, the allowed values are specified in code list http://inspire.ec.europa.eu/codelist/GrammaticalGenderValue.
For datasets using version 3 of the GML application schema, the value is the last path element of the code list value URI and it is in the child text node. For datasets using version 4 of the GML application schema, the value is in the xlink:href XML attribute and is the HTTP URI of the code list value.
Relevant requirements:

- IR Requirement Article 4 (1): Types for the Exchange and Classification of Spatial Objects. For the exchange and classification of spatial objects from data sets meeting the conditions laid down in Article 4 of Directive 2007/2/EC, Member States shall use the spatial object types and associated data types, enumerations and code lists that are defined in Annexes II, III and IV for the themes the data sets relate to.
- IR Requirement Article 4 (3): Types for the Exchange and Classification of Spatial Objects. The enumerations and code lists used in attributes or association roles of spatial object types or data types shall comply with the definitions and include the values set out in Annex II. The enumeration and code list values are uniquely identified by language-neutral mnemonic codes for computers. The values may also include a language-specific name to be used for human interaction.
- IR Requirement Article 6 (1): Code Lists and Enumerations. Codelists shall be of one of the following types, as specified in the Annexes:
  1. code lists whose allowed values comprise only the values specified in this Regulation;
  2. code lists whose allowed values comprise the values specified in this Regulation and narrower values defined by data providers;
  3. code lists whose allowed values comprise the values specified in this Regulation and additional values at any level defined by data providers;
  4. code lists, whose allowed values comprise any values defined by data providers.
  For the purposes of points 2, 3 and 4, in addition to the allowed values, data providers may use the values specified in the relevant INSPIRE Technical Guidance document available on the INSPIRE web site of the Joint Research Centre.
- IR Requirement Article 6 (2): Code Lists and Enumerations. Code lists may be hierarchical. Values of hierarchical code lists may have a more generic parent value. Where the valid values of a hierarchical code list are specified in a table in this Regulation, the parent values are listed in the last column.
- IR Requirement Article 6 (3): Code Lists and Enumerations. Where, for an attribute whose type is a code list as referred to in points 2, 3 or 4 of paragraph 1, a data provider provides a value that is not specified in this Regulation, that value and its definition shall be made available in a register.
- IR Requirement Article 6 (4): Code Lists and Enumerations. Attributes or association roles of spatial object types or data types whose type is a code list may only take values that are allowed according to the specification of the code list.

Source: Abstract Test Case 'Code list values', INSPIRE Data Specification on Geographical Names, A.1.3

Status | Passed
Duration | 0.007 s
Assertion ID | EID74abd92b-9225-4d73-a03f-db7bd3471bd6
Assertion URI | Link

Expression: let $objects3 := $features/*/gn3:GeographicalName let $objects4 := $features/*/gn:GeographicalName let $messages := local:check-code-list-values($objects3, $objects4, 'grammaticalGender', 'http://inspire.ec.europa.eu/codelist/GrammaticalGenderValue', 1) return (if ($messages) then 'FAILED' else 'PASSED', $messages)

##### gmlas.e.3: NameStatus attributes click to expand contents

When an attribute has a code list as its type, verify that the values comply with the definitions and include the values set out in Annex II of the regulation. For this attribute, the allowed values are specified in code list http://inspire.ec.europa.eu/codelist/NameStatusValue.
For datasets using version 3 of the GML application schema, the value is the last path element of the code list value URI and it is in the child text node. For datasets using version 4 of the GML application schema, the value is in the xlink:href XML attribute and is the HTTP URI of the code list value.
Relevant requirements:

- IR Requirement Article 4 (1): Types for the Exchange and Classification of Spatial Objects. For the exchange and classification of spatial objects from data sets meeting the conditions laid down in Article 4 of Directive 2007/2/EC, Member States shall use the spatial object types and associated data types, enumerations and code lists that are defined in Annexes II, III and IV for the themes the data sets relate to.
- IR Requirement Article 4 (3): Types for the Exchange and Classification of Spatial Objects. The enumerations and code lists used in attributes or association roles of spatial object types or data types shall comply with the definitions and include the values set out in Annex II. The enumeration and code list values are uniquely identified by language-neutral mnemonic codes for computers. The values may also include a language-specific name to be used for human interaction.
- IR Requirement Article 6 (1): Code Lists and Enumerations. Codelists shall be of one of the following types, as specified in the Annexes:
  1. code lists whose allowed values comprise only the values specified in this Regulation;
  2. code lists whose allowed values comprise the values specified in this Regulation and narrower values defined by data providers;
  3. code lists whose allowed values comprise the values specified in this Regulation and additional values at any level defined by data providers;
  4. code lists, whose allowed values comprise any values defined by data providers.
  For the purposes of points 2, 3 and 4, in addition to the allowed values, data providers may use the values specified in the relevant INSPIRE Technical Guidance document available on the INSPIRE web site of the Joint Research Centre.
- IR Requirement Article 6 (2): Code Lists and Enumerations. Code lists may be hierarchical. Values of hierarchical code lists may have a more generic parent value. Where the valid values of a hierarchical code list are specified in a table in this Regulation, the parent values are listed in the last column.
- IR Requirement Article 6 (3): Code Lists and Enumerations. Where, for an attribute whose type is a code list as referred to in points 2, 3 or 4 of paragraph 1, a data provider provides a value that is not specified in this Regulation, that value and its definition shall be made available in a register.
- IR Requirement Article 6 (4): Code Lists and Enumerations. Attributes or association roles of spatial object types or data types whose type is a code list may only take values that are allowed according to the specification of the code list.

Source: Abstract Test Case 'Code list values', INSPIRE Data Specification on Geographical Names, A.1.3

Status | Passed
Duration | 0.007 s
Assertion ID | EIDa81c147e-72b2-4054-9d3d-26b1091b641f
Assertion URI | Link

Expression: let $objects3 := $features/*/gn3:GeographicalName let $objects4 := $features/*/gn:GeographicalName let $messages := local:check-code-list-values($objects3, $objects4, 'nameStatus', 'http://inspire.ec.europa.eu/codelist/NameStatusValue', 1) return (if ($messages) then 'FAILED' else 'PASSED', $messages)

##### gmlas.e.4: Nativeness attributes click to expand contents

When an attribute has a code list as its type, verify that the values comply with the definitions and include the values set out in Annex II of the regulation. For this attribute, the allowed values are specified in code list http://inspire.ec.europa.eu/codelist/NativenessValue.
For datasets using version 3 of the GML application schema, the value is the last path element of the code list value URI and it is in the child text node. For datasets using version 4 of the GML application schema, the value is in the xlink:href XML attribute and is the HTTP URI of the code list value.
Relevant requirements:

- IR Requirement Article 4 (1): Types for the Exchange and Classification of Spatial Objects. For the exchange and classification of spatial objects from data sets meeting the conditions laid down in Article 4 of Directive 2007/2/EC, Member States shall use the spatial object types and associated data types, enumerations and code lists that are defined in Annexes II, III and IV for the themes the data sets relate to.
- IR Requirement Article 4 (3): Types for the Exchange and Classification of Spatial Objects. The enumerations and code lists used in attributes or association roles of spatial object types or data types shall comply with the definitions and include the values set out in Annex II. The enumeration and code list values are uniquely identified by language-neutral mnemonic codes for computers. The values may also include a language-specific name to be used for human interaction.
- IR Requirement Article 6 (1): Code Lists and Enumerations. Codelists shall be of one of the following types, as specified in the Annexes:
  1. code lists whose allowed values comprise only the values specified in this Regulation;
  2. code lists whose allowed values comprise the values specified in this Regulation and narrower values defined by data providers;
  3. code lists whose allowed values comprise the values specified in this Regulation and additional values at any level defined by data providers;
  4. code lists, whose allowed values comprise any values defined by data providers.
  For the purposes of points 2, 3 and 4, in addition to the allowed values, data providers may use the values specified in the relevant INSPIRE Technical Guidance document available on the INSPIRE web site of the Joint Research Centre.
- IR Requirement Article 6 (2): Code Lists and Enumerations. Code lists may be hierarchical. Values of hierarchical code lists may have a more generic parent value. Where the valid values of a hierarchical code list are specified in a table in this Regulation, the parent values are listed in the last column.
- IR Requirement Article 6 (3): Code Lists and Enumerations. Where, for an attribute whose type is a code list as referred to in points 2, 3 or 4 of paragraph 1, a data provider provides a value that is not specified in this Regulation, that value and its definition shall be made available in a register.
- IR Requirement Article 6 (4): Code Lists and Enumerations. Attributes or association roles of spatial object types or data types whose type is a code list may only take values that are allowed according to the specification of the code list.

Source: Abstract Test Case 'Code list values', INSPIRE Data Specification on Geographical Names, A.1.3

Status | Passed
Duration | 0.008 s
Assertion ID | EID5f5466b9-1f77-4577-aef8-2fdee94f7ad2
Assertion URI | Link

Expression: let $objects3 := $features/*/gn3:GeographicalName let $objects4 := $features/*/gn:GeographicalName let $messages := local:check-code-list-values($objects3, $objects4, 'nativeness', 'http://inspire.ec.europa.eu/codelist/NativenessValue', 1) return (if ($messages) then 'FAILED' else 'PASSED', $messages)

### Constraints
1
click to expand contents

Verify that the features provided in the dataset adhere to the constraints specified in the INSPIRE application schema. This is usually part of the tests of the corresponding application schema. However, for data types that are used across the INSPIRE application schemas, this is best done in this test suite to avoid duplicating the same test in many test suites. The relevant data types for the Annex I data themes with constraints are: GeographicalName.

Status | Passed
Duration | 0.001 s
Test case ID | EID72dd801d-cd5f-409b-b07a-f161106c5ec2

##### gmlas.f.1: At least one of the two attributes pronunciationSoundLink and pronunciationIPA shall not be void click to expand contents

At least one of the two attributes pronunciationSoundLink and pronunciationIPA shall not be void
OCL: "inv: self.pronounciationIPA -> notEmpty() or self.pronounciationSoundLink -> notEmpty()"
Verify that for all features either or both pronunciationSoundLink or pronunciationIPA is not void.
Relevant requirements:

- IR Requirement Article 4 (2): Types for the Exchange and Classification of Spatial Objects. Spatial object types and data types shall comply with the definitions and constraints and include the attributes and association roles set out in the Annexes.

Source: Abstract Test Case 'Constraints', INSPIRE Data Specification on Geographical Names, A.1.6

Status | Passed
Duration | 0.001 s
Assertion ID | EID719af9fc-ad3d-4c89-85ed-6507712f634a
Assertion URI | Link

Expression: let $featuresWithErrors := $features[*/*:GeographicalName/*:pronunciation[not(@xsi:nil='true') and not(*/*:pronunciationSoundLink[not(@xsi:nil='true')] or */*:pronunciationIPA[not(@xsi:nil='true')])]][position() le $limitErrors] return (if ($featuresWithErrors) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id return local:addMessage('TR.constraintViolation', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id), 'constraint': 'At least one of the two attributes pronunciationSoundLink and pronunciationIPA shall not be void, if the pronunciation property is provided.', 'additionalInfo' : '' }))

## Conformance class: GML application schemas, Natural Risk Zones
2

This test suite examines the GML encoding of spatial objects specified in the INSPIRE GML application schema 'Natural Risk Zones'. Both currently approved GML application schema versions (3.0 and 4.0) are tested.
This is a draft version. It has limitations and is expected to contain errors. Please report any issues or problems in GitHub.
Known limitations are documented in the description of the applicable test case or test assertion. There is a general limitation in all assertions that extensions in additional application schemas are only supported, if the unqualified name of the feature type in the extension is the same as the name of the feature type in the INSPIRE application schema.
Source: Conformance Class 'GML application schema, Natural Risk Zones'
Pre-requisite conformance classes:

- Conformance Class 'INSPIRE GML application schemas'

Status | Passed
Duration | 0.301 s
Test suite ID | EIDeca530d8-a4c0-421a-b1c3-4409fe31e10b
Author | Consortium Bilbomatica, Guadaltel y Geograma
Date created | 10/07/2020 13:30:00 GMT
Version | 0.1.3
Last editor | Consortium Bilbomatica y Guadaltel
Last updated | 14/05/2024 16:30:00 GMT
Reference | Link
Hash | CBF29CE484222325

### Basic test
1
click to expand contents

Verify that the spatial data set contains at least one Natural Risk Zones feature.

Status | Passed
Duration | 0.001 s
Test case ID | EIDb8838ed6-2a76-4064-8ada-cdfe8ba1d65f

##### nz-gml.a.1: Feature in dataset click to expand contents

Check that the set of features in the spatial data set is not empty. Otherwise report noFeature.
Source: Abstract Test Case 'Basic test', INSPIRE Data Specification on Natural Risk Zones, A.5.4, A.5.5

Status | Passed
Duration | 0.001 s
Assertion ID | EID75a440ee-b2a3-45cb-a2c6-46cc05381514
Assertion URI | Link

Expression: let $featuresFromAppSchema := $features[descendant-or-self::nz-core:ExposedElement | descendant-or-self::nz-core:HazardArea | descendant-or-self::nz-core:ObservedEvent | descendant-or-self::nz-core:RiskZone | descendant-or-self::nz-core:ExposedElementCoverage | descendant-or-self::nz-core:HazardCoverage | descendant-or-self::nz-core:ObservedEventCoverage | descendant-or-self::nz-core:RiskCoverage] return (if ($featuresFromAppSchema) then 'PASSED' else 'FAILED', if (not($featuresFromAppSchema)) then local:addMessage('TR.noFeature', map { 'theme': 'Natural Risk Zones' }) else ())

### Validation against INSPIRE official schema
1
click to expand contents

Verify that all XML documents validate against the latest INSPIRE official schema(s).

Status | Passed
Duration | 0.300 s
Test case ID | EIDe64e491e-c6b1-4441-b35d-65c1468aa0ff

##### nz-gml.b.1: validate XML documents against official schema click to expand contents

Validate each document against the latest INSPIRE official schema(s): https://inspire.ec.europa.eu/schemas/nz-core/5.0/NaturalRiskZonesCore.xsd, using strict XML schema validation.
Relevant requirements:

- IR Requirement Article 3: Common Types. Types that are common to several of the themes listed in Annexes I, II and III to Directive 2007/2/EC shall conform to the definitions and constraints and include the attributes and association roles set out in Annex I.
- IR Requirement Article 4 (2): Types for the Exchange and Classification of Spatial Objects. Spatial object types and data types shall comply with the definitions and constraints and include the attributes and association roles set out in the Annexes.
- IR Requirement Article 4 (3): Types for the Exchange and Classification of Spatial Objects. The enumerations and code lists used in attributes or association roles of spatial object types or data types shall comply with the definitions and include the values set out in Annex II. The enumeration and code list values are uniquely identified by language-neutral mnemonic codes for computers. The values may also include a language-specific name to be used for human interaction.
- IR Requirement Article 5 (2): Types. Types that are a sub-type of another type shall also include all this type‘s attributes and association roles.
- IR Requirement Article 5 (3): Types. Abstract types shall not be instantiated.
- IR Requirement Article 6 (5): Code Lists and Enumerations. Attributes or association roles of spatial object types or data types that have an enumeration type may only take values from the lists specified for the enumeration type.
- IR Requirement Article 9 (1): Identifier Management. The data type Identifier defined in Section 2.1 of Annex I shall be used as a type for the external object identifier of a spatial object.
- TG Requirement 1: Spatial object types and data types shall comply with the multiplicities defined for the attributes and association roles in this section.
- TG Requirement 6: Data instance (XML) documents shall validate without error against the provided XML schema.

Source: Abstract Test Case 'Validation against INSPIRE official schema'

Status | Passed
Duration | 0.300 s
Assertion ID | EID724acd04-f7bc-4ef6-ac20-34fed73a1cf3
Assertion URI | Link

Expression: let $errors := (for $file in $db return try { let $root := $file/element() let $logentry := local:log('Validating ' || local:filename($root)) let $start := prof:current-ms() let $schema := local:getXSDSchemaWithVersion( "nz-core", "NaturalRiskZonesCore", "5.0" ) let $query := "declare variable $file external; declare variable $schema external; validate:xsd-info($file,$schema)" let $messages := xquery:eval($query, map{ 'file': $file, 'schema': $schema }, map{ 'timeout': 60 }) (:let $messages := validate:xsd-info($file):) let $duration := prof:current-ms()-$start let $errors := count($messages) let $logentry := local:log('Duration: ' || $duration || ' ms. Errors: ' || $errors || '.') return if ($errors>0 and exists($logFile)) then (local:addMessage('TR.invalidSchema', map { 'filename': local:filename($root), 'count': string($errors) }), for $message in $messages return local:addMessage('TR.xmlSchemaError', map { 'filename': local:filename($root), 'error': $message })) else () } catch * { let $logerror := local:log('Exception: ' || $err:description) return local:addMessage('TR.timeoutFileOperation', map { 'filename': local:filename($file/element()), 'description': $err:description }) } )[position() le $limitErrors] return (if ($errors) then 'FAILED' else 'PASSED', local:error-statistics('TR.filesWithErrors', count($errors[@ref eq 'TR.invalidSchema'])), $errors[position() le $limitErrors])

## Conformance class: Application schema, Natural Risk Zones
5

This test suite examines requirements associated with the application schema.
This is a draft version. It has limitations and is expected to contain errors. Please report any issues or problems in GitHub.
Known limitations are documented in the description of the applicable test case or test assertion. There is a general limitation in all assertions that extensions in additional application schemas are only supported, if the unqualified name of the feature type in the extension is the same as the name of the feature type in the INSPIRE application schema.
Source: Conformance Class 'Application Schema, Natural Risk Zones'
Pre-requisite conformance classes:

- Conformance Class 'GML application schemas, Natural Risk Zones'

Status | Passed, manual checks required
Duration | 0.067 s
Test suite ID | EID5aab5d8a-e432-47dd-b072-7cbf520035be
Author | Consortium Bilbomatica, Guadaltel y Geograma
Date created | 10/07/2020 13:30:00 GMT
Version | 0.1.1
Last editor | Consortium Bilbomatica y Guadaltel
Last updated | 14/05/2024 16:30:00 GMT
Reference | Link
Hash | CBF29CE484222325

### Code list values
2
click to expand contents

Verify whether all attributes whose value type is a code list take the values set out therein.

Status | Passed, manual checks required
Duration | 0.066 s
Test case ID | EID51545c50-5ce1-4585-95f5-16b40fe955a4

##### nz-as.a.1: hazardCategory click to expand contents

When an attribute has a code list as its type, verify that the values comply with the definitions and include the values set out in Annex II, III and IV of the Implementing Rule. To pass this test verify that any instance of an attribute:

- takes only values explicitly specified in the INSPIRE code list register when the code list‘s extensibility is 'none'.
- takes only a value explicitly specified in the INSPIRE code list register or shall take a value that is narrower (i.e. more specific) than those explicitly specified in the application schema when the code list‘s extensibility is 'narrower'.
- takes values explicitly specified in the INSPIRE code list register when the code list‘s extensibility is 'open' or if a value is not one of the values listed in the code list register check that any extensions do not overlap with the code lists that are defined in Annexes II, III and IV of the Implementing Rule and that all extensions conform to the requirements (This last check is a manual test).

.
The following check is performed for every feature in the dataset, for the 'narrower' codelist:

- Check that all the hazardCategory elements has a xlink:href attribute pointing to a pre-defined value. If the check fails a manual check will be required asking to review the code list definition in order to verify that any extensions do not overlap with the code lists that are defined in Annexes II, III and IV of the Implementing Rule. In particular, for the 'narrower' codelist the extended values shall refer to a parent value defined by the Implementing Rule. If the check fails report reviewCodeListValue.

Source: Abstract Test Case 'Code list values', INSPIRE Data Specification on Natural Risk Zones, A.4.2, (A.5.3.6.1)

Status | Passed, manual checks required
Duration | 0.038 s
Assertion ID | EID206276fc-1547-406b-a1bc-0cb875dcdccb
Assertion URI | Link

Expression: let $codelist := 'http://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue' let $codelisturl := 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/NaturalHazardCategoryValue.en.xml' let $valid_href := fn:doc($codelisturl)/*:codelist/*:containeditems/*:value/@id let $property_string := 'NaturalHazardCategoryValue' let $features_selected := $features[self::nz-core:ObservedEvent|self::nz-core:HazardArea|self::nz-core:RiskZone|self::nz-core:ExposedElement] let $messages := let $this_features := for $this_feature in $features_selected return if (name($this_feature) = 'nz-core:ExposedElement') then $this_feature/nz-core:assessmentOfVulnerability else if(name($this_feature) = 'nz-core:RiskZone') then $this_feature/nz-core:sourceOfRisk else if(name($this_feature) = 'nz-core:ObservedEvent' or name($this_feature) = 'nz-core:HazardArea') then $this_feature/nz-core:typeOfHazard else () for $actual_feature in $this_features let $feature := if (name($actual_feature) = 'nz-core:assessmentOfVulnerability') then $actual_feature/nz-core:VulnerabilityAssessment/nz-core:sourceOfVulnerability else $actual_feature let $envDom := $feature/nz-core:NaturalHazardClassification return if((name($actual_feature/..) = 'nz-core:ExposedElement' and exists($envDom) and not(exists($envDom/nz-core:hazardCategory))) or (not(name($actual_feature/..) = 'nz-core:ExposedElement') and not(exists($envDom/nz-core:hazardCategory)))) then local:addMessage('TR.missingElementNaturalRiskZone', map {'filename': local:filename($actual_feature/..), 'featureType':local-name($actual_feature/..), 'gmlid': string($actual_feature/../@*:id), 'property': 'nz-core:hazardCategory'}) else if((name($actual_feature/..) = 'nz-core:ExposedElement' and exists($envDom) and not(exists($envDom/nz-core:hazardCategory/@xlink:href))) or (not(name($actual_feature/..) = 'nz-core:ExposedElement') and not(exists($envDom/nz-core:hazardCategory/@xlink:href)))) then local:addMessage('TR.missingAttributeRiskZone', map {'filename': local:filename($actual_feature/..), 'featureType':local-name($actual_feature/..), 'gmlid': string($actual_feature/../@*:id), 'property': $property_string, 'attribute': 'xlink:href'}) else if (count($envDom/nz-core:hazardCategory) > 1) then local:addMessage('TR.wrongMultiplicitySpatialRepresentation', map {'filename': local:filename($actual_feature/..), 'featureType':local-name($actual_feature/..), 'id': string($actual_feature/../@*:id), 'element': 'nz-core:hazardCategory'}) else if((name($actual_feature/..) = 'nz-core:ExposedElement' and exists($envDom) and not($envDom/nz-core:hazardCategory/@xlink:href = $valid_href)) or (not(name($actual_feature/..) = 'nz-core:ExposedElement') and not($envDom/nz-core:hazardCategory/@xlink:href = $valid_href))) then local:addMessage('TR.manual.reviewCodeListValue', map {'filename': local:filename($actual_feature/..), 'featureType':local-name($actual_feature/..), 'gmlid': string($actual_feature/../@*:id), 'property': $property_string, 'value': string($envDom/nz-core:hazardCategory/@xlink:href), 'count': count($feature/nz-core:NaturalHazardClassification/nz-core:hazardCategory/@xlink:href = $envDom/@xlink:href)}) else () return (if ($messages and not($messages/@ref = ('TR.manual.reviewCodeListValue'))) then 'FAILED' else if($messages/@ref = ('TR.manual.reviewCodeListValue') and not($messages/@ref != ('TR.manual.reviewCodeListValue'))) then 'PASSED_MANUAL' else if($messages and $messages/@ref != ('TR.manual.reviewCodeListValue')) then 'FAILED' else 'PASSED', local:error-statistics('TR.recordsWithErrors', count(fn:distinct-values($messages//etf:argument[@token='id']/text()))), $messages)
Messages XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol. XML document 'hazard_area.gml', HazardArea '': The property 'NaturalHazardCategoryValue' has a value 'https://inspire.ec.europa.eu/codelist/NaturalHazardCategoryValue/flood' that is not one of the pre-defined values in the INSPIRE data specification. The same value is used by 1 other features in the dataset, too. Extensions to the pre-defined values are allowed, but must not overlap with one of the pre-defined values and be consistent with the specification of the property. Please review the definition of the value. Please note that the URIs of all code list values from the INSPIRE Registry shall be referenced using the http protocol.

##### nz-as.a.2: exposedElementCategory click to expand contents

When an attribute has a code list as its type, verify that the values comply with the definitions and include the values set out in Annex II, III and IV of the Implementing Rule. To pass this test verify that any instance of an attribute:

- takes only values explicitly specified in the INSPIRE code list register when the code list‘s extensibility is 'none'.
- takes only a value explicitly specified in the INSPIRE code list register or shall take a value that is narrower (i.e. more specific) than those explicitly specified in the application schema when the code list‘s extensibility is 'narrower'.
- takes values explicitly specified in the INSPIRE code list register when the code list‘s extensibility is 'open' or if a value is not one of the values listed in the code list register check that any extensions do not overlap with the code lists that are defined in Annexes II, III and IV of the Implementing Rule and that all extensions conform to the requirements (This last check is a manual test).

.
The following check is performed for every feature in the dataset, for the 'open' codelist:

- Check that all the exposedElementCategory elements has a xlink:href attribute pointing to a pre-defined value. If the check fails a manual check will be required asking to review the code list definition in order to verify that any extensions do not overlap with the code lists that are defined in Annexes II, III and IV of the Implementing Rule. If the check fails report reviewCodeListValue.

Source: Abstract Test Case 'Code list values', INSPIRE Data Specification on Natural Risk Zones, A.4.2, (A.5.3.6.1)

Status | Passed
Duration | 0.028 s
Assertion ID | EID1be28c80-d444-4220-b510-ab666e91723a
Assertion URI | Link

Expression: let $codelist := 'http://inspire.ec.europa.eu/codelist/ExposedElementCategoryValue' let $codelisturl := 'https://inspire.ec.europa.eu/codelist/ExposedElementCategoryValue/ExposedElementCategoryValue.en.xml' let $valid_href := fn:doc($codelisturl)/*:codelist/*:containeditems/*:value/@id let $property_string := 'ExposedElementCategoryValue' let $features_selected := $features[self::nz-core:ExposedElementCoverage|self::nz-core:ExposedElement] let $messages := let $this_features := for $this_feature in $features_selected return if (name($this_feature) = 'nz-core:ExposedElement') then $this_feature/nz-core:assessmentOfVulnerability else if(name($this_feature) = 'nz-core:ExposedElementCoverage') then $this_feature/nz-core:typeOfElement else () for $actual_feature in $this_features let $feature := if (name($actual_feature) = 'nz-core:assessmentOfVulnerability') then $actual_feature/nz-core:VulnerabilityAssessment/nz-core:typeOfElement else $actual_feature let $envDom := $feature/nz-core:ExposedElementClassification return if(exists($envDom) and not(exists($envDom/nz-core:exposedElementCategory))) then local:addMessage('TR.missingElementNaturalRiskZone', map {'filename': local:filename($actual_feature), 'featureType':local-name($actual_feature/..), 'gmlid': string($actual_feature/../@*:id), 'property': 'nz-core:exposedElementCategory'}) else if(exists($envDom) and not(exists($envDom/nz-core:exposedElementCategory/@xlink:href))) then local:addMessage('TR.missingAttributeRiskZone', map {'filename': local:filename($actual_feature), 'featureType':local-name($actual_feature/..), 'gmlid': string($actual_feature/../@*:id), 'property': $property_string, 'attribute': 'xlink:href'}) else if (count($envDom/nz-core:exposedElementCategory) > 1) then local:addMessage('TR.wrongMultiplicitySpatialRepresentation', map {'filename': local:filename($actual_feature), 'featureType':local-name($actual_feature/..), 'id': string($actual_feature/../@*:id), 'element': 'nz-core:hazardCategory'}) else if(exists($envDom) and not($envDom/nz-core:exposedElementCategory/@xlink:href = $valid_href)) then local:addMessage('TR.manual.reviewCodeListValue', map {'filename': local:filename($actual_feature), 'featureType':local-name($actual_feature/..), 'gmlid': string($actual_feature/../@*:id), 'property': $property_string, 'value': string($envDom/nz-core:exposedElementCategory/@xlink:href), 'count': count($feature/nz-core:NaturalHazardClassification/nz-core:hazardCategory/@xlink:href = $envDom/@xlink:href)}) else () return (if ($messages and not($messages/@ref = ('TR.manual.reviewCodeListValue'))) then 'FAILED' else if($messages/@ref = ('TR.manual.reviewCodeListValue') and not($messages/@ref != ('TR.manual.reviewCodeListValue'))) then 'PASSED_MANUAL' else if($messages and $messages/@ref != ('TR.manual.reviewCodeListValue')) then 'FAILED' else 'PASSED', local:error-statistics('TR.recordsWithErrors', count(fn:distinct-values($messages//etf:argument[@token='id']/text()))), $messages)

### Constraints
3
click to expand contents

Verify that the features provided in the dataset adhere to the constraints specified in the INSPIRE application schema.

Status | Passed
Duration | 0.001 s
Test case ID | EID633b69a5-17f4-423c-ab6a-4725ba278ad7

##### nz-as.b.1: sourceOfSpatialRepresentation click to expand contents

Check that if the sourceOfSpatialRepresentation association role is empty, the geometry of the ExposedElement spatial object shall be provided. If the exposed element spatial object is provided with a spatial representation, then the object does not have to be linked to any other spatial object defined in another INSPIRE theme. If the exposed element spatial object is NOT provided with a spatial representation, then it shall reference another object defined in another INSPIRE theme by using the association sourceOfSpatialRepresentation.
Source: Abstract Test Case 'Constraints', INSPIRE Data Specification on Natural Risk Zones, A.4.2, (A.5.3.6.1)

Status | Passed
Duration | 0.001 s
Assertion ID | EID5ebcc7d0-d296-45a6-a479-dad4d75fe01e
Assertion URI | Link

Expression: let $features_selected := $features[self::nz-core:ExposedElement] let $urlssp := $features_selected/nz-core:sourceOfSpatialRepresentation/@xlink:href let $mapsp := local:check-resource-uris($urlssp, 30, true()) let $urlsg := $features_selected/nz-core:geometry/@xlink:href let $mapg := local:check-resource-uris($urlsg, 30, true()) let $messages := for $feature in $features_selected return if (not(exists($feature/nz-core:geometry)) and not(exists($feature/nz-core:sourceOfSpatialRepresentation))) then local:addMessage('TR.constraintViolation', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@*:id), 'constraint': ' sourceOfSpatialRepresentation association role or geometry are present', 'additionalInfo':''}) else if (count($feature/nz-core:sourceOfSpatialRepresentation) > 1) then local:addMessage('TR.wrongMultiplicitySpatialRepresentation', map {'filename': local:filename($feature), 'id': string($feature/@*:id), 'element': 'nz-core:sourceOfSpatialRepresentation'}) else if (count($feature/nz-core:geometry) > 1) then local:addMessage('TR.wrongMultiplicitySpatialRepresentation', map {'filename': local:filename($feature), 'id': string($feature/@*:id), 'element':'nz-core:geometry'}) else if (not(exists($feature/nz-core:geometry)) and exists($feature/nz-core:sourceOfSpatialRepresentation)) then let $dummy := "this variable is needed here to do not receive an incomplete if expression error" return if (not(exists($feature/nz-core:sourceOfSpatialRepresentation/@xlink:href)) and not(exists($feature/nz-core:sourceOfSpatialRepresentation/@nilReason)) and not(has-children($feature/nz-core:sourceOfSpatialRepresentation))) then local:addMessage('TR.constraintViolation', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@*:id), 'constraint': 'sourceOfSpatialRepresentation association role or geometry are present', 'additionalInfo':''}) else if (exists($feature/nz-core:sourceOfSpatialRepresentation/@xlink:href)) then let $url := string($feature/nz-core:sourceOfSpatialRepresentation/@xlink:href) let $validuri := map:get($mapsp, $url) return if ($validuri = 'notHTTP') then local:addMessage('TR.urlNotHttp', map { 'filename': local:filename($feature), 'id': string($feature/@*:id), 'url': $url }) else if ($validuri = 'idNotFound') then local:addMessage('TR.idNotFound', map { 'filename': local:filename($feature), 'id': string($feature/@*:id), 'url': $url }) else if (starts-with($validuri, 'EXCEPTION')) then local:addMessage('TR.resourceNotAccessibleException', map { 'filename': local:filename($feature), 'id': string($feature/@*:id), 'url': $url, 'message': substring-after($validuri, 'EXCEPTION ') }) else if (matches($validuri,'^\d{3}$')) then local:addMessage('TR.resourceNotAccessible', map { 'filename': local:filename($feature), 'id': string($feature/@*:id), 'url': $url, 'status' : $validuri }) else () else () else if (not(exists($feature/nz-core:sourceOfSpatialRepresentation)) and exists($feature/nz-core:geometry)) then let $dummy := "this variable is needed here to do not receive an incomplete if expression error" return if (not(exists($feature/nz-core:geometry/@xlink:href)) and not(exists($feature/nz-core:geometry/@nilReason)) and not(has-children($feature/nz-core:geometry))) then local:addMessage('TR.constraintViolation', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@*:id), 'constraint': 'sourceOfSpatialRepresentation association role or geometry are present', 'additionalInfo':''}) else if (exists($feature/nz-core:geometry/@xlink:href)) then let $url := string($feature/nz-core:geometry/@xlink:href) let $validuri := map:get($mapg, $url) return if ($validuri = 'notHTTP') then local:addMessage('TR.urlNotHttp', map { 'filename': local:filename($feature), 'id': string($feature/@*:id), 'url': $url }) else if ($validuri = 'idNotFound') then local:addMessage('TR.idNotFound', map { 'filename': local:filename($feature), 'id': string($feature/@*:id), 'url': $url }) else if (starts-with($validuri, 'EXCEPTION')) then local:addMessage('TR.resourceNotAccessibleException', map { 'filename': local:filename($feature), 'id': string($feature/@*:id), 'url': $url, 'message': substring-after($validuri, 'EXCEPTION ') }) else if (matches($validuri,'^\d{3}$')) then local:addMessage('TR.resourceNotAccessible', map { 'filename': local:filename($feature), 'id': string($feature/@*:id), 'url': $url, 'status' : $validuri }) else () else () else () return (if ($messages) then 'FAILED' else 'PASSED', local:error-statistics('TR.recordsWithErrors', count(fn:distinct-values($messages//etf:argument[@token='id']/text()))), $messages)

##### nz-as.b.2: LevelOrIntensity click to expand contents

Check that for the data type LevelOrIntensity either the qualitative value or the quantitative value is provided.
Source: Abstract Test Case 'Constraints', INSPIRE Data Specification on Natural Risk Zones, A.4.2, (A.5.3.6.1)

Status | Passed
Duration | 0.001 s
Assertion ID | EID7d010fd2-29e5-4756-a0da-01a9cdfb87f5
Assertion URI | Link

Expression: let $features_selected := $features[self::nz-core:*] let $messages := for $feature in $features_selected//nz-core:LevelOrIntensity return if (count($feature/nz-core:qualitativeValue) = 0 and count($feature/nz-core:quantitativeValue) = 0) then local:addMessage('TR.missingElementNaturalRiskZone', map {'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@*:id), 'property':'nz-core:qualitativeValue or nz-core:quantitativeValue'}) else if (count($feature/nz-core:qualitativeValue) > 1) then local:addMessage('TR.wrongMultiplicitySpatialRepresentation', map {'filename': local:filename($feature), 'id': string($feature/@*:id), 'element':'nz-core:qualitativeValue'}) else if (count($feature/nz-core:quantitativeValue) > 1) then local:addMessage('TR.wrongMultiplicitySpatialRepresentation', map {'filename': local:filename($feature), 'id': string($feature/@*:id), 'element':'nz-core:quantitativeValue'}) else if (exists($feature/nz-core:qualitativeValue) and exists($feature/nz-core:quantitativeValue) and string-length($feature/nz-core:quantitativeValue) = 0 and not(exists($feature/nz-core:quantitativeValue/@nilReason)) and string-length($feature/nz-core:qualitativeValue) = 0 and not(exists($feature/nz-core:qualitativeValue/@nilReason))) then local:addMessage('TR.constraintViolation', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@*:id), 'constraint': 'qualitativeValue or quantitativeValue roles must not be empty', 'additionalInfo':''}) else if (not(exists($feature/nz-core:quantitativeValue) and (string-length($feature/nz-core:quantitativeValue) != 0 or exists($feature/nz-core:quantitativeValue/@nilReason))) and exists($feature/nz-core:qualitativeValue) and string-length($feature/nz-core:qualitativeValue) = 0 and not(exists($feature/nz-core:qualitativeValue/@nilReason))) then local:addMessage('TR.constraintViolation', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@*:id), 'constraint': 'qualitativeValue or quantitativeValue roles must not be empty', 'additionalInfo':''}) else if (not(exists($feature/nz-core:qualitativeValue) and (string-length($feature/nz-core:qualitativeValue) != 0 or exists($feature/nz-core:qualitativeValue/@nilReason))) and exists($feature/nz-core:quantitativeValue) and string-length($feature/nz-core:quantitativeValue) = 0 and not(exists($feature/nz-core:quantitativeValue/@nilReason))) then local:addMessage('TR.constraintViolation', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@*:id), 'constraint': 'qualitativeValue or quantitativeValue roles must not be empty', 'additionalInfo':''}) else () return (if ($messages) then 'FAILED' else 'PASSED', local:error-statistics('TR.recordsWithErrors', count(fn:distinct-values($messages//etf:argument[@token='id']/text()))), $messages)

##### nz-as.b.3: LikelihoodOfOccurrence click to expand contents

Check that for the data type LikelihoodOfOccurrence either the qualitative likelihood or the quantitative likelihood is provided.
Source: Abstract Test Case 'Constraints', INSPIRE Data Specification on Natural Risk Zones, A.4.2, (A.5.3.6.1)

Status | Passed
Duration | 0.001 s
Assertion ID | EIDc8408080-a82f-4683-a86b-381a181705c6
Assertion URI | Link

Expression: let $features_selected := $features[self::nz-core:*] let $messages := for $feature in $features_selected//nz-core:LikelihoodOfOccurrence return if ((count($feature/nz-core:qualitativeLikelihood) = 0) and (count($feature/nz-core:quantitativeLikelihood) = 0)) then local:addMessage('TR.missingElementNaturalRiskZone', map {'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@*:id), 'property':'nz-core:qualitativeLikelihood or nz-core:quantitativeLikelihood'}) else if (count($feature/nz-core:qualitativeLikelihood) > 1) then local:addMessage('TR.wrongMultiplicitySpatialRepresentation', map {'filename': local:filename($feature), 'id': string($feature/@*:id), 'element':'nz-core:qualitativeLikelihood'}) else if (count($feature/nz-core:quantitativeLikelihood) > 1) then local:addMessage('TR.wrongMultiplicitySpatialRepresentation', map {'filename': local:filename($feature), 'id': string($feature/@*:id), 'element':'nz-core:quantitativeLikelihood'}) else if (exists($feature/nz-core:qualitativeLikelihood) and exists($feature/nz-core:quantitativeLikelihood) and not(has-children($feature/nz-core:quantitativeLikelihood)) and not(exists($feature/nz-core:quantitativeLikelihood/@nilReason)) and string-length($feature/nz-core:qualitativeLikelihood) = 0 and not(exists($feature/nz-core:qualitativeLikelihood/@nilReason))) then local:addMessage('TR.constraintViolation', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@*:id), 'constraint': 'qualitativeLikelihood or quantitativeLikelihood roles must not be empty', 'additionalInfo':''}) else if (not(exists($feature/nz-core:quantitativeLikelihood) and (has-children($feature/nz-core:quantitativeLikelihood) or exists($feature/nz-core:quantitativeLikelihood/@nilReason))) and exists($feature/nz-core:qualitativeLikelihood) and string-length($feature/nz-core:qualitativeLikelihood) = 0 and not(exists($feature/nz-core:qualitativeLikelihood/@nilReason))) then local:addMessage('TR.constraintViolation', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@*:id), 'constraint': 'qualitativeLikelihood or quantitativeLikelihood roles must not be empty', 'additionalInfo':''}) else if (not(exists($feature/nz-core:qualitativeLikelihood) and (string-length($feature/nz-core:qualitativeLikelihood) != 0 or exists($feature/nz-core:qualitativeLikelihood/@nilReason))) and exists($feature/nz-core:quantitativeLikelihood) and not(has-children($feature/nz-core:quantitativeLikelihood)) and not(exists($feature/nz-core:quantitativeLikelihood/@nilReason))) then local:addMessage('TR.constraintViolation', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@*:id), 'constraint': 'qualitativeLikelihood or quantitativeLikelihood roles must not be empty', 'additionalInfo':''}) else () return (if ($messages) then 'FAILED' else 'PASSED', local:error-statistics('TR.recordsWithErrors', count(fn:distinct-values($messages//etf:argument[@token='id']/text()))), $messages)

### domainSet Constraints
1
click to expand contents

Verify that the features provided in the dataset adhere to the constraints specified in the INSPIRE application schema.

Status | Passed
Duration | 0.001 s
Test case ID | EID1c6ce428-fbef-420f-a54d-68defa32c3ff

##### nz-as.c.1: domainSet click to expand contents

Check that the domainSet shall be a rectified grid or referenceable grid and that The check is performed on all the different feature types that can be present in the dataset:

- ExposedElementCoverage
- HazardCoverage
- ObservedEventCoverage
- RiskCoverage

.
The element ReferenceableGrid is not available as subtype of the element domainSet, so only the RectifiedGrid element is checked.
Source: Abstract Test Case 'domainSet Constraint', INSPIRE Data Specification on Natural Risk Zones, A.4.2, (A.5.3.6.1)

Status | Passed
Duration | 0.001 s
Assertion ID | EID1be760b5-0976-4999-bc89-865ea86ce933
Assertion URI | Link

Expression: let $features_selected := $features[self::nz-core:ExposedElementCoverage|self::nz-core:HazardCoverage|self::nz-core:ObservedEventCoverage|self::nz-core:RiskCoverage] let $messages := for $feature in $features_selected for $f in $feature/gml:domainSet return if (count($f/gml:RectifiedGrid) = 0) then local:addMessage('TR.constraintViolation', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@*:id), 'constraint': 'RectifiedGrid role must not be empty', 'additionalInfo':''}) else if (count($f/gml:RectifiedGrid) > 1) then local:addMessage('TR.wrongMultiplicitySpatialRepresentation', map {'filename': local:filename($feature), 'id': string($feature/@*:id), 'element':'gml:RectifiedGrid'}) else () return (if ($messages) then 'FAILED' else 'PASSED', local:error-statistics('TR.recordsWithErrors', count(fn:distinct-values($messages//etf:argument[@token='id']/text()))), $messages)

### rangeSet Constraints
1
click to expand contents

Verify that the features provided in the dataset adhere to the constraints specified in the INSPIRE application schema.

Status | Passed, manual checks required
Duration | 0.001 s
Test case ID | EIDd72743c3-a819-4cc2-98ae-be2845e6177f

##### nz-as.d.1: rangeSet click to expand contents

The following checks shall be performed for every feature in the dataset.

- ExposedElementCoverage: The rangeSet shall be the level, or intensity, of the vulnerability assessment.
- HazardCoverage: The rangeSet shall be described by magnitude or intensity, or by the likelihood of occurence.
- ObservedEventCoverage: The rangeSet shall be described by magnitude or intensity, or by the likelihood of occurence.
- RiskCoverage: The rangeSet shall be described by level or intensity.

Source: Abstract Test Case 'rangeSet Constraint', INSPIRE Data Specification on Natural Risk Zones, A.4.2, (A.5.3.6.1)

Status | Passed, manual checks required
Duration | 0.001 s
Assertion ID | EID43cf5f07-d750-4220-93d3-7d3866f4c496
Assertion URI | Link

### Risk zone theme-specific requirements
2
click to expand contents

Verify that the features provided in the dataset adhere to the theme-specific requirements specified in the INSPIRE application schema.

Status | Passed
Duration | 0.001 s
Test case ID | EIDd3f70a5b-437b-4a95-9d35-44bb0ca02b51

##### nz-as.e.1: RiskZone.source click to expand contents

Check that if a RiskZone is associated with a HazardArea, the RiskZone and the HazardArea shall overlap. Source: Abstract Test Case 'Risk zone theme-specific requirements', INSPIRE Data Specification on Natural Risk Zones, A.4.2, (A.5.3.6.1)

Status | Passed
Duration | 0.001 s
Assertion ID | EID19c62442-80d7-4dd3-9b6d-fe59e92a8f1e
Assertion URI | Link

Expression: let $features_selected := $features[self::nz-core:RiskZone] let $features_hazard := $features[self::nz-core:HazardArea]/@*:id let $messages := for $feature in $features_selected let $urls := for $x in $feature/nz-core:source/@xlink:href return if (starts-with(string($x), '#')) then () else string($x) let $map := local:check-resource-uris($urls, 30, true()) let $valid_urls := for $href in $urls let $url := string($href) let $validuri := map:get($map, $url) return if ($validuri = 'notHTTP' or starts-with($validuri, 'EXCEPTION') or $validuri = 'idNotFound' or matches($validuri,'^\d{3}$')) then () else $url let $invalid_urls := for $href in $urls let $url := string($href) let $validuri := map:get($map, $url) return if ($validuri = 'notHTTP' or starts-with($validuri, 'EXCEPTION') or $validuri = 'idNotFound' or matches($validuri,'^\d{3}$')) then $url else () let $ids := for $x in $feature/nz-core:source/@xlink:href return if (starts-with(string($x), '#')) then string($x) else () let $valid_ids := for $x in $ids return if (starts-with(string($x), '#')) then if (not(substring(string($x), 2) = $features_hazard)) then () else string($x) else () let $invalid_ids := for $x in $ids return if (starts-with(string($x), '#')) then if (not(substring(string($x), 2) = $features_hazard)) then string($x) else () else () return if (not(exists($feature/nz-core:source))) then local:addMessage('TR.missingElementNaturalRiskZone', map {'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@*:id), 'property':'nz-core:source'}) else if (count($feature/nz-core:source) != 1) then local:addMessage('TR.wrongMultiplicitySpatialRepresentation', map {'filename': local:filename($feature), 'id': string($feature/@*:id), 'element':'nz-core:source'}) else if (count($invalid_ids) != 0 or count($invalid_urls) != 0) then local:addMessage('TR.constraintViolation', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@*:id), 'constraint': 'RiskZone and the HazardArea shall overlap', 'additionalInfo':''}) else if (count($valid_urls) != 0) then let $aaa := 'aaa' for $url in $valid_urls return local:addMessage('TR.manual.reviewConstraintOverlapUrlNaturalRisk', map {'filename': local:filename($feature), 'featureType':local-name($feature), 'gmlid': string($feature/@*:id), 'property': 'nz-core:source', 'value': $url, 'element':'HazardArea'}) else if (count($valid_ids) != 0) then let $aaa := 'aaa' for $url in $valid_ids return local:addMessage('TR.manual.reviewConstraintOverlapIdNaturalRisk', map {'filename': local:filename($feature), 'featureType':local-name($feature), 'gmlid': string($feature/@*:id), 'property': 'nz-core:source', 'value': $url, 'element':'HazardArea'}) else () return (if ($messages and not($messages/@ref = ('TR.manual.reviewConstraintOverlapIdNaturalRisk')) and not($messages/@ref = ('TR.manual.reviewConstraintOverlapUrlNaturalRisk'))) then 'FAILED' else if($messages and ($messages/@ref = ('TR.manual.reviewConstraintOverlapIdNaturalRisk') or $messages/@ref = ('TR.manual.reviewConstraintOverlapUrlNaturalRisk'))) then 'PASSED_MANUAL' else 'PASSED', local:error-statistics('TR.recordsWithErrors', count(fn:distinct-values($messages//etf:argument[@token='id']/text()))), $messages)

##### nz-as.e.2: RiskZone.exposedElement click to expand contents

Check that if a RiskZone is associated with an ExposedElement, the ExposedElement shall overlap with the RiskZone. Source: Abstract Test Case 'Risk zone theme-specific requirements', INSPIRE Data Specification on Natural Risk Zones, A.4.2, (A.5.3.6.1)

Status | Passed
Duration | 0.001 s
Assertion ID | EIDbef48ff1-837f-4b83-b2fe-873a2493588f
Assertion URI | Link

Expression: let $features_selected := $features[self::nz-core:RiskZone] let $features_exposed := $features[self::nz-core:ExposedElement]/@*:id let $messages := for $feature in $features_selected let $urls := for $x in $feature/nz-core:exposedElement/@xlink:href return if (starts-with(string($x), '#')) then () else string($x) let $map := local:check-resource-uris($urls, 30, true()) let $valid_urls := for $href in $urls let $url := string($href) let $validuri := map:get($map, $url) return if ($validuri = 'notHTTP' or starts-with($validuri, 'EXCEPTION') or $validuri = 'idNotFound' or matches($validuri,'^\d{3}$')) then () else $url let $invalid_urls := for $href in $urls let $url := string($href) let $validuri := map:get($map, $url) return if ($validuri = 'notHTTP' or starts-with($validuri, 'EXCEPTION') or $validuri = 'idNotFound' or matches($validuri,'^\d{3}$')) then $url else () let $ids := for $x in $feature/nz-core:exposedElement/@xlink:href return if (starts-with(string($x), '#')) then string($x) else () let $valid_ids := for $x in $ids return if (starts-with(string($x), '#')) then if (not(substring(string($x), 2) = $features_exposed)) then () else string($x) else () let $invalid_ids := for $x in $ids return if (starts-with(string($x), '#')) then if (not(substring(string($x), 2) = $features_exposed)) then string($x) else () else () return if (not(exists($features_selected/nz-core:exposedElement))) then local:addMessage('TR.missingElementNaturalRiskZone', map {'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@*:id), 'property':'nz-core:exposedElement'}) else if (count($invalid_urls) != 0 or count($invalid_ids) != 0) then local:addMessage('TR.constraintViolation', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@*:id), 'constraint': 'ExposedElement shall overlap with the RiskZone', 'additionalInfo':''}) else if ((count($valid_urls) != 0) or (count($valid_ids) != 0)) then let $messageurl := for $url in $valid_urls return local:addMessage('TR.manual.reviewConstraintOverlapUrlNaturalRisk', map {'filename': local:filename($feature), 'featureType':local-name($feature), 'gmlid': string($feature/@*:id), 'property': 'nz-core:exposedElement', 'value': $url, 'element':'ExposedElement'}) let $messageid := for $url in $valid_ids return local:addMessage('TR.manual.reviewConstraintOverlapIdNaturalRisk', map {'filename': local:filename($feature), 'featureType':local-name($feature), 'gmlid': string($feature/@*:id), 'property': 'nz-core:exposedElement', 'value': $url, 'element':'ExposedElement'}) return ($messageurl, $messageid) else () return (if ($messages and not($messages/@ref = ('TR.manual.reviewConstraintOverlapIdNaturalRisk')) and not($messages/@ref = ('TR.manual.reviewConstraintOverlapUrlNaturalRisk'))) then 'FAILED' else if($messages and ($messages/@ref = ('TR.manual.reviewConstraintOverlapIdNaturalRisk') or $messages/@ref = ('TR.manual.reviewConstraintOverlapUrlNaturalRisk'))) then 'PASSED_MANUAL' else 'PASSED', local:error-statistics('TR.recordsWithErrors', count(fn:distinct-values($messages//etf:argument[@token='id']/text()))), $messages)

# Report generated by ETF

Level of detail