# Test run on 16:34 - 11.02.2026 with test suite Annex I - Transport networks (TN)

Report URI | Link
Status | Passed, manual checks required
Started | 11/02/2026 15:47:32 GMT
Duration | 9 min 40 s
Report version | 2.1.0-b181101
Log URI | Link

| Total Count | Skipped | Failed | Warnings | Manual
--- | --- | --- | --- | --- | ---
Test suites | 11 | 0 | 0 | 0 | 5
Test cases | 26 | 0 | 0 | 0 | 7
Assertions | 72 | 0 | 0 | 0 | 11

Level of detail All detailsLess informationSimplified
Show AllOnly failedOnly manual

### Parameters

tests_to_execute | .*
files_to_test | .*

### Test object: tn_waterways.zip

Files: 1

Size: 41 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 | 32107
Beacon | 8414
Buoy | 10140
CEMTClass | 9
InlandWaterway | 1647
MarineWaterway | 25
MarkerPost | 2809
TrafficSeparationSchemeCrossing | 75
TrafficSeparationSchemeSeparator | 75
TransportNetwork | 1
WaterTrafficFlowDirection | 1
WaterwayLink | 4746
WaterwayNode | 4165

### Log path: Conformance class: Information accessibility, Transport Networks

    Testing 32107 features
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-2025.1.1/data-tn/tn-ia/ets-tn-ia-bsxets.xml
    Statistics table: 33 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 - 264 ms
    Test Assertion 'tn-ia.b.2: TransportLinkSet.post': PASSED - 243 ms
    Test Case 'Feature references' finished: PASSED
    Test Suite 'Conformance class: Information accessibility, Transport Networks' finished: PASSED

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

    Testing 32107 features
    Indexing features (parsing errors: 0): 6290 ms
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-2025.1.1/data-tn/tn-as/ets-tn-as-bsxets.xml
    Statistics table: 84 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 - 78 ms
    Test Assertion 'tn-as.a.2: RestrictionTypeValue attributes': PASSED - 89 ms
    Test Case 'Code list values' finished: PASSED
    Test Case 'Constraints' started
    Analyzing up to 4746 feature references - this may take awhile...
    Analyzing feature reference 100/4746
    Analyzing feature reference 200/4746
    Analyzing feature reference 300/4746
    Analyzing feature reference 400/4746
    Analyzing feature reference 500/4746
    Analyzing feature reference 600/4746
    Analyzing feature reference 700/4746
    Analyzing feature reference 800/4746
    Analyzing feature reference 900/4746
    Analyzing feature reference 1000/4746
    Analyzing feature reference 1100/4746
    Analyzing feature reference 1200/4746
    Analyzing feature reference 1300/4746
    Analyzing feature reference 1400/4746
    Analyzing feature reference 1500/4746
    Analyzing feature reference 1600/4746
    Analyzing feature reference 1700/4746
    Analyzing feature reference 1800/4746
    Analyzing feature reference 1900/4746
    Analyzing feature reference 2000/4746
    Analyzing feature reference 2100/4746
    Analyzing feature reference 2200/4746
    Analyzing feature reference 2300/4746
    Analyzing feature reference 2400/4746
    Analyzing feature reference 2500/4746
    Analyzing feature reference 2600/4746
    Analyzing feature reference 2700/4746
    Analyzing feature reference 2800/4746
    Analyzing feature reference 2900/4746
    Analyzing feature reference 3000/4746
    Analyzing feature reference 3100/4746
    Analyzing feature reference 3200/4746
    Analyzing feature reference 3300/4746
    Analyzing feature reference 3400/4746
    Analyzing feature reference 3500/4746
    Analyzing feature reference 3600/4746
    Analyzing feature reference 3700/4746
    Analyzing feature reference 3800/4746
    Analyzing feature reference 3900/4746
    Analyzing feature reference 4000/4746
    Analyzing feature reference 4100/4746
    Analyzing feature reference 4200/4746
    Analyzing feature reference 4300/4746
    Analyzing feature reference 4400/4746
    Analyzing feature reference 4500/4746
    Analyzing feature reference 4600/4746
    Analyzing feature reference 4700/4746
    Test Assertion 'tn-as.b.1: TrafficFlowDirection can only be associated with a spatial object of the type Link or LinkSequence.': PASSED - 5916 ms
    Test Assertion 'tn-as.b.2: All transport areas have an external object identifier.': PASSED - 83 ms
    Test Assertion 'tn-as.b.3: All transport links have an external object identifier.': PASSED - 55 ms
    Test Assertion 'tn-as.b.4: All transport link sequences have an external object identifier.': PASSED - 36 ms
    Test Assertion 'tn-as.b.5: All transport link sets have an external object identifier.': PASSED - 50 ms
    Test Assertion 'tn-as.b.6: All transport nodes have an external object identifier.': PASSED - 82 ms
    Test Assertion 'tn-as.b.7: All transport points have an external object identifier.': PASSED - 45 ms
    Test Assertion 'tn-as.b.8: All transport properties have an external object identifier.': PASSED - 165 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 - 35 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 - 94 ms
    Test Case 'Constraints' finished: PASSED
    Test Case 'Geometry' started
    Test Assertion 'tn-as.c.1: No free transport nodes': PASSED - 2307 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 - 17 ms
    Test Case 'Object References' finished: PASSED_MANUAL
    Test Suite 'Conformance class: Application schema, Transport Networks Common' finished: PASSED_MANUAL

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

    Testing 32107 features
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-2025.1.1/data-tn/tn-rs/ets-tn-rs-bsxets.xml
    Statistics table: 1098 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: Reference systems, General requirements

    Testing 32107 features
    Indexing features (parsing errors: 0): 6236 ms
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-2025.1.1/data/reference-systems/ets-reference-systems-bsxets.xml
    Statistics table: 32 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 - 237 ms
    Test Assertion 'rs.a.2: Default spatial reference systems in feature collections': PASSED - 31 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 - 491 ms
    Test Case 'Temporal reference systems' finished: PASSED
    Test Suite 'Conformance class: Reference systems, General requirements' finished: PASSED

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

    Testing 32107 features
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-2025.1.1/data-tn/tn-w-as/ets-tn-w-as-bsxets.xml
    Statistics table: 34 ms
    Test Suite 'Conformance class: Application schema, Water Transport Networks' started
    Test Case 'Code list values' started
    Test Assertion 'tn-w-as.a.1: FerryUseValue attributes': PASSED - 83 ms
    Test Assertion 'tn-w-as.a.2: FormOfWaterwayNodeValue attributes': PASSED - 90 ms
    Test Case 'Code list values' finished: PASSED
    Test Case 'Constraints' started
    Test Assertion 'tn-w-as.b.1: CEMTClass can only be associated with a spatial object that is part of a water transport network.': PASSED - 18 ms
    Test Assertion 'tn-w-as.b.2: ConditionOfWaterFacility can only be associated with a spatial object that is part of a water transport network.': PASSED - 19 ms
    Test Assertion 'tn-w-as.b.3: FerryUse can only be associated with a spatial object that is part of a water transport network.': PASSED - 18 ms
    Test Assertion 'tn-w-as.b.4: RestrictionForWaterVehicles can only be associated with a spatial object that is part of a water transport network.': PASSED - 18 ms
    Analyzing up to 4746 feature references - this may take awhile...
    Analyzing feature reference 100/4746
    Analyzing feature reference 200/4746
    Analyzing feature reference 300/4746
    Analyzing feature reference 400/4746
    Analyzing feature reference 500/4746
    Analyzing feature reference 600/4746
    Analyzing feature reference 700/4746
    Analyzing feature reference 800/4746
    Analyzing feature reference 900/4746
    Analyzing feature reference 1000/4746
    Analyzing feature reference 1100/4746
    Analyzing feature reference 1200/4746
    Analyzing feature reference 1300/4746
    Analyzing feature reference 1400/4746
    Analyzing feature reference 1500/4746
    Analyzing feature reference 1600/4746
    Analyzing feature reference 1700/4746
    Analyzing feature reference 1800/4746
    Analyzing feature reference 1900/4746
    Analyzing feature reference 2000/4746
    Analyzing feature reference 2100/4746
    Analyzing feature reference 2200/4746
    Analyzing feature reference 2300/4746
    Analyzing feature reference 2400/4746
    Analyzing feature reference 2500/4746
    Analyzing feature reference 2600/4746
    Analyzing feature reference 2700/4746
    Analyzing feature reference 2800/4746
    Analyzing feature reference 2900/4746
    Analyzing feature reference 3000/4746
    Analyzing feature reference 3100/4746
    Analyzing feature reference 3200/4746
    Analyzing feature reference 3300/4746
    Analyzing feature reference 3400/4746
    Analyzing feature reference 3500/4746
    Analyzing feature reference 3600/4746
    Analyzing feature reference 3700/4746
    Analyzing feature reference 3800/4746
    Analyzing feature reference 3900/4746
    Analyzing feature reference 4000/4746
    Analyzing feature reference 4100/4746
    Analyzing feature reference 4200/4746
    Analyzing feature reference 4300/4746
    Analyzing feature reference 4400/4746
    Analyzing feature reference 4500/4746
    Analyzing feature reference 4600/4746
    Analyzing feature reference 4700/4746
    Test Assertion 'tn-w-as.b.5: WaterTrafficFlowDirection can only be associated with a spatial object that is part of a water transport network.': PASSED - 4245 ms
    Test Case 'Constraints' finished: PASSED
    Test Case 'Object references' started
    Test Assertion 'tn-w-as.c.1: Hydrography theme references': PASSED_MANUAL
    Test Case 'Object references' finished: PASSED_MANUAL
    Test Suite 'Conformance class: Application schema, Water Transport Networks' finished: PASSED_MANUAL

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

    Testing 32107 features
    Indexing features (parsing errors: 0): 5718 ms
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-2025.1.1/data-tn/tn-gml/ets-tn-gml-bsxets.xml
    Statistics table: 34 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 - 3775 ms
    Test Case 'Basic test' finished: PASSED
    Test Case 'Validation against INSPIRE official schema' started
    Validating tn_waterways.gml
    Duration: 4534 ms. Errors: 0.
    Test Assertion 'tn-gml.b.1: validate XML documents against official schema': PASSED - 4549 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: Data consistency, General requirements

    Testing 32107 features
    Indexing features (parsing errors: 0): 6470 ms
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-2025.1.1/data/data-consistency/ets-data-consistency-bsxets.xml
    Statistics table: 35 ms
    Test Suite 'Conformance class: Data consistency, General requirements' started
    Test Case 'Version consistency' started
    Test Assertion 'dc.a.1: Version lifespan plausible': PASSED - 100 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 - 98 ms
    Test Case 'Temporal consistency' finished: PASSED
    Test Suite 'Conformance class: Data consistency, General requirements' finished: PASSED_MANUAL

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

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

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

    Testing 32107 features
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-2025.1.1/data-encoding/inspire-gml/ets-inspire-gml-bsxets.xml
    Statistics table: 677 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: Information accessibility, General requirements

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

### Log path: Conformance class: Data consistency, Transport Networks

    Testing 32107 features
    Indexing features (parsing errors: 0): 6390 ms
    Executing Test Suite: /etf/projects/inspire-ets-repository/ets-repository-2025.1.1/data-tn/tn-dc/ets-tn-dc-bsxets.xml
    Statistics table: 32 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 - 22 ms
    Test Assertion 'tn-dc.a.2: Each Transport Network Link or Node geometry is within a Network Area geometry (Railway Transport Networks)': PASSED - 30 ms
    Test Assertion 'tn-dc.a.3: Each Transport Network Link or Node geometry is within a Network Area geometry (Waterway Transport Networks)': PASSED - 48 ms
    Test Assertion 'tn-dc.a.4: Each Transport Network Link or Node geometry is within a Network Area geometry (Air Transport Networks)': PASSED - 55 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

## 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.507 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.507 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.264 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.243 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: 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 | 9 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.167 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.078 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.089 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 | 6 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 | 5 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.083 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.055 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.036 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.050 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.082 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.045 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.165 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.035 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.094 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 | 2.307 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 | 2.307 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.017 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.017 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: 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: 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.759 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.268 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.237 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.031 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.491 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.491 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: Application schema, Water 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, Water 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 | 4 s
Test suite ID | EIDeb35a20f-188d-4fd3-aee1-dd07eb3c3efa
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
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.173 s
Test case ID | EIDb6f94a1e-f7fb-4f09-b48e-63003c8d9fdf

##### tn-w-as.a.1: FerryUseValue 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/FerryUseValue.
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.083 s
Assertion ID | EIDfc18326f-922d-4ff1-8056-1877f76d24cc
Assertion URI | Link

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

##### tn-w-as.a.2: FormOfWaterwayNodeValue 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/FormOfWaterwayNodeValue.
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.090 s
Assertion ID | EID17a46147-9005-46d1-b3ea-3e5bac3f3be8
Assertion URI | Link

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

### Constraints
5
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 | 4 s
Test case ID | EID99cd35b9-336c-401f-8bf4-64a45a958371

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

CEMTClass can only be associated with a spatial object that is part of a water transport network.
OCL: "inv: networkRef.element.oclIsKindOf(InlandWaterway)".
Verify that a CEMTClass only has a Network element association with a spatial object InlandWaterway.
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.018 s
Assertion ID | EID681c1030-eda0-47fb-8203-dc860673a21c
Assertion URI | Link

Expression:let $target := ('InlandWaterway') let $hrefs := $features[self::*:CEMTClass]/*:networkRef/*/*:element/@xlink:href let $messages := local:check-feature-references($hrefs, $target, $target, 'networkRef.element', 1) return (if ($messages) then 'FAILED' else 'PASSED', $messages)

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

ConditionOfWaterFacility can only be associated with a spatial object that is part of a water transport network.
OCL: OCL: "inv: networkRef.element.oclIsKindOf(PortArea) or networkRef.element.oclIsKindOf(PortNode)".
Verify that a ConditionOfWaterFacility only has a Network element association with a spatial object PortArea or PortNode.
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.019 s
Assertion ID | EID120fa4ed-e5f9-4e1d-a028-e04d0170ca08
Assertion URI | Link

Expression:let $target := ('PortArea', 'PortNode') let $hrefs := $features[self::*:ConditionOfWaterFacility]/*:networkRef/*/*:element/@xlink:href let $messages := local:check-feature-references($hrefs, $target, 'PortArea or PortNode', 'networkRef.element', 1) return (if ($messages) then 'FAILED' else 'PASSED', $messages)

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

FerryUse can only be associated with a spatial object that is part of a water transport network.
OCL: "inv: networkRef.element.oclIsKindOf(FerryCrossing)".
Verify that a FerryUse only has a Network element association with a spatial object FerryCrossing.
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.018 s
Assertion ID | EIDdf285b92-adee-4d78-940b-14dd3f7c1172
Assertion URI | Link

Expression:let $target := ('FerryCrossing') let $hrefs := $features[self::*:FerryUse]/*:networkRef/*/*:element/@xlink:href let $messages := local:check-feature-references($hrefs, $target, $target, 'networkRef.element', 1) return (if ($messages) then 'FAILED' else 'PASSED', $messages)

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

RestrictionForWaterVehicles can only be associated with a spatial object that is part of a water transport network.
OCL: "inv: networkRef.element.oclIsKindOf(WaterwayLink) or networkRef.element.oclIsKindOf(WaterwayNode)".
Verify that a RestrictionForWaterVehicles only has a Network element association with a spatial object WaterwayLink or WaterwayNode.
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.018 s
Assertion ID | EID7acc9e25-9f5d-4754-b35d-3ae50af84da8
Assertion URI | Link

Expression:let $target := ('WaterwayLink', 'WaterwayNode') let $hrefs := $features[self::*:RestrictionForWaterVehicles]/*:networkRef/*/*:element/@xlink:href let $messages := local:check-feature-references($hrefs, $target, 'WaterwayLink or WaterwayNode', 'networkRef.element', 1) return (if ($messages) then 'FAILED' else 'PASSED', $messages)

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

WaterTrafficFlowDirection can only be associated with a spatial object that is part of a water transport network.
OCL: "inv: networkRef.element.oclIsKindOf(WaterLinkSequence) or networkRef.element.oclIsKindOf(WaterwayLink)".
Verify that a WaterTrafficFlowDirection only has a Network element association with a spatial object WaterLinkSequence or WaterwayLink.
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 | 4 s
Assertion ID | EID42aa49a4-82e5-49f5-881d-8771a43378ec
Assertion URI | Link

Expression:let $target := ('WaterLinkSequence', 'WaterwayLink') let $hrefs := $features[self::*:WaterTrafficFlowDirection]/*:networkRef/*/*:element/@xlink:href let $messages := local:check-feature-references($hrefs, $target, 'WaterLinkSequence or WaterwayLink', 'networkRef.element', 1) return (if ($messages) then 'FAILED' else 'PASSED', $messages)

### Object references
1
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 | EID96f4a580-cc18-4295-96b3-5583fb4a1605

##### tn-w-as.c.1: Hydrography theme references click to expand contents

Check that the Water transport networks re-uses, where it exists and is practicable, the water network centreline geometry of the Hydrography theme. Therefore, object referencing shall be used to link the water transport course with the existing water network geometry in the Hydrography theme.
Relevant requirements:

- IR Requirement Annex II Section 7.9.4: Theme-specific Requirements – Modelling of object references. The Water transport networks shall re-use, where it exists and is practicable, the water network centreline geometry of the Hydrography theme. Therefore, object referencing shall be used to link the water transport course with the existing water network geometry in the Hydrography theme.

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 | EID68c7c0b6-0df8-411a-b485-e1b394cd8d13
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 | 8 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 | 3 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 | 3 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 | 4 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 | 4 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: 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.198 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.100 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.100 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.098 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.098 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: INSPIRE GML application schemas, General requirements
6

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

- Conformance Class 'INSPIRE GML encoding'

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

### Schema
2
click to expand contents

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

### GML model
3
click to expand contents

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

### Simple features
11
click to expand contents

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

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

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

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

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

Note:

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

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

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

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

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

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

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

Note:

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

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

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

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

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

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

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

Note:

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

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

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

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

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

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

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

Note:

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

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

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

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

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

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

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

Note:

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

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

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

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

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

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

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

Note:

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

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

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

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

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

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

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

Note:

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

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

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

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

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

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

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

Note:

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

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

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

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

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

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

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

Note:

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

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

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

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

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

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

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

Note:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

### Constraints
1
click to expand contents

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

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

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

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

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

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

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

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

## Conformance class: 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: 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.577 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.577 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.577 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: 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.155 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.155 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.022 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.030 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.048 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.055 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

# Report generated by ETF

Level of detail