# ES_DF1_5_MajorRailwaySource Test run with test suite TN

Report URI | Link
Status | Passed, manual checks required
Started | 20/03/2026 14:41:34 GMT
Duration | 6 s
Report version | 2.1.0-b181101
Log URI | Link

| Total Count | Skipped | Failed | Warnings | Manual
--- | --- | --- | --- | --- | ---
Test suites | 10 | 0 | 0 | 0 | 4
Test cases | 20 | 0 | 0 | 0 | 6
Assertions | 54 | 0 | 0 | 0 | 9

Level of detail All detailsLess informationSimplified
Show AllOnly failedOnly manual

### Parameters

tests_to_execute | .*
files_to_test | .*

### Test object: ES_DF1_5_MajorRailwaySource.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 | 83
RailwayLink | 83

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

    Testing 83 features
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-staging/data-encoding/inspire-gml/ets-inspire-gml-bsxets.xml
    Statistics table: 0 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 83 features
    Indexing features (parsing errors: 0): 8 ms
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-staging/data/reference-systems/ets-reference-systems-bsxets.xml
    Statistics table: 1 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 - 104 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 - 5 ms
    Test Case 'Temporal reference systems' finished: PASSED
    Test Suite 'Conformance class: Reference systems, General requirements' finished: PASSED

### Log path: Conformance class: Reference systems, Transport Networks

    Testing 83 features
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-staging/data-tn/tn-rs/ets-tn-rs-bsxets.xml
    Statistics table: 2 ms
    Test Suite 'Conformance class: Reference systems, Transport Networks' started
    Test Case 'Additional theme-specific rules for reference systems' started
    Test Assertion 'tn-rs.a.1: Test always passes': PASSED - 0 ms
    Test Case 'Additional theme-specific rules for reference systems' finished: PASSED
    Test Suite 'Conformance class: Reference systems, Transport Networks' finished: PASSED

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

    Testing 83 features
    Indexing features (parsing errors: 0): 6 ms
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-staging/data/information-accessibility/ets-information-accessibility-bsxets.xml
    Statistics table: 1 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/3035'
    Test Assertion 'ia.a.1: CRS publicly accessible via HTTP': PASSED - 520 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, Transport Networks

    Testing 83 features
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-staging/data-tn/tn-ia/ets-tn-ia-bsxets.xml
    Statistics table: 0 ms
    Test Suite 'Conformance class: Information accessibility, Transport Networks' started
    Test Case 'Code lists' started
    Test Assertion 'tn-ia.a.1: Code list extensions accessible': PASSED - 0 ms
    Test Case 'Code lists' finished: PASSED
    Test Case 'Feature references' started
    Test Assertion 'tn-ia.b.1: MarkerPost.route': PASSED - 1 ms
    Test Assertion 'tn-ia.b.2: TransportLinkSet.post': PASSED - 2 ms
    Test Case 'Feature references' finished: PASSED
    Test Suite 'Conformance class: Information accessibility, Transport Networks' finished: PASSED

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

    Testing 83 features
    Indexing features (parsing errors: 0): 6 ms
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-staging/data/data-consistency/ets-data-consistency-bsxets.xml
    Statistics table: 0 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, Transport Networks

    Testing 83 features
    Indexing features (parsing errors: 0): 5 ms
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-staging/data-tn/tn-dc/ets-tn-dc-bsxets.xml
    Statistics table: 1 ms
    Test Suite 'Conformance class: Data consistency, Transport Networks' started
    Test Case 'Spatial consistency' started
    Test Assertion 'tn-dc.a.1: Each Transport Network Link or Node geometry is within a Network Area geometry (Road Transport Networks)': PASSED - 0 ms
    Test Assertion 'tn-dc.a.2: Each Transport Network Link or Node geometry is within a Network Area geometry (Railway Transport Networks)': PASSED - 0 ms
    Test Assertion 'tn-dc.a.3: Each Transport Network Link or Node geometry is within a Network Area geometry (Waterway Transport Networks)': PASSED - 0 ms
    Test Assertion 'tn-dc.a.4: Each Transport Network Link or Node geometry is within a Network Area geometry (Air Transport Networks)': PASSED - 0 ms
    Test Assertion 'tn-dc.a.5: Manual review': PASSED_MANUAL
    Test Case 'Spatial consistency' finished: PASSED_MANUAL
    Test Suite 'Conformance class: Data consistency, Transport Networks' finished: PASSED_MANUAL

### Log path: Conformance class: GML application schemas, Transport Networks

    Testing 83 features
    Indexing features (parsing errors: 0): 8 ms
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-staging/data-tn/tn-gml/ets-tn-gml-bsxets.xml
    Statistics table: 2 ms
    Test Suite 'Conformance class: GML application schemas, Transport Networks' started
    Test Case 'Basic test' started
    Test Assertion 'tn-gml.a.1: Transport Network feature in dataset': PASSED - 22 ms
    Test Case 'Basic test' finished: PASSED
    Test Case 'Validation against INSPIRE official schema' started
    Validating ES_DF1_5_MajorRailwaySource.gml
    Duration: 5489 ms. Errors: 0.
    Test Assertion 'tn-gml.b.1: validate XML documents against official schema': PASSED - 5489 ms
    Test Case 'Validation against INSPIRE official schema' finished: PASSED
    Test Suite 'Conformance class: GML application schemas, Transport Networks' finished: PASSED

### Log path: Conformance class: Application schema, Transport Networks Common

    Testing 83 features
    Indexing features (parsing errors: 0): 7 ms
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-staging/data-tn/tn-as/ets-tn-as-bsxets.xml
    Statistics table: 0 ms
    Test Suite 'Conformance class: Application schema, Transport Networks Common' started
    Test Case 'Code list values' started
    Test Assertion 'tn-as.a.1: AccessRestrictionValue attributes': PASSED - 41 ms
    Test Assertion 'tn-as.a.2: RestrictionTypeValue attributes': PASSED - 28 ms
    Test Case 'Code list values' finished: PASSED
    Test Case 'Constraints' started
    Test Assertion 'tn-as.b.1: TrafficFlowDirection can only be associated with a spatial object of the type Link or LinkSequence.': PASSED - 1 ms
    Test Assertion 'tn-as.b.2: All transport areas have an external object identifier.': PASSED - 1 ms
    Test Assertion 'tn-as.b.3: All transport links have an external object identifier.': PASSED - 1 ms
    Test Assertion 'tn-as.b.4: All transport link sequences have an external object identifier.': PASSED - 0 ms
    Test Assertion 'tn-as.b.5: All transport link sets have an external object identifier.': PASSED - 1 ms
    Test Assertion 'tn-as.b.6: All transport nodes have an external object identifier.': PASSED - 0 ms
    Test Assertion 'tn-as.b.7: All transport points have an external object identifier.': PASSED - 0 ms
    Test Assertion 'tn-as.b.8: All transport properties have an external object identifier.': PASSED - 5 ms
    Test Assertion 'tn-as.b.9: A transport link sequence must be composed of transport links that all belong to the same transport network.': PASSED - 0 ms
    Test Assertion 'tn-as.b.10: A transport link set must be composed of transport links and or transport link sequences that all belong to the same transport network.': PASSED - 1 ms
    Test Case 'Constraints' finished: PASSED
    Test Case 'Geometry' started
    Test Assertion 'tn-as.c.1: No free transport nodes': PASSED - 1 ms
    Test Assertion 'tn-as.c.2: Intersections only at crossings': PASSED_MANUAL
    Test Case 'Geometry' finished: PASSED_MANUAL
    Test Case 'Network connectivity' started
    Test Assertion 'tn-as.d.1: Connectivity at crossings': PASSED_MANUAL
    Test Assertion 'tn-as.d.2: Unconnected nodes': PASSED_MANUAL
    Test Assertion 'tn-as.d.3: Connectivity tolerance': PASSED_MANUAL
    Test Case 'Network connectivity' finished: PASSED_MANUAL
    Test Case 'Object References' started
    Test Assertion 'tn-as.e.1: Linear references': PASSED_MANUAL
    Test Assertion 'tn-as.e.2: Inter-modal connections': PASSED - 0 ms
    Test Case 'Object References' finished: PASSED_MANUAL
    Test Suite 'Conformance class: Application schema, Transport Networks Common' finished: PASSED_MANUAL

### Log path: Conformance class: Application schema, Rail Transport Networks

    Testing 83 features
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-staging/data-tn/tn-ra-as/ets-tn-ra-as-bsxets.xml
    Statistics table: 1 ms
    Test Suite 'Conformance class: Application schema, Rail Transport Networks' started
    Test Case 'Code list values' started
    Test Assertion 'tn-ra-as.a.1: FormOfRailwayNodeValue attributes': PASSED - 31 ms
    Test Assertion 'tn-ra-as.a.2: RailwayTypeValue attributes': PASSED - 29 ms
    Test Assertion 'tn-ra-as.a.3: RailwayUseValue attributes': PASSED - 68 ms
    Test Case 'Code list values' finished: PASSED
    Test Case 'Constraints' started
    Test Assertion 'tn-ra-as.b.1: DesignSpeed can only be associated with a spatial object that is part of a railway transport network.': PASSED - 0 ms
    Test Assertion 'tn-ra-as.b.2: NominalTrackGauge can only be associated with a spatial object that is part of a railway transport network.': PASSED - 0 ms
    Test Assertion 'tn-ra-as.b.3: NumberOfTracks can only be associated with a spatial object that is part of a railway transport network.': PASSED - 0 ms
    Test Assertion 'tn-ra-as.b.4: RailwayElectrification can only be associated with a spatial object that is part of a railway transport network.': PASSED - 0 ms
    Test Assertion 'tn-ra-as.b.5: RailwayStationCode can only be associated with a spatial object that is part of a railway transport network.': PASSED - 0 ms
    Test Assertion 'tn-ra-as.b.6: RailwayType can only be associated with a spatial object that is part of a railway transport network.': PASSED - 1 ms
    Test Assertion 'tn-ra-as.b.7: RailwayUse can only be associated with a spatial object that is part of a railway transport network.': PASSED - 0 ms
    Test Assertion 'tn-ra-as.b.8: For a railway station node, the value for the "formOfNode" attribute shall always be "RailwayStop".': PASSED - 0 ms
    Test Assertion 'tn-ra-as.b.9: For a railway yard node, the value for the "formOfNode" attribute shall always be "RailwayStop".': PASSED - 0 ms
    Test Case 'Constraints' finished: PASSED
    Test Case 'Link centrelines' started
    Test Assertion 'tn-ro-as.a.1: Link centrelines test': PASSED_MANUAL
    Test Case 'Link centrelines' finished: PASSED_MANUAL
    Test Suite 'Conformance class: Application schema, Rail Transport Networks' 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.109 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.104 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.104 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.005 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.005 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, Transport Networks
1

This test suite examines a data set against the theme-specific requirements related to reference systems (spatial and temporal, units of measurement).
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 not fully supported.
Source: Conformance Class 'Reference systems, Transport Networks'
Pre-requisite conformance classes:

- Conformance Class 'Reference systems'

Status | Passed
Duration | 0.001 s
Test suite ID | EID9d35024d-9dd7-43a9-afff-d5aea5f51595
Author | PwC
Date created | 09/12/2016 00:00:00 GMT
Version | 0.2.0
Last editor | interactive instruments GmbH
Last updated | 21/02/2017 17:00:00 GMT
Reference | Link
Hash | CBF29CE484222325

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

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

Status | Passed
Duration | 0.001 s
Test case ID | EIDfb892c4a-af1b-415c-8e1c-7640533c7f7d

##### tn-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 | EID5e49a750-a8f9-4981-997d-d37f87562ff3
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.520 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.520 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.520 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, Transport Networks
2

This test suite examines a data set against the themespecific requirements related to the accessibility of resources referenced by the data.
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 not fully supported.
Source: Conformance Class 'Information accessibility, Transport Networks'
Pre-requisite conformance classes:

- Conformance Class 'Information accessibility'

Status | Passed
Duration | 0.003 s
Test suite ID | EIDdf5db9a4-b15f-4193-a6ff-6e9951af46f5
Author | PwC
Date created | 09/12/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

### Code lists
1
click to expand contents

Verify that code list extensions can be accessed.

Status | Passed
Duration | 0.001 s
Test case ID | EIDce3aeebe-a896-461f-9fe6-71dd6cd911ca

##### tn-ia.a.1: Code list extensions accessible click to expand contents

Verify that any code list extensions are publicly accessible via HTTP, i.e. inspect extensible code list valued 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.
This data theme currently does not specify any extensible code lists. The test always passes.
Relevant requirements:

- IR Requirement Article 6 (3): Code Lists and Enumerations. Where, for an attribute whose type is a code list as referred to in points (b), (c) or (d) 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.

Source: Abstract Test Case 'Code lists', INSPIRE Data Specification on Transport Networks, A.6.1

Status | Passed
Duration | 0.001 s
Assertion ID | EID4f79ee34-f4a6-457c-9fa9-a7a74a0657d3
Assertion URI | Link

### Feature references
2
click to expand contents

Verify that referenced features can be retrieved.

Status | Passed
Duration | 0.003 s
Test case ID | EID1e697789-a7b5-4761-ab3f-5e4ceee91792

##### tn-ia.b.1: MarkerPost.route click to expand contents

Verify 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.
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 'Feature references', INSPIRE Data Specification on Transport Networks, A.1.4

Status | Passed
Duration | 0.001 s
Assertion ID | EID92834091-d43e-47c5-90a9-9232f0291e37
Assertion URI | Link

Expression:let $features_selected := $features[self::tn:MarkerPost] let $gml_ids := $features//@gml:id let $property_string := 'route' let $messages := for $feature in $features_selected let $envDom := $feature/*:route let $urls := for $x in $envDom/@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 $envDom/@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.brokenLink', 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) then local:addMessage('TR.missingReferencedElement', 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)

##### tn-ia.b.2: TransportLinkSet.post click to expand contents

Verify 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.
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 'Feature references', INSPIRE Data Specification on Transport Networks, A.1.4

Status | Passed
Duration | 0.002 s
Assertion ID | EID6afecd44-db3b-46ae-baae-1cc22f8bef11
Assertion URI | Link

Expression:let $features_selected := $features[(self::tn-ro:Road or self::tn-ro:ERoad or self::tn-w:RailwayLine or self::tn-c:CablewayLinkSet or self::tn-w:FerryCrossing or self::tn-w:MarineWaterway or self::tn-w:InlandWaterway or self::tn-a:AirRoute)] let $gml_ids := $features//@gml:id let $property_string := 'post' let $messages := for $feature in $features_selected let $envDom := $feature/*:post let $urls := for $x in $envDom/@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 $envDom/@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.brokenLink', 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) then local:addMessage('TR.missingReferencedElement', 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, Transport Networks
1

This test suite examines a data set against theme-specific requirements related to the consistency of the data.
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 not fully supported.
Source: Conformance Class 'Data consistency, Transport Networks'
Pre-requisite conformance classes:

- Conformance Class 'Data consistency'

Status | Passed, manual checks required
Duration | 0.001 s
Test suite ID | EID733af9a0-312b-4f71-9aa2-977cd2134d23
Author | PwC
Date created | 09/12/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

### Spatial consistency
5
click to expand contents

Verify that the spatial information is consistent.

Status | Passed, manual checks required
Duration | 0.001 s
Test case ID | EIDdc3b76de-68d5-46a6-bbe3-da0abb973f0f

##### tn-dc.a.1: Each Transport Network Link or Node geometry is within a Network Area geometry (Road Transport Networks) click to expand contents

Verify that Transport Networks centreline representations and nodes in the Road Transport Network are located within the extent of the area representation of the same object.
Relevant requirements:

- IR Requirement Annex II Section 7.9.1 (1): Theme-specific Requirements – Consistency between spatial data sets. Transport Networks centreline representations and nodes shall always be located within the extent of the area representation of the same object.

Source: Abstract Test Case 'Spatial consistency', INSPIRE Data Specification on Transport Networks, A.1.7, A.3.6

Status | Passed
Duration | 0.001 s
Assertion ID | EID9fb4a73a-8e08-4bc8-a608-b353dcb99d53
Assertion URI | Link

Expression:let $TransportLinkNode := $features[self::*:RoadLink|self::*:RoadNode] let $NetworkArea := $features[self::*:RoadServiceArea|self::*:RoadArea|self::*:VehicleTrafficArea] return if (count($TransportLinkNode) = 0 or count($NetworkArea) = 0) then 'PASSED' else let $featuresWithErrors := (for $candidate in $TransportLinkNode return try { let $candidate_geometry := ggeo:getGeometry($candidate/@gml:id,$candidate/*[self::*:centrelineGeometry or self::*:geometry]/*[1]) let $env := ggeo:envelope($candidate_geometry) let $other_features := ggeo:search($env[1],$env[2],$env[3],$env[4]) let $other_geometries := for $feature in $other_features[self::*:RoadServiceArea|self::*:RoadArea|self::*:VehicleTrafficArea] where $feature/*:geometry/*[1][self::gml:Polygon|self::gml:Surface|self::gml:MultiSurface] return try { ggeo:getGeometry($feature/@gml:id,$feature/*:geometry/*[1]) } 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 :) } let $union := ggeo:union($other_geometries) return if (not(ggeo:contains($union,$candidate_geometry))) then $candidate else () } catch * { let $dummy := local:log('Processing feature ' || string($candidate/@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 :) })[position() le $limitErrors] return (if ($featuresWithErrors) then 'PASSED_MANUAL' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id return local:addMessage('TR.notWithin', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id) }))

##### tn-dc.a.2: Each Transport Network Link or Node geometry is within a Network Area geometry (Railway Transport Networks) click to expand contents

Verify that Transport Networks centreline representations and nodes in the Railway Transport Network are located within the extent of the area representation of the same object.
Relevant requirements:

- IR Requirement Annex II Section 7.9.1 (1): Theme-specific Requirements – Consistency between spatial data sets. Transport Networks centreline representations and nodes shall always be located within the extent of the area representation of the same object.

Source: Abstract Test Case 'Spatial consistency', INSPIRE Data Specification on Transport Networks, A.1.7, A.3.6

Status | Passed
Duration | 0.001 s
Assertion ID | EIDdb7ae736-a7b8-41e2-ae62-4f98076bc6c4
Assertion URI | Link

Expression:let $TransportLinkNode := $features[self::*:RailwayLink|self::*:RailwayNode|self::*:RailwayYardNode|self::*:RailwayStationNode] let $NetworkArea := $features[self::*:RailwayArea|self::*:RailwayStationArea|self::*:RailwayYardArea] return if (count($TransportLinkNode) = 0 or count($NetworkArea) = 0) then 'PASSED' else let $featuresWithErrors := (for $candidate in $TransportLinkNode return try { let $candidate_geometry := ggeo:getGeometry($candidate/@gml:id,$candidate/*[self::*:centrelineGeometry or self::*:geometry]/*[1]) let $env := ggeo:envelope($candidate_geometry) let $other_features := ggeo:search($env[1],$env[2],$env[3],$env[4]) let $other_geometries := for $feature in $other_features[self::*:RailwayArea|self::*:RailwayStationArea|self::*:RailwayYardArea] where $feature/*:geometry/*[1][self::gml:Polygon|self::gml:Surface|self::gml:MultiSurface] return try { ggeo:getGeometry($feature/@gml:id,$feature/*:geometry/*[1]) } 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 :) } let $union := ggeo:union($other_geometries) return if (not(ggeo:contains($union,$candidate_geometry))) then $candidate else () } catch * { let $dummy := local:log('Processing feature ' || string($candidate/@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 :) })[position() le $limitErrors] return (if ($featuresWithErrors) then 'PASSED_MANUAL' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id return local:addMessage('TR.notWithin', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id) }))

##### tn-dc.a.3: Each Transport Network Link or Node geometry is within a Network Area geometry (Waterway Transport Networks) click to expand contents

Verify that Transport Networks centreline representations and nodes in the Waterway Transport Network are located within the extent of the area representation of the same object.
Relevant requirements:

- IR Requirement Annex II Section 7.9.1 (1): Theme-specific Requirements – Consistency between spatial data sets. Transport Networks centreline representations and nodes shall always be located within the extent of the area representation of the same object.

Source: Abstract Test Case 'Spatial consistency', INSPIRE Data Specification on Transport Networks, A.1.7, A.3.6

Status | Passed
Duration | 0.001 s
Assertion ID | EID3da8c41a-e1f1-47bc-8f60-1c92cfa02feb
Assertion URI | Link

Expression:let $TransportLinkNode := $features[self::*:WaterwayLink|self::*:WaterwayNode|self::*:PortNode] let $NetworkArea := $features[self::*:FairwayArea|self::*:PortArea] return if (count($TransportLinkNode) = 0 or count($NetworkArea) = 0) then 'PASSED' else let $featuresWithErrors := (for $candidate in $TransportLinkNode return try { let $candidate_geometry := ggeo:getGeometry($candidate/@gml:id,$candidate/*[self::*:centrelineGeometry or self::*:geometry]/*[1]) let $env := ggeo:envelope($candidate_geometry) let $other_features := ggeo:search($env[1],$env[2],$env[3],$env[4]) let $other_geometries := for $feature in $other_features[self::*:FairwayArea|self::*:PortArea] where $feature/*:geometry/*[1][self::gml:Polygon|self::gml:Surface|self::gml:MultiSurface] return try { ggeo:getGeometry($feature/@gml:id,$feature/*:geometry/*[1]) } 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 :) } let $union := ggeo:union($other_geometries) return if (not(ggeo:contains($union,$candidate_geometry))) then $candidate else () } catch * { let $dummy := local:log('Processing feature ' || string($candidate/@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 :) })[position() le $limitErrors] return (if ($featuresWithErrors) then 'PASSED_MANUAL' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id return local:addMessage('TR.notWithin', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id) }))

##### tn-dc.a.4: Each Transport Network Link or Node geometry is within a Network Area geometry (Air Transport Networks) click to expand contents

Verify that Transport Networks centreline representations and nodes in the Air Transport Network are located within the extent of the area representation of the same object.
Relevant requirements:

- IR Requirement Annex II Section 7.9.1 (1): Theme-specific Requirements – Consistency between spatial data sets. Transport Networks centreline representations and nodes shall always be located within the extent of the area representation of the same object.

Source: Abstract Test Case 'Spatial consistency', INSPIRE Data Specification on Transport Networks, A.1.7, A.3.6

Status | Passed
Duration | 0.001 s
Assertion ID | EID9a50d25b-fe51-4142-b0b3-f90455e65158
Assertion URI | Link

Expression:let $TransportLinkNode := $features[self::*:AirRouteLink|self::*:ProcedureLink|self::*:StandardInstrumentDeparture|self::*:InstrumentApproachProcedure|self::*:StandardInstrumentArrival|self::*:Navaid|self::*:DesignatedPoint|self::*:RunwayCentrelinePoint|self::*:TouchDownLiftOff|self::*:AerodromeNode] let $NetworkArea := $features[self::*:AerodromeArea|self::*:AirspaceArea|self::*:ApronArea|self::*:RunwayArea|self::*:TaxiwayArea] return if (count($TransportLinkNode) = 0 or count($NetworkArea) = 0) then 'PASSED' else let $featuresWithErrors := (for $candidate in $TransportLinkNode return try { let $candidate_geometry := ggeo:getGeometry($candidate/@gml:id,$candidate/*[self::*:centrelineGeometry or self::*:geometry]/*[1]) let $env := ggeo:envelope($candidate_geometry) let $other_features := ggeo:search($env[1],$env[2],$env[3],$env[4]) let $other_geometries := for $feature in $other_features[self::*:AerodromeArea|self::*:AirspaceArea|self::*:ApronArea|self::*:RunwayArea|self::*:TaxiwayArea] where $feature/*:geometry/*[1][self::gml:Polygon|self::gml:Surface|self::gml:MultiSurface] return try { ggeo:getGeometry($feature/@gml:id,$feature/*:geometry/*[1]) } 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 :) } let $union := ggeo:union($other_geometries) return if (not(ggeo:contains($union,$candidate_geometry))) then $candidate else () } catch * { let $dummy := local:log('Processing feature ' || string($candidate/@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 :) })[position() le $limitErrors] return (if ($featuresWithErrors) then 'PASSED_MANUAL' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count($featuresWithErrors)), for $feature in $featuresWithErrors order by $feature/@gml:id return local:addMessage('TR.notWithin', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id) }))

##### tn-dc.a.5: Manual review click to expand contents

Verify that transport networks are spatially connected across data sets. Review the data maintenance procedures and perform spot checks to verify that connectivity between transport networks across state borders and – where applicable – also across regional borders (and data sets) within Member States is established and maintained by the respective authorities, using the cross-border connectivity mechanisms provided by the NetworkConnection type.
Relevant requirements:

- IR Requirement Annex II Section 7.9.1 (2): Theme-specific Requirements – Consistency between spatial data sets. Connectivity between transport networks across state borders and – where applicable – also across regional borders (and data sets) within Member States shall be established and maintained by the respective authorities, using the cross-border connectivity mechanisms provided by the NetworkConnection type.

Source: Abstract Test Case 'Spatial consistency', INSPIRE Data Specification on Transport Networks, A.1.7, A.3.6

Status | Passed, manual checks required
Duration | 0.001 s
Assertion ID | EIDead98020-36ba-4574-b03c-b688254f99e8
Assertion URI | Link

## Conformance class: GML application schemas, Transport Networks
2

This test suite examines the GML encoding of spatial objects specified in the INSPIRE GML application schema 'Transport Networks Simple'. 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 not fully supported.
Source: Conformance Class 'GML application schema, Transport Networks'
Pre-requisite conformance classes:

- Conformance Class 'INSPIRE GML application schemas'

Status | Passed
Duration | 5 s
Test suite ID | EID9af1c865-1cf0-43ff-9250-069df01b0948
Author | PwC
Date created | 09/12/2016 00:00:00 GMT
Version | 0.2.5
Last editor | Consortium Bilbomatica y Guadaltel
Last updated | 15/05/2024 16:00:00 GMT
Reference | Link
Hash | CBF29CE484222325

### Basic test
1
click to expand contents

Verify that the spatial data set contains at least one Transport Network feature.

Status | Passed
Duration | 0.022 s
Test case ID | EID92ed634f-86bf-4b29-a1bb-ae2e7c4554ea

##### tn-gml.a.1: Transport Network feature in dataset click to expand contents

Check that the set of features in the spatial data set is not empty.
Source: Abstract Test Case 'Basic test', INSPIRE Data Specification on Transport Networks, A.1.1, (A.6.1)

Status | Passed
Duration | 0.022 s
Assertion ID | EID7425c468-5ec3-4cb0-bae9-acc066a2d8ee
Assertion URI | Link

Expression:let $featuresFromAppSchema := $features[descendant-or-self::*:AccessRestriction | descendant-or-self::*:ConditionOfFacility | descendant-or-self::*:MaintenanceAuthority | descendant-or-self::*:MarkerPost | descendant-or-self::*:OwnerAuthority | descendant-or-self::*:RestrictionForVehicles | descendant-or-self::*:TrafficFlowDirection | descendant-or-self::*:TransportNetwork | descendant-or-self::*:VerticalPosition | descendant-or-self::*:ERoad | descendant-or-self::*:FormOfWay | descendant-or-self::*:FunctionalRoadClass | descendant-or-self::*:NumberOfLanes | descendant-or-self::*:Road | descendant-or-self::*:RoadArea | descendant-or-self::*:RoadLink | descendant-or-self::*:RoadLinkSequence | descendant-or-self::*:RoadName | descendant-or-self::*:RoadNode | descendant-or-self::*:RoadServiceArea | descendant-or-self::*:RoadServiceType | descendant-or-self::*:RoadSurfaceCategory | descendant-or-self::*:RoadWidth | descendant-or-self::*:SpeedLimit | descendant-or-self::*:VehicleTrafficArea | descendant-or-self::*:DesignSpeed | descendant-or-self::*:NominalTrackGauge | descendant-or-self::*:NumberOfTracks | descendant-or-self::*:RailwayArea | descendant-or-self::*:RailwayElectrification | descendant-or-self::*:RailwayLine | descendant-or-self::*:RailwayLink | descendant-or-self::*:RailwayLinkSequence | descendant-or-self::*:RailwayNode | descendant-or-self::*:RailwayStationArea | descendant-or-self::*:RailwayStationCode | descendant-or-self::*:RailwayStationNode | descendant-or-self::*:RailwayType | descendant-or-self::*:RailwayUse | descendant-or-self::*:RailwayYardArea | descendant-or-self::*:RailwayYardNode | descendant-or-self::*:CablewayLink | descendant-or-self::*:CablewayLinkSequence | descendant-or-self::*:CablewayLinkSet | descendant-or-self::*:CablewayNode | descendant-or-self::*:Beacon | descendant-or-self::*:Buoy | descendant-or-self::*:CEMTClass | descendant-or-self::*:ConditionOfWaterFacility | descendant-or-self::*:FairwayArea | descendant-or-self::*:FerryCrossing | descendant-or-self::*:FerryUse | descendant-or-self::*:InlandWaterway | descendant-or-self::*:MarineWaterway | descendant-or-self::*:PortArea | descendant-or-self::*:PortNode | descendant-or-self::*:RestrictionForWaterVehicles | descendant-or-self::*:TrafficSeparationSchemeCrossing | descendant-or-self::*:TrafficSeparationSchemeLane | descendant-or-self::*:TrafficSeparationSchemeRoundabout | descendant-or-self::*:TrafficSeparationSchemeSeparator | descendant-or-self::*:WaterLinkSequence | descendant-or-self::*:WaterTrafficFlowDirection | descendant-or-self::*:WaterwayLink | descendant-or-self::*:WaterwayNode | descendant-or-self::*:Type | descendant-or-self::*:AerodromeArea | descendant-or-self::*:AerodromeCategory | descendant-or-self::*:AerodromeNode | descendant-or-self::*:AerodromeType | descendant-or-self::*:AirLinkSequence | descendant-or-self::*:AirRoute | descendant-or-self::*:AirRouteLink | descendant-or-self::*:AirspaceArea | descendant-or-self::*:ApronArea | descendant-or-self::*:ConditionOfAirFacility | descendant-or-self::*:DesignatedPoint | descendant-or-self::*:ElementLength | descendant-or-self::*:ElementWidth | descendant-or-self::*:FieldElevation | descendant-or-self::*:InstrumentApproachProcedure | descendant-or-self::*:LowerAltitudeLimit | descendant-or-self::*:Navaid | descendant-or-self::*:ProcedureLink | descendant-or-self::*:RunwayArea | descendant-or-self::*:RunwayCentrelinePoint | descendant-or-self::*:StandardInstrumentArrival | descendant-or-self::*:StandardInstrumentDeparture | descendant-or-self::*:SurfaceComposition | descendant-or-self::*:TaxiwayArea | descendant-or-self::*:TouchDownLiftOff | descendant-or-self::*:UpperAltitudeLimit | descendant-or-self::*:UseRestriction] return (if ($featuresFromAppSchema) then 'PASSED' else 'FAILED', if (not($featuresFromAppSchema)) then local:addMessage('TR.noFeature', map { 'theme': 'Transport Networks' }) 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 | 5 s
Test case ID | EIDb14f9cfb-e179-410c-a13f-7f1335b4fd61

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

Validate each document against the latest INSPIRE official schema(s), using strict XML schema validation. The official schemas for this data theme are:

- Air Transport Network: https://inspire.ec.europa.eu/schemas/tn-a/4.0/AirTransportNetwork.xsd
- Cable Transport Network: https://inspire.ec.europa.eu/schemas/tn-c/4.0/CableTransportNetwork.xsd
- Railway Transport Network: https://inspire.ec.europa.eu/schemas/tn-ra/5.0/RailwayTransportNetwork.xsd
- Road Transport Network: https://inspire.ec.europa.eu/schemas/tn-ro/5.0/RoadTransportNetwork.xsd
- Water Transport Network: https://inspire.ec.europa.eu/schemas/tn-w/5.0/WaterTransportNetwork.xsd

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 | 5 s
Assertion ID | EIDb4e6d860-b700-4cfa-b49a-defcb34339a9
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( ("tn-a", "tn-c", "tn-ra", "tn-ro", "tn-w" ), ("AirTransportNetwork", "CableTransportNetwork", "RailwayTransportNetwork", "RoadTransportNetwork", "WaterTransportNetwork"), ("4.0", "4.0", "5.0", "5.0", "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, Transport Networks Common
5

This test suite examines requirements associated with the application schema.
Note that since both code-list-valued properties of this application schema may be extended without restrictions, there is no test case for code list values.
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 not fully supported.
Source: Conformance Class 'Application schema, Transport Networks Common'
Pre-requisite conformance classes:

- Conformance Class 'GML application schemas, Transport Networks'

Status | Passed, manual checks required
Duration | 0.080 s
Test suite ID | EID4441cbde-371f-4899-90b3-145f4fd08ebc
Author | PwC
Date created | 09/12/2016 00:00:00 GMT
Version | 0.2.5
Last editor | Consortium Bilbomatica y Guadaltel
Last updated | 15/05/2024 16:00: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
Duration | 0.069 s
Test case ID | EID14b1c9d9-59fe-4983-9e91-b5ec14d743a6

##### tn-as.a.1: AccessRestrictionValue 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/AccessRestrictionValue.
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 Transport Networks, A.1.3, A.6.1

Status | Passed
Duration | 0.041 s
Assertion ID | EID28a341d3-c1cb-47fd-a2f4-1148cdffcde4
Assertion URI | Link

Expression:let $features3 := $features[self::tn3:AccessRestriction] let $features4 := $features[self::tn:AccessRestriction] let $messages := local:check-code-list-values($features3, $features4, 'restriction', 'http://inspire.ec.europa.eu/codelist/AccessRestrictionValue') return (if ($messages) then 'FAILED' else 'PASSED', $messages)

##### tn-as.a.2: RestrictionTypeValue 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/RestrictionTypeValue.
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 Transport Networks, A.1.3, A.6.1

Status | Passed
Duration | 0.028 s
Assertion ID | EID1a33615b-0723-4d4f-9bc3-69f0bac3572a
Assertion URI | Link

Expression:let $features3 := $features[(self::tn3:RestrictionForVehicles|self::tn-w3:RestrictionForWaterVehicles)] let $features4 := $features[(self::tn:RestrictionForVehicles|self::tn-w:RestrictionForWaterVehicles)] let $messages := local:check-code-list-values($features3, $features4, 'restrictionType', 'http://inspire.ec.europa.eu/codelist/RestrictionTypeValue') return (if ($messages) then 'FAILED' else 'PASSED', $messages)

### Constraints
10
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.010 s
Test case ID | EIDaf5b50fc-96a3-49e9-b015-d1400736687b

##### tn-as.b.1: TrafficFlowDirection can only be associated with a spatial object of the type Link or LinkSequence. click to expand contents

TrafficFlowDirection can only be associated with a spatial object of the type Link or LinkSequence.
OCL: "inv: networkRef.element.oclIsKindOf(LinkReference)".
Verify that an TrafficFlowDirection only has a Network element association with a spatial object TransportLink or TransportLinkSequence.
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 Transport Networks, A.1.6

Status | Passed
Duration | 0.001 s
Assertion ID | EIDfb2ed162-a2ef-4881-bb05-e261c2e316ae
Assertion URI | Link

Expression:let $target := ('RoadLink', 'RailwayLink', 'CablewayLink', 'WaterwayLink', 'AirRouteLink', ' ProcedureLink', 'StandardInstrumentDeparture', 'InstrumentApproachProcedure', 'StandardInstrumentArrival', 'RoadLinkSequence', 'RailwayLinkSequence', 'CablewayLinkSequence', 'WaterLinkSequence', 'AirLinkSequence') let $hrefs := $features[(self::*:TrafficFlowDirection|self::*:WaterTrafficFlowDirection)]/*:networkRef/*/*:element/@xlink:href let $messages := local:check-feature-references($hrefs, $target, 'Link or LinkSequence', 'networkRef.element', 1) return (if ($messages) then 'FAILED' else 'PASSED', $messages)

##### tn-as.b.2: All transport areas have an external object identifier. click to expand contents

All transport areas have an external object identifier
OCL: "inv:inspireId->notEmpty()".
Verify that all TransportArea have an inspireId.
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 Transport Networks, A.1.6

Status | Passed
Duration | 0.001 s
Assertion ID | EIDb7daf317-fad9-4d41-818f-1b43b52cb76a
Assertion URI | Link

Expression:let $featuresWithErrors := $features[(self::*:RoadServiceArea|self::*:RoadArea|self::*:VehicleTrafficArea|self::*:RailwayArea|self::*:RailwayStationArea|self::*:RailwayYardArea|self::*:FairwayArea|self::*:PortArea|self::*:TrafficSeparationSchemeCrossing|self::*:TrafficSeparationSchemeLane|self::*:TrafficSeparationSchemeRoundabout|self::*:TrafficSeparationSchemeSeperator|self::*:AerodromeArea|self::*:AirspaceArea|self::*:ApronArea|self::*:RunwayArea|self::*:TaxiwayArea)[not(*:inspireId[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': 'All transport areas have an external object identifier.'}))

##### tn-as.b.3: All transport links have an external object identifier. click to expand contents

All transport links have an external object identifier.
OCL: "inv:inspireId->notEmpty()".
Verify that all TransportLink have an inspireId.
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 Transport Networks, A.1.6

Status | Passed
Duration | 0.001 s
Assertion ID | EID2164f7e3-ca11-4958-a11e-c9482c0541d9
Assertion URI | Link

Expression:let $featuresWithErrors := $features[(self::*:RoadLink|self::*:RailwayLink|self::*:CablewayLink|self::*:WaterwayLink|self::*:AirRouteLink|self::*:ProcedureLink|self::*:StandardInstrumentDeparture|self::*:InstrumentApproachProcedure|self::*:StandardInstrumentArrival)[not(*:inspireId[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': 'All transport links have an external object identifier.'}))

##### tn-as.b.4: All transport link sequences have an external object identifier. click to expand contents

All transport link sequences have an external object identifier.
OCL: "inv:inspireId->notEmpty()".
Verify that all TransportLinkSequence have an inspireId.
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 Transport Networks, A.1.6

Status | Passed
Duration | 0.001 s
Assertion ID | EIDe31f1598-98ec-4d1c-9ad8-7abca5a21214
Assertion URI | Link

Expression:let $featuresWithErrors := $features[(self::*:RoadLinkSequence|self::*:RailwayLinkSequence|self::*:CablewayLinkSequence|self::*:WaterLinkSequence|self::*:AirLinkSequence)[not(*:inspireId[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': 'All transport link sequences have an external object identifier.'}))

##### tn-as.b.5: All transport link sets have an external object identifier. click to expand contents

All transport link sets have an external object identifier.
OCL: "inv:inspireId->notEmpty()".
Verify that all TransportLinkSet have an inspireId.
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 Transport Networks, A.1.6

Status | Passed
Duration | 0.001 s
Assertion ID | EID8a716b73-cfef-4bc7-b2a0-496059c55136
Assertion URI | Link

Expression:let $featuresWithErrors := $features[(self::*:Road|self::*:ERoad|self::*:RailwayLine|self::*:CablewayLinkSet|self::*:FerryCrossing|self::*:MarineWaterway|self::*:InlandWaterway|self::*:AirRoute)[not(*:inspireId[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': 'All transport link sets have an external object identifier.'}))

##### tn-as.b.6: All transport nodes have an external object identifier. click to expand contents

All transport nodes have an external object identifier.
OCL: "inv:inspireId->notEmpty()".
Verify that all TransportNode have an inspireId.<
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 Transport Networks, A.1.6

Status | Passed
Duration | 0.001 s
Assertion ID | EID6071c2b7-d4d3-4dcc-a3df-5d24e7739816
Assertion URI | Link

Expression:let $featuresWithErrors := $features[(self::*:RoadNode|self::*:RailwayNode|self::*:RailwayYardNode|self::*:RailwayStationNode|self::*:CablewayNode|self::*:WaterwayNode|self::*:PortNode|self::*:Navaid|self::*:DesignatedPoint|self::*:RunwayCentrelinePoint|self::*:TouchDownLiftOff|self::*:AerodromeNode)[not(*:inspireId[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': 'All transport nodes have an external object identifier.'}))

##### tn-as.b.7: All transport points have an external object identifier. click to expand contents

All transport points have an external object identifier.
OCL: "inv:inspireId->notEmpty()".
Verify that all TransportPoint have an inspireId.<
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 Transport Networks, A.1.6

Status | Passed
Duration | 0.001 s
Assertion ID | EID89792a2f-f3b7-4008-a1c6-eedfc6909bfc
Assertion URI | Link

Expression:let $featuresWithErrors := $features[(self::*:MarkerPost|self::*:Buoy|self::*:Beacon)[not(*:inspireId[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': 'All transport points have an external object identifier.'}))

##### tn-as.b.8: All transport properties have an external object identifier. click to expand contents

All transport properties have an external object identifier.
OCL: "inv:inspireId->notEmpty()".
Verify that all TransportProperty have an inspireId.<
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 Transport Networks, A.1.6

Status | Passed
Duration | 0.005 s
Assertion ID | EIDe4cb76d6-b8a6-4d90-ae4f-f2bed0ae26ad
Assertion URI | Link

Expression:let $featuresWithErrors := $features[(self::*:MaintenanceAuthority|self::*:OwnerAuthority|self::*:VerticalPosition|self::*:TrafficFlowDirection|self::*:ConditionOfFacility|self::*:RestrictionForVehicles|self::*:AccessRestriction|self::*:FunctionalRoadClass|self::*:RoadSurfaceCategory|self::*:RoadServiceType|self::*:RoadName|self::*:NumberOfLanes|self::*:SpeedLimit|self::*:RoadWidth|self::*:FormOfWay|self::*:NominalTrackGauge|self::*:RailwayElectrification|self::*:RailwayType|self::*:NumberOfTracks|self::*:DesignSpeed|self::*:RailwayUse|self::*:RailwayStationCode|self::*:FerryUse|self::*:CEMTClass|self::*:RestrictionForWaterVehicles|self::*:WaterTrafficFlowDirection|self::*:ConditionOfWaterFacility|self::*:UpperAltitudeLimit|self::*:FieldElevation|self::*:LowerAltitudeLimit|self::*:AerodromeType|self::*:SurfaceComposition|self::*:useRestriction|self::*:ElementLength|self::*:ElementWidth|self::*:AerodromeCategory|self::*:ConditionOfAirFacility)[not(*:inspireId[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': 'All transport properties have an external object identifier.'}))

##### tn-as.b.9: A transport link sequence must be composed of transport links that all belong to the same transport network. click to expand contents

A transport link sequence must be composed of transport links that all belong to the same transport network.
OCL: "inv: link->forAll(l | l.link.inNetwork = self.inNetwork)".
Verify that all TransportLinkSequence are composed of all link that have the same value for the inNetwork association role as the TransportLinkSequence.
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 Transport Networks, A.1.6

Status | Passed
Duration | 0.001 s
Assertion ID | EID8e5faabd-a733-4600-b519-18e53af211f4
Assertion URI | Link

Expression:let $candidates := $features[(self::*:RoadLinkSequence|self::*:RailwayLinkSequence|self::*:CablewayLinkSequence|self::*:WaterLinkSequence|self::*:AirLinkSequence)] let $refcount := count($candidates/*:link[not(@xsi:nil='true')]/*/*:link/@xlink:href) let $dummy := if ($refcount>100) then local:log("Checking " || $refcount || " feature references - this may take awhile...") else () let $messages := (for $candidate in $candidates return (for $href in $candidate/*:link[not(@xsi:nil='true')]/*/*:link/@xlink:href let $element := local:return-reference($href) return if (not($element)) then () (: ignore unresolvable links here, this is handled by the information accessibility tests :) else if ($element/*:inNetwork[not(@xsi:nil='true')]/@xlink:href = $candidate/*:inNetwork[not(@xsi:nil='true')]/@xlink:href) then () else local:addMessage('TR.constraintViolation', map { 'filename': local:filename($candidate), 'featureType': local-name($candidate), 'gmlid': string($candidate/@gml:id), 'constraint': 'A transport link sequence must be composed of transport links that all belong to the same transport network.', 'additionalInfo': 'The ' || local-name($element) || ' ''' || $element/@gml:id || ''' does not share a common network with the link sequence: ' || string-join($candidate/*:inNetwork[not(@xsi:nil='true')]/@xlink:href, '; ') || ' vs. ' || string-join($element/*:inNetwork[not(@xsi:nil='true')]/@xlink:href, '; ') || '.' })) )[position() le $limitErrors] return (if ($messages) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count(fn:distinct-values($messages//etf:argument[@token='gmlid']/text()))), $messages)

##### tn-as.b.10: A transport link set must be composed of transport links and or transport link sequences that all belong to the same transport network. click to expand contents

A transport link set must be composed of transport links and or transport link sequences that all belong to the same transport network.
OCL: "inv: link->forAll(l | l.inNetwork = self.inNetwork)".
Verify that all TransportLinkSet are composed of all link that have the same value for the inNetwork association role as the TransportLinkSet.
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 Transport Networks, A.1.6

Status | Passed
Duration | 0.001 s
Assertion ID | EIDf56cfea3-56e6-4afd-b136-2fe78faacec1
Assertion URI | Link

Expression:let $candidates := $features[(self::*:Road|self::*:ERoad|self::*:RailwayLine|self::*:CablewayLinkSet|self::*:FerryCrossing|self::*:MarineWaterway|self::*:InlandWaterway|self::*:AirRoute)[not(@xsi:nil='true')]] let $refcount := count($candidates/*:link[not(@xsi:nil='true')]/*/*:link/@xlink:href) let $dummy := if ($refcount>100) then local:log("Checking " || $refcount || " feature references - this may take awhile...") else () let $messages := (for $candidate in $candidates return (for $href in $candidate/*:link[not(@xsi:nil='true')]/*/*:link/@xlink:href let $element := local:return-reference($href) return if (not($element)) then () (: ignore unresolvable links here, this is handled by the information accessibility tests :) else if ($element/*:inNetwork[not(@xsi:nil='true')]/@xlink:href = $candidate/*:inNetwork[not(@xsi:nil='true')]/@xlink:href) then () else local:addMessage('TR.constraintViolation', map { 'filename': local:filename($candidate), 'featureType': local-name($candidate), 'gmlid': string($candidate/@gml:id), 'constraint': 'A transport link set must be composed of transport links and or transport link sequences that all belong to the same transport network', 'additionalInfo': 'The ' || local-name($element) || ' ''' || $element/@gml:id || ''' does not share a common network with the link set: ' || string-join($candidate/*:inNetwork[not(@xsi:nil='true')]/@xlink:href, '; ') || ' vs. ' || string-join($element/*:inNetwork[not(@xsi:nil='true')]/@xlink:href, '; ') || '.' })) )[position() le $limitErrors] return (if ($messages) then 'FAILED' else 'PASSED', local:error-statistics('TR.featuresWithErrors', count(fn:distinct-values($messages//etf:argument[@token='gmlid']/text()))), $messages)

### Geometry
2
click to expand contents

Verify that geometries are consistent with the geometries of other features in the data set.

Status | Passed, manual checks required
Duration | 0.001 s
Test case ID | EIDc1219880-f263-4459-9c87-c6b9377458c0

##### tn-as.c.1: No free transport nodes click to expand contents

verify for each TransportNode that the geometry (a gml:Point) is located at a position that touches a TransportLink.centrelineGeometry (a gml:LineString or gml:Curve), i.e. that the node is at the start or end of a transport link. Otherwise report freeNode.
Relevant requirements:

- IR Requirement Annex II Section 7.9.3 (2): Theme-specific Requirements – Geometry representation. In a Transport Networks data set which contains nodes, these nodes shall only be present where Transport Links connect or end.

Source: Abstract Test Case 'Geometry', INSPIRE Data Specification on Transport Networks, A.1.7

Status | Passed
Duration | 0.001 s
Assertion ID | EIDd6fa7b64-9a2a-490e-aebe-7411a4610407
Assertion URI | Link

Expression:let $nodes := $features[(self::*:RoadNode|self::*:RailwayNode|self::*:RailwayYardNode|self::*:RailwayStationNode|self::*:CablewayNode|self::*:WaterwayNode|self::*:PortNode|self::*:Navaid|self::*:DesignatedPoint|self::*:RunwayCentrelinePoint|self::*:TouchDownLiftOff|self::*:AerodromeNode)] let $nodesNotAir:= $features[(self::*:RoadNode|self::*:RailwayNode|self::*:RailwayYardNode|self::*:RailwayStationNode|self::*:CablewayNode|self::*:WaterwayNode|self::*:PortNode)] let $nodesAir := $features[(self::*:Navaid|self::*:DesignatedPoint|self::*:RunwayCentrelinePoint|self::*:TouchDownLiftOff|self::*:AerodromeNode)] let $nodeLinks := $features[(self::*:RoadLink|self::*:RailwayLink|self::*:CablewayLink|self::*:WaterwayLink|self::*:AirRouteLink|self::*:ProcedureLink|self::*:StandardInstrumentDeparture|self::*:InstrumentApproachProcedure|self::*:StandardInstrumentArrival)] return if (count($nodes) = 0) then 'PASSED' else let $featuresWithErrorsNotAir := (for $candidate in $nodesNotAir return try { let $candidate_geometry := ggeo:getGeometry($candidate/@gml:id,$candidate/*:geometry/*[1]) let $env := ggeo:envelope($candidate_geometry) let $other_features := ggeo:search($env[1],$env[2],$env[3],$env[4]) let $manual := if (count($other_features[(self::*:RoadLink|self::*:RailwayLink|self::*:CablewayLink|self::*:WaterwayLink|self::*:AirRouteLink|self::*:ProcedureLink|self::*:StandardInstrumentDeparture|self::*:InstrumentApproachProcedure|self::*:StandardInstrumentArrival)]) = 0 and count($nodeLinks) = 0) then ( true() ) else if (count($other_features[(self::*:RoadLink|self::*:RailwayLink|self::*:CablewayLink|self::*:WaterwayLink|self::*:AirRouteLink|self::*:ProcedureLink|self::*:StandardInstrumentDeparture|self::*:InstrumentApproachProcedure|self::*:StandardInstrumentArrival)]/*:centrelineGeometry/*[1]) = 0 and count($nodeLinks/*:centrelineGeometry/*[1]) = 0) then ( true() ) else ( false() ) let $touches := (for $feature in $other_features[(self::*:RoadLink|self::*:RailwayLink|self::*:CablewayLink|self::*:WaterwayLink|self::*:AirRouteLink|self::*:ProcedureLink|self::*:StandardInstrumentDeparture|self::*:InstrumentApproachProcedure|self::*:StandardInstrumentArrival)] return try { let $other_geometry := ggeo:getGeometry($feature/@gml:id,$feature/*:centrelineGeometry/*[1]) return if (ggeo:touches($candidate_geometry,$other_geometry)) then $feature else () } 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 ($manual) then local:addMessage('TR.manual.tnfreeNode', map { 'filename': local:filename($candidate), 'featureType': local-name($candidate), 'gmlid': string($candidate/@gml:id) }) else if (not($touches)) then local:addMessage('TR.freeNode', map { 'filename': local:filename($candidate), 'featureType': local-name($candidate), 'gmlid': string($candidate/@gml:id) }) else () } catch * { let $dummy := local:log('Processing feature ' || string($candidate/@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 :) } )[position() le $limitErrors] let $featuresWithErrorsAir := (for $candidate in $nodesAir return if (($candidate/tn-a:significantPoint != "false") or (not(exists($candidate/tn-a:significantPoint)))) then( try { let $candidate_geometry := ggeo:getGeometry($candidate/@gml:id,$candidate/*:geometry/*[1]) let $env := ggeo:envelope($candidate_geometry) let $other_features := ggeo:search($env[1],$env[2],$env[3],$env[4]) let $manual := if (count($other_features[(self::*:RoadLink|self::*:RailwayLink|self::*:CablewayLink|self::*:WaterwayLink|self::*:AirRouteLink|self::*:ProcedureLink|self::*:StandardInstrumentDeparture|self::*:InstrumentApproachProcedure|self::*:StandardInstrumentArrival)]) = 0 and count($nodeLinks) = 0) then ( true() ) else if (count($other_features[(self::*:RoadLink|self::*:RailwayLink|self::*:CablewayLink|self::*:WaterwayLink|self::*:AirRouteLink|self::*:ProcedureLink|self::*:StandardInstrumentDeparture|self::*:InstrumentApproachProcedure|self::*:StandardInstrumentArrival)]/*:centrelineGeometry/*[1]) = 0 and count($nodeLinks/*:centrelineGeometry/*[1]) = 0) then ( true() ) else ( false() ) let $touches := (for $feature in $other_features[(self::*:RoadLink|self::*:RailwayLink|self::*:CablewayLink|self::*:WaterwayLink|self::*:AirRouteLink|self::*:ProcedureLink|self::*:StandardInstrumentDeparture|self::*:InstrumentApproachProcedure|self::*:StandardInstrumentArrival)] return try { let $other_geometry := ggeo:getGeometry($feature/@gml:id,$feature/*:centrelineGeometry/*[1]) return if (ggeo:touches($candidate_geometry,$other_geometry)) then $feature else () } 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 ($manual) then local:addMessage('TR.manual.tnfreeNode', map { 'filename': local:filename($candidate), 'featureType': local-name($candidate), 'gmlid': string($candidate/@gml:id) }) else if (not($touches)) then local:addMessage('TR.freeNode', map { 'filename': local:filename($candidate), 'featureType': local-name($candidate), 'gmlid': string($candidate/@gml:id) }) else () } catch * { let $dummy := local:log('Processing feature ' || string($candidate/@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 :) }) else() )[position() le $limitErrors] let $featuresWithErrors := ($featuresWithErrorsNotAir, $featuresWithErrorsAir) return (if ($featuresWithErrors and ($featuresWithErrors/@ref = ('TR.freeNode'))) then 'FAILED' else if($featuresWithErrors and $featuresWithErrors/@ref = ('TR.manual.tnfreeNode')) then 'PASSED_MANUAL' else 'PASSED', local:error-statistics('TR.recordsWithErrors', count(fn:distinct-values($featuresWithErrors//etf:argument[@token='id']/text()))), $featuresWithErrors)

##### tn-as.c.2: Intersections only at crossings click to expand contents

Verify that transport link connections are consistent with the real world, i.e. check that TransportLink features ends are connected wherever a connection exists between the real world phenomena they represent. No connections must be created at connecting network elements when it is not possible for water to pass from one element to another.
Relevant requirements:

- IIR Requirement Annex II Section 7.9.3 (1): Theme-specific Requirements – Geometry representation. Transport link ends shall be connected wherever an intersection exists between the real world phenomena they represent. No connections shall be created at crossing network elements when it is not possible to pass from one element to another.

Source: Abstract Test Case 'Geometry', INSPIRE Data Specification on Transport Networks, A.1.7

Status | Passed, manual checks required
Duration | 0.001 s
Assertion ID | EID4e0e2598-8103-4b18-a98a-673910214c91
Assertion URI | Link

### Network connectivity
3
click to expand contents

Verify the connectivity of the transport network.

Status | Passed, manual checks required
Duration | 0.001 s
Test case ID | EIDa85e3c90-3e4f-4c7a-a6a2-8e38671d6556

##### tn-as.d.1: Connectivity at crossings click to expand contents

Verify that all transport nodes are at the start or end of a transport link. For each TransportLink with a startNode or endNode property, verify that the distance between the start or end of the centrelineGeometry and the geometry of the start and end TransportNode is smaller than the connectivityTolerance.
Relevant requirements:

- IR Requirement Annex II Section 8.7.7 (1): Theme-specific Requirements – Ensuring Network Connectivity. Wherever a connection exists in a transport network, all connected link ends and the optional node that take part in this connection have to be positioned at a distance of less than the connectivity tolerance from each other.

Known limitations:

- To use a connectivityTolerance parameter would require that all geometries are first converted to a meter-based CRS, eg ETRS89 LAEA or LCC, which is currently not supported by the geometry library. In addition, it is unclear how to handle geometries outside of continental Europe. Therefore, the assertion has been classified as "manual" in this Executable Test Suite.

Source: Abstract Test Case 'Network connectivity', INSPIRE Data Specification on Transport Networks, A.1.10

Status | Passed, manual checks required
Duration | 0.001 s
Assertion ID | EID11d618c8-56b1-4405-92ec-99b3c89bb36a
Assertion URI | Link

##### tn-as.d.2: Unconnected nodes click to expand contents

For each WatercourseLink verify that the only HydroNodes in the distance around the start or end of the centrelineGeometry are the nodes associated via the startNode and endNode properties.
Relevant requirements:

- IR Requirement Annex II Section 8.7.7 (2): Theme-specific Requirements – Ensuring Network Connectivity. Link ends and nodes that are not connected shall always be separated by a distance that is greater than the connectivity tolerance.

Known limitations:

- To use a connectivityTolerance parameter would require that all geometries are first converted to a meter-based CRS, eg ETRS89 LAEA or LCC, which is currently not supported by the geometry library. In addition, it is unclear how to handle geometries outside of continental Europe. Therefore, the assertion has been classified as "manual" in this Executable Test Suite.

Source: Abstract Test Case 'Network connectivity', INSPIRE Data Specification on Transport Networks, A.1.10

Status | Passed, manual checks required
Duration | 0.001 s
Assertion ID | EID57a2596d-0730-409a-8ef1-7478a8ecda94
Assertion URI | Link

##### tn-as.d.3: Connectivity tolerance click to expand contents

Verify that the connectivity tolerance provided for the test is consistent with the metadata of the data set, i.e. check that the connectivity tolerance provided for the test is the same included in the metadata of the data set in the properties 'specification' and 'explanation' of the DQ_ConformanceResult element in a DQ_TopologicalConsistency element.
Relevant requirements:

- IR Requirement Annex II Section 8.7.7 (1): Theme-specific Requirements – Ensuring Network Connectivity. Wherever a connection exists in a hydrographic network, all connected link ends and the optional node that take part in this connection have to be positioned at a distance of less than the connectivity tolerance from each other.
- IR Requirement Annex II Section 8.7.7 (2): Theme-specific Requirements – Ensuring Network Connectivity. Link ends and nodes that are not connected shall always be separated by a distance that is greater than the connectivity tolerance.

Known limitations:

- To use a connectivityTolerance parameter would require that all geometries are first converted to a meter-based CRS, eg ETRS89 LAEA or LCC, which is currently not supported by the geometry library. In addition, it is unclear how to handle geometries outside of continental Europe. Therefore, the assertion has been classified as "manual" in this Executable Test Suite.

Source: Abstract Test Case 'Network connectivity', INSPIRE Data Specification on Transport Networks, A.1.10

Status | Passed, manual checks required
Duration | 0.001 s
Assertion ID | EID6b530474-d5fb-45b5-b4cc-5dbeb5a89670
Assertion URI | Link

### Object References
2
click to expand contents

Verify the consistent use of references to other features.

Status | Passed, manual checks required
Duration | 0.001 s
Test case ID | EIDf271ab9f-796b-4644-b27f-cf5dbb919cdc

##### tn-as.e.1: Linear references click to expand contents

For each NetworkProperty feature that links to a TransportLink or a TransportLinkSequence, verify that any linear references are consistent with the length of the geometry of the network feature.
Relevant requirements:

- IR Requirement Annex II Section 7.9.2 (1): Theme-specific Requirements – Modelling of object references. When linear referencing is used in Transport Networks data, the position of referenced properties on links and link sequences shall be expressed as distances measured along the supplied geometry of the underlying link object(s).

Known limitations:

- The length is not provided as an attribute of the Link features. I.e., the length needs to be derived from the centreline geometries. This would require that the geometries are first converted to a meter-based CRS, eg ETRS89 LAEA or LCC, which is currently not supported by the geometry library. In addition, it is unclear how to handle geometries outside of continental Europe. Therefore, the assertion has been classified as "manual" in this Executable Test Suite.

Source: Abstract Test Case 'Object References', INSPIRE Data Specification on Transport Networks, A.1.8

Status | Passed, manual checks required
Duration | 0.001 s
Assertion ID | EID8353f727-60ce-4893-9a33-5b93013ff6d8
Assertion URI | Link

##### tn-as.e.2: Inter-modal connections click to expand contents

For each NetworkConnection with as value 'intermodal' for the type attribute, verify that the two elements referenced in the element association role belong to different networks, i.e. they reference different networks in their inNetwork association role.
Relevant requirements:

- IIR Requirement Annex II Section 7.9.2 (2): Theme-specific Requirements – Modelling of object references. An inter-modal connection shall always reference two elements which belong to different networks.

Source: Abstract Test Case 'Object References', INSPIRE Data Specification on Transport Networks, A.1.8

Status | Passed
Duration | 0.001 s
Assertion ID | EID4412563c-a691-4479-bb70-a465d140ec64
Assertion URI | Link

Expression:let $interModalConnections := $features[self::*:NetworkConnection[(net3:type/text() eq "intermodal") or (net:type/@xlink:href eq 'http://inspire.ec.europa.eu/codelist/ConnectionTypeValue/intermodal')]] return if (count($interModalConnections) = 0) then 'PASSED' else let $refcount := count($interModalConnections/*:element[not(@xsi:nil='true')]/@xlink:href) let $dummy := if ($refcount>100) then local:log("Checking " || $refcount || " feature references - this may take awhile...") else () let $featuresWithErrors := (for $interModalConnection in $interModalConnections let $element1 := local:return-reference($interModalConnection/*:element[1][not(@xsi:nil='true')]/@xlink:href) let $element2 := local:return-reference($interModalConnection/*:element[2][not(@xsi:nil='true')]/@xlink:href) return if (not($element1 or $element2)) then () (: ignore unresolvable links here, this is handled by the information accessibility tests :) else if ($element1/*:inNetwork/@xlink:href eq $element2/*:inNetwork/@xlink:href) then $interModalConnection else () )[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.wrongIntermodalConnection', map { 'filename': local:filename($feature), 'featureType': local-name($feature), 'gmlid': string($feature/@gml:id)}))

## Conformance class: Application schema, Rail Transport Networks
3

This test suite examines requirements associated with the application schema.
Note that since both code-list-valued properties of this application schema may be extended without restrictions, there is no test case for code list values.
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 not fully supported.
Source: Conformance Class 'Application schema, Rail Transport Networks'
Pre-requisite conformance classes:

- Conformance Class 'GML application schemas, Transport Networks'
- Conformance Class 'Application schemas, Transport Networks Common'

Status | Passed, manual checks required
Duration | 0.129 s
Test suite ID | EIDe2610a9f-6432-489d-8238-92b1193e7a3d
Author | PwC
Date created | 12/12/2016 00:00:00 GMT
Version | 0.2.2
Last editor | Consortium Bilbomatica y Guadaltel
Last updated | 15/05/2024 16:00:00 GMT
Reference | Link
Hash | CBF29CE484222325

### Code list values
3
click to expand contents

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

Status | Passed
Duration | 0.128 s
Test case ID | EID6cb7ec75-bfae-4f0b-9986-b1e6ff5b6e93

##### tn-ra-as.a.1: FormOfRailwayNodeValue 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/FormOfRailwayNodeValue/.
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 Transport Networks, A.1.3, A.6.1

Status | Passed
Duration | 0.031 s
Assertion ID | EID728c567a-7778-41b3-8e9b-b97d293af037
Assertion URI | Link

Expression:let $features3 := $features[(self::tn-ra3:RailwayNode or self::tn-ra3:RailwayYardNode or self::tn-ra3:RailwayStationNode)] let $features4 := $features[(self::tn-ra:RailwayNode or self::tn-ra:RailwayYardNode or self::tn-ra:RailwayStationNode)] let $messages := local:check-code-list-values($features3, $features4, 'formOfNode', 'http://inspire.ec.europa.eu/codelist/FormOfRailwayNodeValue') return (if ($messages) then 'FAILED' else 'PASSED', $messages)

##### tn-ra-as.a.2: RailwayTypeValue 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/RailwayTypeValue/.
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 Transport Networks, A.1.3, A.6.1

Status | Passed
Duration | 0.029 s
Assertion ID | EID99ca512e-f8e6-40b7-8b46-c5eb4a53b8f9
Assertion URI | Link

Expression:let $features3 := $features[self::tn-ra3:RailwayType] let $features4 := $features[self::tn-ra:RailwayType] let $messages := local:check-code-list-values($features3, $features4, 'type', 'http://inspire.ec.europa.eu/codelist/RailwayTypeValue') return (if ($messages) then 'FAILED' else 'PASSED', $messages)

##### tn-ra-as.a.3: RailwayUseValue 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/RailwayUseValue/.
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 Transport Networks, A.1.3, A.6.1

Status | Passed
Duration | 0.068 s
Assertion ID | EIDcd0361d5-7ced-4262-aa37-321762357289
Assertion URI | Link

Expression:let $features3 := $features[self::tn-ra3:RailwayUse] let $features4 := $features[self::tn-ra:RailwayUse] let $messages := local:check-code-list-values($features3, $features4, 'use', 'http://inspire.ec.europa.eu/codelist/RailwayUseValue') return (if ($messages) then 'FAILED' else 'PASSED', $messages)

### Constraints
9
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 | EIDa660e7d9-0733-4f9c-abb2-e151c434dadc

##### tn-ra-as.b.1: DesignSpeed can only be associated with a spatial object that is part of a railway transport network. click to expand contents

DesignSpeed can only be associated with a spatial object that is part of a railway transport network.
OCL: "inv: networkRef.element.oclIsKindOf(RailwayArea) or networkRef.element.oclIsKindOf(RailwayYardArea) or networkRef.element.oclIsKindOf(RailwayStationArea) or networkRef.element.oclIsKindOf(RailwayLine) or networkRef.element.oclIsKindOf(RailwayLinkSequence) or networkRef.element.oclIsKindOf(RailwayLink) or networkRef.element.oclIsKindOf(RailwayNode)".
Verify that a DesignSpeed only has a Network element association with a spatial object RailwayArea, RailwayYardArea, RailwayStationArea, RailwayLine, RailwayLinkSequence, RailwayLink, or RailwayNode.
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 Transport Networks, A.1.6

Status | Passed
Duration | 0.001 s
Assertion ID | EIDbacb06ed-98b4-4189-8027-512ddc9f6576
Assertion URI | Link

Expression:let $target := ('RailwayArea', 'RailwayYardArea', 'RailwayStationArea', 'RailwayLine', 'RailwayLinkSequence', 'RailwayLink', 'RailwayNode', 'RailwayYardNode', 'RailwayStationNode') let $hrefs := $features[self::*:DesignSpeed]/*:networkRef/*/*:element/@xlink:href let $messages := local:check-feature-references($hrefs, $target, 'RailwayArea, RailwayYardArea, RailwayStationArea, RailwayLine, RailwayLinkSequence, RailwayLink, or RailwayNode', 'networkRef.element', 1) return (if ($messages) then 'FAILED' else 'PASSED', $messages)

##### tn-ra-as.b.2: NominalTrackGauge can only be associated with a spatial object that is part of a railway transport network. click to expand contents

NominalTrackGauge can only be associated with a spatial object that is part of a railway transport network.
OCL: "inv: networkRef.element.oclIsKindOf(RailwayArea) or networkRef.element.oclIsKindOf(RailwayYardArea) or networkRef.element.oclIsKindOf(RailwayStationArea) or networkRef.element.oclIsKindOf(RailwayLine) or networkRef.element.oclIsKindOf(RailwayLinkSequence) or networkRef.element.oclIsKindOf(RailwayLink) or networkRef.element.oclIsKindOf(RailwayNode)".
Verify that a NominalTrackGauge only has a Network element association with a spatial object RailwayArea, RailwayYardArea, RailwayStationArea, RailwayLine, RailwayLinkSequence, RailwayLink, or RailwayNode.
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 Transport Networks, A.1.6

Status | Passed
Duration | 0.001 s
Assertion ID | EID54572543-d42a-46ac-917f-a71de8b669fd
Assertion URI | Link

Expression:let $target := ('RailwayArea', 'RailwayYardArea', 'RailwayStationArea', 'RailwayLine', 'RailwayLinkSequence', 'RailwayLink', 'RailwayNode', 'RailwayYardNode', 'RailwayStationNode') let $hrefs := $features[self::*:NominalTrackGauge]/*:networkRef/*/*:element/@xlink:href let $messages := local:check-feature-references($hrefs, $target, 'RailwayArea, RailwayYardArea, RailwayStationArea, RailwayLine, RailwayLinkSequence, RailwayLink, or RailwayNode', 'networkRef.element', 1) return (if ($messages) then 'FAILED' else 'PASSED', $messages)

##### tn-ra-as.b.3: NumberOfTracks can only be associated with a spatial object that is part of a railway transport network. click to expand contents

NumberOfTracks can only be associated with a spatial object that is part of a railway transport network.
OCL: "inv: networkRef.element.oclIsKindOf(RailwayArea) or networkRef.element.oclIsKindOf(RailwayYardArea) or networkRef.element.oclIsKindOf(RailwayStationArea) or networkRef.element.oclIsKindOf(RailwayLine) or networkRef.element.oclIsKindOf(RailwayLinkSequence) or networkRef.element.oclIsKindOf(RailwayLink) or networkRef.element.oclIsKindOf(RailwayNode)".
Verify that a NumberOfTracks only has a Network element association with a spatial object RailwayArea, RailwayYardArea, RailwayStationArea, RailwayLine, RailwayLinkSequence, RailwayLink, or RailwayNode.
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 Transport Networks, A.1.6

Status | Passed
Duration | 0.001 s
Assertion ID | EID8fe15645-6a3e-4b4e-8018-b2f25d76f424
Assertion URI | Link

Expression:let $target := ('RailwayArea', 'RailwayYardArea', 'RailwayStationArea', 'RailwayLine', 'RailwayLinkSequence', 'RailwayLink', 'RailwayNode', 'RailwayYardNode', 'RailwayStationNode') let $hrefs := $features[self::*:NumberOfTracks]/*:networkRef/*/*:element/@xlink:href let $messages := local:check-feature-references($hrefs, $target, 'RailwayArea, RailwayYardArea, RailwayStationArea, RailwayLine, RailwayLinkSequence, RailwayLink, or RailwayNode', 'networkRef.element', 1) return (if ($messages) then 'FAILED' else 'PASSED', $messages)

##### tn-ra-as.b.4: RailwayElectrification can only be associated with a spatial object that is part of a railway transport network. click to expand contents

RailwayElectrification can only be associated with a spatial object that is part of a railway transport network.
OCL: "inv: networkRef.element.oclIsKindOf(RailwayArea) or networkRef.element.oclIsKindOf(RailwayYardArea) or networkRef.element.oclIsKindOf(RailwayStationArea) or networkRef.element.oclIsKindOf(RailwayLine) or networkRef.element.oclIsKindOf(RailwayLinkSequence) or networkRef.element.oclIsKindOf(RailwayLink) or networkRef.element.oclIsKindOf(RailwayNode)".
Verify that a RailwayElectrification only has a Network element association with a spatial object RailwayArea, RailwayYardArea, RailwayStationArea, RailwayLine, RailwayLinkSequence, RailwayLink, or RailwayNode.
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 Transport Networks, A.1.6

Status | Passed
Duration | 0.001 s
Assertion ID | EIDc8691d78-6e76-4ba4-ab02-36dac196bbe5
Assertion URI | Link

Expression:let $target := ('RailwayArea', 'RailwayYardArea', 'RailwayStationArea', 'RailwayLine', 'RailwayLinkSequence', 'RailwayLink', 'RailwayNode', 'RailwayYardNode', 'RailwayStationNode') let $hrefs := $features[self::*:RailwayElectrification]/*:networkRef/*/*:element/@xlink:href let $messages := local:check-feature-references($hrefs, $target, 'RailwayArea, RailwayYardArea, RailwayStationArea, RailwayLine, RailwayLinkSequence, RailwayLink, or RailwayNode', 'networkRef.element', 1) return (if ($messages) then 'FAILED' else 'PASSED', $messages)

##### tn-ra-as.b.5: RailwayStationCode can only be associated with a spatial object that is part of a railway transport network. click to expand contents

RailwayStationCode can only be associated with a spatial object that is part of a railway transport network.
OCL: "inv: networkRef.element.oclIsKindOf(RailwayArea) or networkRef.element.oclIsKindOf(RailwayYardArea) or networkRef.element.oclIsKindOf(RailwayStationArea) or networkRef.element.oclIsKindOf(RailwayLine) or networkRef.element.oclIsKindOf(RailwayLinkSequence) or networkRef.element.oclIsKindOf(RailwayLink) or networkRef.element.oclIsKindOf(RailwayNode)".
Verify that a RailwayStationCode only has a Network element association with a spatial object RailwayArea, RailwayYardArea, RailwayStationArea, RailwayLine, RailwayLinkSequence, RailwayLink, or RailwayNode.
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 Transport Networks, A.1.6

Status | Passed
Duration | 0.001 s
Assertion ID | EID7614cfde-656f-4f86-b94c-9a46c4572981
Assertion URI | Link

Expression:let $target := ('RailwayArea', 'RailwayYardArea', 'RailwayStationArea', 'RailwayLine', 'RailwayLinkSequence', 'RailwayLink', 'RailwayNode', 'RailwayYardNode', 'RailwayStationNode') let $hrefs := $features[self::*:RailwayStationCode]/*:networkRef/*/*:element/@xlink:href let $messages := local:check-feature-references($hrefs, $target, 'RailwayArea, RailwayYardArea, RailwayStationArea, RailwayLine, RailwayLinkSequence, RailwayLink, or RailwayNode', 'networkRef.element', 1) return (if ($messages) then 'FAILED' else 'PASSED', $messages)

##### tn-ra-as.b.6: RailwayType can only be associated with a spatial object that is part of a railway transport network. click to expand contents

RailwayType can only be associated with a spatial object that is part of a railway transport network.
OCL: "inv: networkRef.element.oclIsKindOf(RailwayArea) or networkRef.element.oclIsKindOf(RailwayYardArea) or networkRef.element.oclIsKindOf(RailwayStationArea) or networkRef.element.oclIsKindOf(RailwayLine) or networkRef.element.oclIsKindOf(RailwayLinkSequence) or networkRef.element.oclIsKindOf(RailwayLink) or networkRef.element.oclIsKindOf(RailwayNode)".
Verify that a RailwayType only has a Network element association with a spatial object RailwayArea, RailwayYardArea, RailwayStationArea, RailwayLine, RailwayLinkSequence, RailwayLink, or RailwayNode.
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 Transport Networks, A.1.6

Status | Passed
Duration | 0.001 s
Assertion ID | EID17f81e3c-2b3c-41f5-86ed-df3ef6af1283
Assertion URI | Link

Expression:let $target := ('RailwayArea', 'RailwayYardArea', 'RailwayStationArea', 'RailwayLine', 'RailwayLinkSequence', 'RailwayLink', 'RailwayNode', 'RailwayYardNode', 'RailwayStationNode') let $hrefs := $features[self::*:RailwayType]/*:networkRef/*/*:element/@xlink:href let $messages := local:check-feature-references($hrefs, $target, 'RailwayArea, RailwayYardArea, RailwayStationArea, RailwayLine, RailwayLinkSequence, RailwayLink, or RailwayNode', 'networkRef.element', 1) return (if ($messages) then 'FAILED' else 'PASSED', $messages)

##### tn-ra-as.b.7: RailwayUse can only be associated with a spatial object that is part of a railway transport network. click to expand contents

RailwayUse can only be associated with a spatial object that is part of a railway transport network.
OCL: "inv: networkRef.element.oclIsKindOf(RailwayArea) or networkRef.element.oclIsKindOf(RailwayYardArea) or networkRef.element.oclIsKindOf(RailwayStationArea) or networkRef.element.oclIsKindOf(RailwayLine) or networkRef.element.oclIsKindOf(RailwayLinkSequence) or networkRef.element.oclIsKindOf(RailwayLink) or networkRef.element.oclIsKindOf(RailwayNode)".
Verify that a RailwayUse only has a Network element association with a spatial object RailwayArea, RailwayYardArea, RailwayStationArea, RailwayLine, RailwayLinkSequence, RailwayLink, or RailwayNode.
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 Transport Networks, A.1.6

Status | Passed
Duration | 0.001 s
Assertion ID | EIDcbaed0d5-0f9a-4ba4-b601-b58b08a4f085
Assertion URI | Link

Expression:let $target := ('RailwayArea', 'RailwayYardArea', 'RailwayStationArea', 'RailwayLine', 'RailwayLinkSequence', 'RailwayLink', 'RailwayNode', 'RailwayYardNode', 'RailwayStationNode') let $hrefs := $features[self::*:RailwayUse]/*:networkRef/*/*:element/@xlink:href let $messages := local:check-feature-references($hrefs, $target, 'RailwayArea, RailwayYardArea, RailwayStationArea, RailwayLine, RailwayLinkSequence, RailwayLink, or RailwayNode', 'networkRef.element', 1) return (if ($messages) then 'FAILED' else 'PASSED', $messages)

##### tn-ra-as.b.8: For a railway station node, the value for the "formOfNode" attribute shall always be "RailwayStop". click to expand contents

For a railway station node, the value for the "formOfNode" attribute shall always be "RailwayStop".
OCL:"formOfNode = FormOfRailwayNodeValue::railwayStop".
Verify that the value of the attribute formOfNode of all RailwayStationNode is RailwayStop.
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 Transport Networks, A.1.6

Status | Passed
Duration | 0.001 s
Assertion ID | EID8be75714-787a-4321-97ec-498b95300fda
Assertion URI | Link

Expression:let $featuresWithErrors := $features[(self::*:RailwayStationNode)[not(*:formOfNode/@xsi:nil='true') and ((tn-ra3:formOfNode/text() ne 'RailwayStop') or (tn-ra:formOfNode/@xlink:href ne 'http://inspire.ec.europa.eu/codelist/FormOfRailwayNodeValue/railwayStop'))]][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': 'For a railway station node, the value for the "formOfNode" attribute shall always be "RailwayStop".'}))

##### tn-ra-as.b.9: For a railway yard node, the value for the "formOfNode" attribute shall always be "RailwayStop". click to expand contents

For a railway yard node, the value for the "formOfNode" attribute shall always be "RailwayStop".
OCL: "formOfNode = FormOfRailwayNodeValue::railwayStop";
Verify that the value of the attribute formOfNode of all RailwayYardNode is RailwayStop.
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 Transport Networks, A.1.6

Status | Passed
Duration | 0.001 s
Assertion ID | EIDb122b363-ea8c-4fb2-a9ae-c40c7014a910
Assertion URI | Link

Expression:let $featuresWithErrors := $features[(self::*:RailwayYardNode)[not(*:formOfNode/@xsi:nil='true') and ((tn-ra3:formOfNode/text() ne 'RailwayStop') or (tn-ra:formOfNode/@xlink:href ne 'http://inspire.ec.europa.eu/codelist/FormOfRailwayNodeValue/railwayStop'))]][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': 'For a railway yard node, the value for the "formOfNode" attribute shall always be "RailwayStop".'}))

### Link centrelines
1
click to expand contents

Verify that Road links intersections are consistent with the real world.

Status | Passed, manual checks required
Duration | 0.001 s
Test case ID | EIDf691bd9a-7d43-453b-9d82-7337a16225fc

##### tn-ro-as.a.1: Link centrelines test click to expand contents

Verify that the centrelines of Rail links fall within the extent of the physical real world object that they represent, if the RailLink feature is indicated as not being 'fictitious', i.e. check for each RailLink object with a property 'fictitious' with a value 'false' that its centerline geometry falls within the extent of the physical real world object that they represent.
Relevant requirements:

- IR Requirement Annex II Section 7.9.5: Theme-specific Requirements – Centrelines. The centrelines of Road and Rail objects shall fall within the extent of the physical real world object that they represent if the Link is indicated as not being ‘fictitious’.

Source: Abstract Test Case 'Link centrelines', INSPIRE Data Specification on Transport Networks, A.1.9

Status | Passed, manual checks required
Duration | 0.001 s
Assertion ID | EIDf98ca299-32a5-40c2-b72e-f3149fc9ed9b
Assertion URI | Link

# Report generated by ETF

Level of detail