CLD federated organisation-role validation
Collection of federated SHACL-SPARQL constraints for CLD. Constraints are linked from era-sh:CertificationLevelDocumentShape in ED-CLD.ttl.
Organisation using the CLD as Applicant MUST be an era:OrganisationRole, resolved locally or in OCR-KG.
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX era: <http://data.europa.eu/949/> SELECT $this ?orgRole WHERE { $this dcterms:audience ?orgRole . FILTER NOT EXISTS { SERVICE <repository:OCR-KG> { ?orgRole a era:OrganisationRole . } } }
Exactly one era:Body MUST be linked via era:roleOf for dcterms:audience, resolved locally or in OCR-KG.
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX era: <http://data.europa.eu/949/> SELECT $this ?orgRole ?bodyCount WHERE { $this dcterms:audience ?orgRole . OPTIONAL { SELECT ?orgRole (COUNT(DISTINCT ?body) AS ?bodyCount) WHERE { SERVICE <repository:OCR-KG> { ?orgRole era:roleOf ?body . ?body a era:Body . } } GROUP BY ?orgRole } FILTER(COALESCE(?bodyCount, 0) != 1) }
For dcterms:audience, exactly one allowed organisation role (Applicant or Manufacturer) MUST be linked via era:hasOrganisationRole, resolved locally or in OCR-KG.
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX era: <http://data.europa.eu/949/> PREFIX era-organisation-roles: <http://data.europa.eu/949/concepts/organisation-roles/> SELECT $this ?orgRole ?roleCount WHERE { $this dcterms:audience ?orgRole . OPTIONAL { SELECT ?orgRole (COUNT(DISTINCT ?role) AS ?roleCount) WHERE { SERVICE <repository:OCR-KG> { ?orgRole era:hasOrganisationRole ?role . FILTER(?role IN (era-organisation-roles:Applicant, era-organisation-roles:Manufacturer)) } } GROUP BY ?orgRole } FILTER(COALESCE(?roleCount, 0) != 1) }
Each dcterms:contributor SHOULD be an era:OrganisationRole, resolved locally or in OCR-KG.
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX era: <http://data.europa.eu/949/> SELECT $this ?orgRole WHERE { $this dcterms:contributor ?orgRole . FILTER isIRI(?orgRole) FILTER NOT EXISTS { SERVICE <repository:OCR-KG> { ?orgRole a era:OrganisationRole . } } }
For each IRI dcterms:contributor, at least one era:roleOf to an era:Body SHOULD exist, resolved locally or in OCR-KG.
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX era: <http://data.europa.eu/949/> SELECT $this ?orgRole WHERE { $this dcterms:contributor ?orgRole . FILTER isIRI(?orgRole) FILTER NOT EXISTS { SERVICE <repository:OCR-KG> { ?orgRole era:roleOf ?body . ?body a era:Body . } } }
For each IRI dcterms:contributor, at least one allowed organisation role (Manufacturer or AssessmentBody) SHOULD be linked via era:hasOrganisationRole, resolved locally or in OCR-KG.
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX era: <http://data.europa.eu/949/> PREFIX era-organisation-roles: <http://data.europa.eu/949/concepts/organisation-roles/> SELECT $this ?orgRole WHERE { $this dcterms:contributor ?orgRole . FILTER isIRI(?orgRole) FILTER NOT EXISTS { SERVICE <repository:OCR-KG> { ?orgRole era:hasOrganisationRole ?role . FILTER(?role IN (era-organisation-roles:Manufacturer, era-organisation-roles:AssessmentBody)) } } }
dcterms:creator MUST be an era:OrganisationRole, resolved locally or in OCR-KG.
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX era: <http://data.europa.eu/949/> SELECT $this ?orgRole WHERE { $this dcterms:creator ?orgRole . FILTER NOT EXISTS { SERVICE <repository:OCR-KG> { ?orgRole a era:OrganisationRole . } } }
Exactly one era:Body MUST be linked via era:roleOf for dcterms:creator, resolved locally or in OCR-KG.
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX era: <http://data.europa.eu/949/> SELECT $this ?orgRole ?bodyCount WHERE { $this dcterms:creator ?orgRole . OPTIONAL { SELECT ?orgRole (COUNT(DISTINCT ?body) AS ?bodyCount) WHERE { SERVICE <repository:OCR-KG> { ?orgRole era:roleOf ?body . ?body a era:Body . } } GROUP BY ?orgRole } FILTER(COALESCE(?bodyCount, 0) != 1) }
For dcterms:creator, exactly one allowed organisation role (CAB, AssessmentBody or NoBo) MUST be linked via era:hasOrganisationRole, resolved locally or in OCR-KG.
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX era: <http://data.europa.eu/949/> PREFIX era-organisation-roles: <http://data.europa.eu/949/concepts/organisation-roles/> SELECT $this ?orgRole ?roleCount WHERE { $this dcterms:creator ?orgRole . OPTIONAL { SELECT ?orgRole (COUNT(DISTINCT ?role) AS ?roleCount) WHERE { SERVICE <repository:OCR-KG> { ?orgRole era:hasOrganisationRole ?role . FILTER(?role IN (era-organisation-roles:CAB, era-organisation-roles:AssessmentBody, era-organisation-roles:NoBo)) } } GROUP BY ?orgRole } FILTER(COALESCE(?roleCount, 0) != 1) }
dcterms:source must not be an era:TSI or era:IC (classification resolved in era-lex).
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX era: <http://data.europa.eu/949/> SELECT $this ?covered WHERE { $this dcterms:source ?covered . FILTER EXISTS { SERVICE <repository:era-lex> { ?covered a ?forbiddenType . FILTER(?forbiddenType IN (era:TSI, era:IC)) } } }
There must be at most one era:IC as dcterms:subject (type resolved in era-lex).
PREFIX era: <http://data.europa.eu/949/> PREFIX dcterms: <http://purl.org/dc/terms/> SELECT $this WHERE { $this dcterms:subject ?ic . SERVICE <repository:era-lex> { ?ic a era:IC . } } GROUP BY $this HAVING (COUNT(DISTINCT ?ic) > 1)
Each dcterms:subject MUST be typed as era:IC or era:TSI (type resolved in era-lex).
PREFIX era: <http://data.europa.eu/949/> PREFIX dcterms: <http://purl.org/dc/terms/> SELECT $this ?subject WHERE { $this dcterms:subject ?subject . FILTER NOT EXISTS { SERVICE <repository:era-lex> { ?subject a ?subjectType . FILTER(?subjectType IN (era:IC, era:TSI)) } } }
When no era:IC is linked as dcterms:subject, at least one era:TSI MUST be linked (types resolved in era-lex).
PREFIX era: <http://data.europa.eu/949/> PREFIX dcterms: <http://purl.org/dc/terms/> SELECT $this WHERE { FILTER NOT EXISTS { $this dcterms:subject ?ic . SERVICE <repository:era-lex> { ?ic a era:IC . } } FILTER NOT EXISTS { $this dcterms:subject ?tsi . SERVICE <repository:era-lex> { ?tsi a era:TSI . } } }
dcterms:subject MUST NOT be <http://data.europa.eu/eli/dec/2010/713/oj> (Module Decision).
PREFIX dcterms: <http://purl.org/dc/terms/> SELECT $this ?subject WHERE { $this dcterms:subject ?subject . FILTER(?subject = <http://data.europa.eu/eli/dec/2010/713/oj>) }
Both `dcterms:subject` and `vpa:checkedCompliance/vpa:checkedRequirement` are used to express compliance to TSI/IC. Prefer only one method.
PREFIX era: <http://data.europa.eu/949/> PREFIX vpa: <https://w3id.org/vpa#> PREFIX dcterms: <http://purl.org/dc/terms/> SELECT $this ?subj ?req ?check WHERE { $this dcterms:subject ?subj ; vpa:checkedCompliance ?check . ?check vpa:checkedRequirement ?req . FILTER EXISTS { SERVICE <repository:era-lex> { ?req a ?type2 . FILTER(?type2 IN (era:TSI, era:IC)) } } }
Certification Level Documents (CLD) Entry
Certification Level Documents (CLD) issued by NoBos are: • EC Certificates • QMS-Approvals and whether these are Intermediate Statements of Verification (ISVs). The EU legislative documents 768/2008/EC, (EU) 2016/797, (EU) 2019/250 and 2010/713/EU establish a number of requirements on the content of CLDs.
CLD identifier
The CLD ID, as defined in RFU-STR-001.
The CLD ID, as defined in RFU-STR-001, MUST be present.
CLD Version Number
The Version Counter of the CLD, as defined in RFU-STR-001.
The Version Counter of the CLD, as defined in RFU-STR-001, MUST be present.
CLD entry created in KG
Date the CLD was created in ERADIS+.
Date the CLD was created in ERADIS+ MUST be present.
CLD Issue date
Date the CLD was issued by the CAB.
Date the CLD was issued by the CAB, MUST be present.
Date when this CLD became available in the ERADIS public database.
ERADIS availability date SHOULD be present as xsd:date.
Which CLD this CLD replaces
The previous CLD replaced by this one, if any.
(Check) This CLD replaces no other CLD.
CLD type
SKOS Concept indicating what type of CLD is represented.
Type of CLD MUST be present.
No `era:Document` (representing ERA Technical Document 000MRA1044) is present in `dcterms:conformsTo`.
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX era: <http://data.europa.eu/949/> SELECT $this WHERE { FILTER NOT EXISTS { $this dcterms:conformsTo ?doc . ?doc a era:Document . } }
CLD Module (SKOS Concept).
Module MUST be included as exactly ONE SKOS Concept (module).
PREFIX era: <http://data.europa.eu/949/> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> PREFIX dcterms: <http://purl.org/dc/terms/> SELECT $this WHERE { $this dcterms:conformsTo ?doc . ?doc a skos:Concept . } GROUP BY $this HAVING (COUNT(?doc) != 1)
The `era:Document` in `dcterms:conformsTo` MUST not have a version 1.1 or 2017 as it was issued on {?issued}, which is after Decision ERA-ED-DEC 2110-2022 of 13/12/2022.
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX era: <http://data.europa.eu/949/> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> SELECT $this ?doc ?comment ?issued WHERE { $this dcterms:conformsTo ?doc ; dcterms:issued ?issued . ?doc a era:Document ; rdfs:comment ?comment . FILTER( (CONTAINS(LCASE(STR(?comment)), "1.1") || CONTAINS(LCASE(STR(?comment)), "2017")) && (?issued > "2022-12-13"^^xsd:date) ) }
No SKOS Concept (for the module) is present in dcterms:conformsTo.
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> SELECT $this WHERE { FILTER NOT EXISTS { $this dcterms:conformsTo ?mod . ?mod a skos:Concept . } }
CLD Subject of Assessment
Object(s) of assessment, validated with federated checks from era-lex: not the Module Decision URI, at most one era:IC, and valid era:IC/era:TSI typing.
dcterms:subject MUST follow CLD rules: no Module Decision URI, at most one era:IC, and valid era:IC/era:TSI typing (with at least one era:TSI when no era:IC is present).
CLD Compliances Checked
Any compliance or audit checks (CABAssessmentCheck or CABAuditCheck) performed for this CLD.
CLD contains no compliance or audit checks (CABAssessmentCheck or CABAuditCheck).
CLD description
Human-readable description of the CLD.
Human-readable Object of Assessment of the CLD MUST be present.
CLD link to ERADIS URL
The ERADIS or other URL of the CLD, if available.
(Check) No ERADIS or other URL of the CLD available?
Organisation receiving the CLD
The organisation using the CLD as Applicant. Cardinality and node kind are validated locally; role semantics are validated in the federated CLD shapes.
Organisation receiving the CLD as Applicant MUST be provided as one IRI in ERADIS-KG.
Involved organisations
Organisations involved in the assessment. Presence and node kind are validated locally; role semantics are validated in the federated CLD shapes.
At least one organisation SHOULD be linked as dcterms:contributor.
The CAB producing the CLD
CAB issuing the CLD. Cardinality and node kind are validated locally; role semantics are validated in the federated CLD shapes.
Exactly one issuing organisation MUST be linked as dcterms:creator.
CLD: Covered Directives
Legal Requirement(s), but not TSI's, covered by the CLD. Must be a `vpa:Requirement`, and NOT an `era:TSI` or `era:IC`.
The property `dcterms:source` MUST be present and link to a `vpa:Requirement` that is not an `era:TSI` nor an `era:IC`.
CLD: spatial validity to a Site
Manufacturing or assessment site(s), if relevant.
No Manufacturing or assessment site(s) mentioned in the CLD.
CLD comment
Free-text comment about the CLD.
No Free-text comment about the CLD is present
Replacing CLD
IRI of the newer CLD that replaces this one, if any.
(Check) This CLD is not linking to a newer CLD.
If `dcterms:isReplacedBy` is present, the replacing CLD MUST have a higher `vpa:versionNumber` than this CLD.
PREFIX vpa: <https://w3id.org/vpa#> PREFIX dcterms: <http://purl.org/dc/terms/> SELECT $this ?replacer ?thisVersion ?replacerVersion WHERE { OPTIONAL { $this vpa:versionNumber ?thisVersion . } OPTIONAL { $this dcterms:isReplacedBy ?replacer . ?replacer vpa:versionNumber ?replacerVersion . } FILTER(bound(?replacer) && bound(?thisVersion) && bound(?replacerVersion) && (?replacerVersion <= ?thisVersion)) }
If `dcterms:isReplacedBy` is present, the replacing CLD MUST have a later `dcterms:issued` date than this CLD.
PREFIX dcterms: <http://purl.org/dc/terms/> SELECT $this ?replacer ?thisIssued ?replacerIssued WHERE { OPTIONAL { $this dcterms:issued ?thisIssued . } OPTIONAL { $this dcterms:isReplacedBy ?replacer . ?replacer dcterms:issued ?replacerIssued . } FILTER(bound(?replacer) && bound(?thisIssued) && bound(?replacerIssued) && (?replacerIssued <= ?thisIssued)) }
CLD Assessment Result
Assessment result (free text, required).
Assessment result is required.
CLD Validity Statement
Validity statement (free text, required).
Validity statement is required.
CLD Sequence Statement
Sequence statement (free text, optional).
Sequence statement is not present.
CAB Assessment/Audit Check
Validates conformity assessment or audit checks performed by Conformity Assessment Bodies (CABs) within CLD documentation.
Sections checked
Section of the legal text checked in this check.
The CAB's Check does not refer to a section of legal text.
Compliance Check Result
Whether the section is compliant (true/false) using vpa:isCompliant.
IRI to a skos:Concept indicating compliance (Y/N/P) using era:isCompliant.
The CAB's Check has not expressed compliance using either `vpa:isCompliant` or `era:isCompliant`.
Optional Compliance Check
Indicates whether the CAB check concerns an optional function or optional requirement.
The CAB's Check optional flag must be expressed as a boolean value.
The Legal source of the check
Legal requirement(s) checked in this check.
The CAB's Check has not cited the Legal reference used (TSI, or other LegalWork).
Restriction formulated during Check
Restriction, addition, or condition (CLOU) attached to this check.
The CAB's Check has not expressed any Restriction.
Check comment
Free-text comment about the check.
The CAB's Check was not commented.
see Also
Reference to supporting documents or reports.
The CAB's Check has not refered to a further documented reference URL.
TSI Conformity Shape
Validates TSI conformity declarations for vehicle types, ensuring proper documentation of compliance checks and restrictions.
TSI Check restriction related to TSI
The TSI for which conformity was checked in this VehicleType. Selection from a predefined list of vehicle related TSIs (both in force and those that were previously in force) (multiple selection possible)
The TSI conformity did not express what TSI was the source.
Vehicle Type Certificate: Conformity with TSI - compliance check
This shape validates that a vehicle type includes proper compliance checks (section 2.2 or 2.3 of the certificate) ensuring conformity with applicable TSIs.
checked
The certificate, to be mentioned under 2.2 of the VehicleType, which examined Sections and Specific Cases, and their conclusion.
The certificate, to be mentioned under 2.2 of the VehicleType, which examined Sections and Specific Cases, and their conclusion. EC certificate of verification : Reference of 'EC type examination certificates' (if module SB applied) and/or 'EC design examination certificates' (if module SH1 applied)
TSI Compliance Check Result
Y: Compliant, N: Non-compliant, P: Partially compliant.
The type's TSI Compliance Check has not expressed compliance using `era:isCompliant`.
TSI Compliance Check (Section checked)
Applicable specific cases (specific cases conformity with which has been assessed).
The type's TSI Compliance Check does not contain `Applicable specific cases`.
Sections of TSI not complied with.
The type's TSI Compliance Check does not contain `Sections of TSI not complied with`.
Compliance Check TSI valid for Configuration
Links the compliance check to the specific vehicle configuration it applies to.
The type's TSI Compliance Check does not contain a link to the Configuration it is applicable for.
CLD Validity Shape
Validates that CLD has a validity property with a valid time interval using either start/end dates or start/duration.
The validity interval for the CLD (should have a valid beginning and end date).
The validity interval for the CLD (should have a valid beginning and duration in years).
CLD must have a validity property with a valid time interval.
Assessment/audit result annex
Annex of the assessment/audit result.
resultAnnex: The value must be a string.
Assessment/audit result report/file
Report about the assessment/audit result, such as a NoBo File or NoBo Conformity Assessment Report, with identifier, revision and date.
resultReport: The value must be a string.
SELECT ?this WHERE { ?this a <http://data.europa.eu/949/ECDeclaration> ; <http://purl.org/dc/terms/type> <http://data.europa.eu/949/concepts/ecd-types/ECDoC2T> . }
Declaration of Conformity to an Authorised Vehicle Type
Validates Declaration of Conformity to an Authorised Vehicle Type according to EU Regulation 2016/797 and Decision 2018/545.
These declarations are not published in ERADIS, but exist in the context of `era:VehicleAuthorisationApplication`
Type of Declaration: must be ECDoC2T (Declaration of Conformity to Type).
Declaration type MUST be ECDoC2T (Declaration of Conformity to an Authorised Vehicle Type).
Declaration identifier SHOULD be present.
Sequential version number of this Declaration (starts at 1, increments with each revision).
Version number MUST be a positive integer starting from 1.
Date when this Declaration resource was created in the knowledge graph.
Knowledge graph creation date MUST be present as xsd:date.
Official date when the applicant issued this Declaration document.
Document issue date MUST be present as xsd:date.
Date when this Declaration became available in the public database.
Availability date SHOULD be present as xsd:date.
The applicant issuing this Declaration (must be an era:OrganisationRole with role 'Applicant').
Declaration MUST have exactly one applicant as creator (era:OrganisationRole with role Applicant).
The legal entity (era:Body) acting as applicant.
The OrganisationRole MUST link to exactly one era:Body representing the applicant.
Must be the 'Applicant' role from the ERA controlled vocabulary.
The creator OrganisationRole MUST have the role 'Applicant'.
Organizations contributing to the Declaration (e.g., Notified Bodies, assessment bodies).
Contributing organizations SHOULD be specified as era:OrganisationRole instances.
The legal entity (era:Body) acting as contributor.
The contributor OrganisationRole MUST link to exactly one era:Body.
Role from ERA controlled vocabulary (e.g., NoBo, DeBo, AssessmentBody).
The contributor MUST have a valid role (NoBo, DeBo, AssessmentBody, or CAB).
Vehicle Type(s) covered by this Declaration
The Vehicle Type(s) as declared in scope of this Declaration
Declaration MUST reference at least one registered vehicle Type.
Subject of Declaration (Vehicles or VehiclesSet)
The specific (set of) vehicles which is the subject of the DC2T.
Declaration MUST declare conformity to at least one vehicle per covered vehicle type.
SHACL-rule fails to protect against missing vehicles for a certain type.
Brief title describing the subject of the declaration (e.g., project name of C2T).
Declaration MUST have a human-readable title (rdfs:label).
Free-text comment providing additional information about the declaration.
Declaration SHOULD include a comment for additional context.
Link to the Declaration document in a public database.
Declaration MAY include an URL
Reference to the previous version of this Declaration, if this is a revised version.
If present, dcterms:replaces MUST reference another era:ECDeclaration.
Current lifecycle status of the declaration (e.g., valid, revoked, superseded).
Declaration SHOULD have a status indicating its current validity (valid/revoked/superseded).
If dcterms:replaces is present, this Declaration MUST have a higher vpa:versionNumber than the replaced declaration.
PREFIX vpa: <https://w3id.org/vpa#> PREFIX dcterms: <http://purl.org/dc/terms/> SELECT $this ?replaced ?thisVersion ?replacedVersion WHERE { $this dcterms:replaces ?replaced ; vpa:versionNumber ?thisVersion . ?replaced vpa:versionNumber ?replacedVersion . FILTER(?thisVersion <= ?replacedVersion) }
If dcterms:replaces is present, this Declaration MUST have a later dcterms:issued date than the replaced declaration.
PREFIX dcterms: <http://purl.org/dc/terms/> SELECT $this ?replaced ?thisIssued ?replacedIssued WHERE { $this dcterms:replaces ?replaced ; dcterms:issued ?thisIssued . ?replaced dcterms:issued ?replacedIssued . FILTER(?thisIssued <= ?replacedIssued) }
SELECT ?this WHERE { ?this a <http://data.europa.eu/949/ECDeclaration> ; <http://purl.org/dc/terms/type> ?type . FILTER(?type IN ( <http://data.europa.eu/949/concepts/ecd-types/ECDoC>, <http://data.europa.eu/949/concepts/ecd-types/ECDoSU> )) }
Validates EC Declarations of Conformity and Suitability for Use according to EU Regulation 2016/797.
Unique identifier for the EC Declaration in format: CC/NNNNNNNNNNNNNN/YYYY/NNNNNN where CC=country code, N=alphanumeric, YYYY=year.
EC Declaration identifier MUST follow the pattern CC/NNNNNNNNNNNNNN/YYYY/NNNNNN (e.g., AT/000000FN93653a/2021/001714).
Type of EC Declaration: ECDoC (Conformity) or ECDoSU (Suitability for Use).
EC Declaration type MUST be either ECDoC (Declaration of Conformity) or ECDoSU (Declaration of Suitability for Use).
Sequential version number of this EC Declaration (starts at 1, increments with each revision).
Date when this EC Declaration resource was created in the ERADIS+ knowledge graph.
Official date when the manufacturer issued this EC Declaration document.
Date when this EC Declaration became available in the ERADIS public database.
The manufacturer issuing this EC Declaration (must be an era:OrganisationRole with role 'Manufacturer').
EC Declaration MUST have exactly one manufacturer as creator (era:OrganisationRole with role Manufacturer).
The legal entity (era:Body) acting as manufacturer.
The OrganisationRole MUST link to exactly one era:Body representing the manufacturer.
Must be the 'Manufacturer' role from the ERA controlled vocabulary.
The creator OrganisationRole MUST have the role 'Manufacturer'.
Organizations contributing to the EC Declaration (e.g., Notified Bodies, assessment bodies).
EU Directives, Regulations, or Decisions covered by this declaration (references to ERALEX).
EC Declaration MUST reference at least one applicable EU legal instrument (Directive/Regulation/Decision).
The specific Interoperability Constituent (IC), TSI section, or requirement that this declaration addresses.
EC Declaration MUST declare conformity to at least one IC, TSI, or specific requirement.
Brief title describing the subject of the declaration (e.g., product name or component type).
EC Declaration MUST have a human-readable title (rdfs:label).
EC Declaration SHOULD include a comment for additional context.
Link to the EC Declaration document in the ERADIS public database.
EC Declaration SHOULD include an ERADIS URL following the pattern: https://eradis.era.europa.eu/interop_docs/ecDecl/view.aspx?id=NNNNN
Evidence from Conformity Assessment Bodies (CABs) supporting this EC Declaration. Each evidence set references test reports and certificates via CLD identifiers.
EC Declaration MUST be supported by at least one set of CAB evidence (test reports, certificates).
A collection of supporting documents (test reports, certificates) from a Conformity Assessment Body.
Individual CLD references (Certification Level Document entries) for test reports and certificates.
CAB Evidence MUST contain at least one CLD reference (test report or certificate).
A reference to a test report or certificate in the Certification Level Document.
CLD reference MUST be either a direct IRI to an existing CLD resource OR a blank node with a valid CLD identifier.
CLD identifier in format: NNNN/N/CCN/YYYY/AAA/LL/NNNN[/VNN] where NNNN=NoBo number, N=type, CC=country, YYYY=year, AAA=abbreviation, LL=language, NNNN=sequential, VNN=version.
CLD identifier MUST follow the pattern NNNN/N/CCN/YYYY/AAA/LL/NNNN[/VNN] (e.g., 1714/2/CH1/2020/RST/EN/3474 or 1714/4/CH1/2020/RST/EN/3451/V15).
Reference to the previous version of this EC Declaration, if this is a revised version.
EC Declaration SHOULD have a status indicating its current validity (valid/revoked/superseded).
If dcterms:replaces is present, this EC Declaration MUST have a higher vpa:versionNumber than the replaced declaration.
If dcterms:replaces is present, this EC Declaration MUST have a later dcterms:issued date than the replaced declaration.
All CLD references within a single CABEvidence set SHOULD originate from the same Notified Body (same NoBo number prefix).
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX era: <http://data.europa.eu/949/> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT $this ?evidence ?member1 ?id1 ?member2 ?id2 WHERE { $this dcterms:requires ?evidence . ?evidence a era:CABEvidence ; rdfs:member ?member1 , ?member2 . ?member1 dcterms:identifier ?id1 . ?member2 dcterms:identifier ?id2 . # Extract NoBo number (first 4 digits before first slash) BIND(SUBSTR(?id1, 1, 4) AS ?nobo1) BIND(SUBSTR(?id2, 1, 4) AS ?nobo2) FILTER(?member1 != ?member2 && ?nobo1 != ?nobo2) }
Evidence Document / Permission as PROV Entity
Validates PROV-O entity properties on a CLD or Certificate (both subclasses of vpa:EvidenceDocument / vpa:Permission). Both are implicitly prov:Entities. This shape checks that provenance links (wasGeneratedBy, wasInvalidatedBy, wasDerivedFrom) are consistent when present.
Generated by Activity
The prov:Activity that generated (created) this entity. Present when it was produced by a versioning activity (EDPSubmit, EDPReplace, EDPRenew).
(Info) No prov:Activity recorded as having generated this entity.
Invalidated by Activity
The prov:Activity that invalidated this entity (revocation, withdrawal, or replacement by a newer version).
(Info) No prov:Activity recorded as having invalidated this entity.
Derived from parent entity
The parent CLD or Certificate from which this one was derived (i.e. replaced). This is the inverse provenance view of dcterms:isReplacedBy.
(Info) This entity does not declare a parent it was derived from.
Attributed to Agent
The prov:Agent (typically an era:Body or era:OrganisationRole) to whom the entity is attributed.
(Info) No prov:Agent is attributed to this entity.
Entity generation time
The point in time at which this entity (as prov:Entity) was generated. Should be consistent with dcterms:issued.
If prov:generatedAtTime is present, it MUST be an xsd:dateTime.
This entity has `prov:wasDerivedFrom` {?parent}, but does not also declare `dcterms:replaces` pointing to the same parent, or vice versa.
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX prov: <http://www.w3.org/ns/prov#> SELECT $this ?parent WHERE { { $this prov:wasDerivedFrom ?parent . FILTER NOT EXISTS { $this dcterms:replaces ?parent } } UNION { $this dcterms:replaces ?parent . FILTER NOT EXISTS { $this prov:wasDerivedFrom ?parent } } }
This entity was invalidated by an Activity, but its era:state is not set to Revoked, Withdrawn, Suspended, or Rejected.
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX prov: <http://www.w3.org/ns/prov#> PREFIX era: <http://data.europa.eu/949/> PREFIX era-states-eratv: <http://data.europa.eu/949/concepts/states/eratv/> SELECT $this ?state WHERE { $this prov:wasInvalidatedBy ?act . OPTIONAL { $this era:state ?state } FILTER( !bound(?state) || ?state NOT IN ( era-states-eratv:revoked, era-states-eratv:withdrawn, era-states-eratv:suspended, era-states-eratv:rejected ) ) }
EDP Change Activity
Validates a prov:Activity representing a lifecycle event on an Evidence Document or Permission (CLD / Certificate). Covers state-reversing activities (Group 0: undo), state-changing activities (Group 1: amend, correct, request revocation, revoke, withdraw, suspend, reject) and versioning activities (Group 2: submit, replace, renew) that mint a new entity.
Activity type
The type of lifecycle activity, from the EDPActivityTypes concept scheme.
The Activity MUST have a dcterms:type pointing to a skos:Concept from era-edp-act:EDPActivityTypes.
Activity effective date
The date/time at which this activity concluded (took effect).
The Activity MUST have a prov:atTime (xsd:dateTime).
Activity start date
The date/time at which this activity started, if different from the end time.
If present, prov:startedAtTime MUST be an xsd:dateTime.
Associated agent
The prov:Agent (person or organisation) who carried out this activity.
The Activity SHOULD declare who performed it via prov:wasAssociatedWith.
Entity acted upon
The EDP or a before-snapshot (prov:Entity with prov:specializationOf) that this activity acted upon. Required for all activity types except EDPSubmit (which has no parent).
(Info) This Activity did not declare a prov:used entity.
Entity or snapshot produced
For Group 2: the new EDP. For Group 0/1: an after-snapshot (prov:Entity with prov:specializationOf) carrying the updated property values.
(Info) This Activity did not generate any entity or snapshot.
Activity state
The state of the activity itself (e.g. submitted, in force).
If present, era:state MUST be a skos:Concept from the States scheme.
Activity justification
Free-text explanation or justification for the activity.
The Activity SHOULD include a justification (rdfs:comment).
Undo target activity
For EDPUndo activities: the prov:Activity whose effect is being reversed. Uses prov:wasInformedBy because the undo activity acts upon the outcome of the previous activity.
(Info) prov:wasInformedBy not present (only required for EDPUndo).
This versioning activity (EDPRequestSubmit/EDPSubmit/EDPReplace/EDPRenew) MUST produce a new entity via prov:generated (unless EDPSubmit is validating an EDPRequestSubmit).
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX prov: <http://www.w3.org/ns/prov#> PREFIX era-edp-act: <http://data.europa.eu/949/concepts/edp-activity-types/> SELECT $this WHERE { $this dcterms:type ?type . FILTER(?type IN (era-edp-act:EDPRequestSubmit, era-edp-act:EDPSubmit, era-edp-act:EDPReplace, era-edp-act:EDPRenew)) FILTER NOT EXISTS { $this prov:generated ?newEntity } # Exception: EDPSubmit following EDPRequestSubmit is a validation # (state change only), not a minting activity. FILTER( ?type != era-edp-act:EDPSubmit || NOT EXISTS { $this prov:wasInformedBy ?reqAct . ?reqAct dcterms:type era-edp-act:EDPRequestSubmit } ) }
This activity ({?type}) generated a full CLD/Certificate {?newEntity} — only standalone versioning activities (EDPRequestSubmit/EDPSubmit/EDPReplace/EDPRenew) should mint new resources.
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX prov: <http://www.w3.org/ns/prov#> PREFIX era-edp-act: <http://data.europa.eu/949/concepts/edp-activity-types/> PREFIX era: <http://data.europa.eu/949/> SELECT $this ?type ?newEntity WHERE { { # Group 0/1 activities must not mint a new full entity $this dcterms:type ?type . FILTER(?type IN ( era-edp-act:EDPUndo, era-edp-act:EDPAmend, era-edp-act:EDPCorrect, era-edp-act:EDPRequestRevoke, era-edp-act:EDPRevoke, era-edp-act:EDPWithdraw, era-edp-act:EDPSuspend, era-edp-act:EDPReject )) } UNION { # EDPSubmit following EDPRequestSubmit is validation — must not mint $this dcterms:type era-edp-act:EDPSubmit . BIND(era-edp-act:EDPSubmit AS ?type) $this prov:wasInformedBy ?reqAct . ?reqAct dcterms:type era-edp-act:EDPRequestSubmit . } $this prov:generated ?newEntity . FILTER( EXISTS { ?newEntity a era:CertificationLevelDocument } || EXISTS { ?newEntity a era:Certificate } ) }
prov:startedAtTime ({?start}) must be before or equal to prov:atTime ({?end}).
PREFIX prov: <http://www.w3.org/ns/prov#> SELECT $this ?start ?end WHERE { $this prov:startedAtTime ?start ; prov:atTime ?end . FILTER(?start > ?end) }
This activity ({?type}) is not an EDPSubmit/EDPRequestSubmit and MUST declare at least one prov:used entity or snapshot.
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX prov: <http://www.w3.org/ns/prov#> PREFIX era-edp-act: <http://data.europa.eu/949/concepts/edp-activity-types/> SELECT $this ?type WHERE { $this dcterms:type ?type . FILTER(?type NOT IN (era-edp-act:EDPSubmit, era-edp-act:EDPRequestSubmit)) FILTER NOT EXISTS { $this prov:used ?entity } }
This EDPUndo activity MUST reference the activity it reverses via prov:wasInformedBy.
PREFIX prov: <http://www.w3.org/ns/prov#> PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX era-edp-act: <http://data.europa.eu/949/concepts/edp-activity-types/> SELECT $this WHERE { $this dcterms:type era-edp-act:EDPUndo . FILTER NOT EXISTS { $this prov:wasInformedBy ?prevAct } }
This EDPUndo targets activity {?prevAct} of type {?prevType}, but that type is not undoable. Only EDPRequestRevoke, EDPRequestSubmit, EDPRevoke, EDPWithdraw, EDPSuspend, EDPReject and EDPUndo can be undone.
PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX prov: <http://www.w3.org/ns/prov#> PREFIX era-edp-act: <http://data.europa.eu/949/concepts/edp-activity-types/> SELECT $this ?prevAct ?prevType WHERE { $this dcterms:type era-edp-act:EDPUndo . $this prov:wasInformedBy ?prevAct . ?prevAct dcterms:type ?prevType . FILTER(?prevType NOT IN ( era-edp-act:EDPRequestRevoke, era-edp-act:EDPRequestSubmit, era-edp-act:EDPRevoke, era-edp-act:EDPWithdraw, era-edp-act:EDPSuspend, era-edp-act:EDPReject, era-edp-act:EDPUndo )) }
Entity Snapshot (before/after)
Validates a lightweight prov:Entity snapshot that records the property values before or after a Group 0/1 (state-changing) activity. The snapshot carries only the delta — the properties that the activity actually changed. It is linked to the main CLD or Certificate via prov:specializationOf. A before-snapshot is prov:used by the activity (and prov:wasInvalidatedBy it). An after-snapshot is prov:generated by the activity.
PREFIX prov: <http://www.w3.org/ns/prov#> SELECT ?this WHERE { ?this prov:specializationOf ?main . }
Specialization of main entity
The main CLD or Certificate that this snapshot describes at a specific point in time.
A snapshot MUST declare prov:specializationOf exactly one CLD or Certificate.
Snapshot valid from
The point in time at which this snapshot became the active state of the entity.
A snapshot SHOULD have a prov:generatedAtTime.
Snapshot valid until
The point in time at which this snapshot was superseded (by the activity).
A before-snapshot SHOULD have a prov:invalidatedAtTime.
This snapshot is not linked to any prov:Activity via prov:wasInvalidatedBy or prov:wasGeneratedBy.
PREFIX prov: <http://www.w3.org/ns/prov#> SELECT $this WHERE { $this prov:specializationOf ?main . FILTER NOT EXISTS { $this prov:wasInvalidatedBy ?act } FILTER NOT EXISTS { $this prov:wasGeneratedBy ?act2 } }
Lifecycle activities
Lifecycle activities (amend, correct, revoke, withdraw, replace, etc.) recorded against this EDP via era:changeActivity.
(Info) No lifecycle activities recorded for this entity.
Entity state
The current state of the EDP (e.g. New, Amended, Revoked, Withdrawn, Suspended, Rejected).
The entity SHOULD have an era:state from the States concept scheme.
SELECT ?this WHERE { ?this a <http://data.europa.eu/949/Certificate> ; <http://purl.org/dc/terms/type> <http://data.europa.eu/949/concepts/permission-types/ECMCertificate> . }
CERTIFICATE OF CONFORMITY OF ENTITY IN CHARGE OF MAINTENANCE - ECM Certificate
This Certificate must be typed as ECM Certificate
An ECM Certificate MUST have `dcterms:type era-permission-types:ECMCertificate`
1 EU Identification Number (EIN)
Format: CC/31/YYYY/NNNN where CC=country code, 31=certificate type, YYYY=year, NNNN=sequential number
An ECM Certificate MUST have ONE valid identifier matching pattern CC/31/YYYY/NNNN
2. Certified Entity in Charge of Maintenance (ECM)
2. Zertifizierte Instandhaltungsstelle (ECM)
Links to the OrganisationRole defining the Entity in Charge of Maintenance
An ECM Certificate MUST certify an organisation in a certain ECM role
Defines the role classification for the ECM
`era:Body` which is the ECM
The organisation receiving an ECM Certificate must be an `era:Body`.
Specifies the `era:Body` executing the role of ECM
The OrganisationRole of an ECM Certificate holder must be selected/confirmed
Specifies the type of company which holds the ECM certificate
Links to the OrganisationRole defining the Certificate Issuing Organisation
An ECM Certificate MUST link to the OrganisationRole Certificate Issuing Organisation
Defines the role classification for ECM Certification Bodies
An ECM Certificate must be issued by a era:Body having the role of ECM Certification Body
`era:Body` which is the ECM Certification Body (recognised, accredited, or a NSA)
The organisation delivering an ECM Certificate must be an `era:Body`.
Specifies the `era:Body` delivering the ECM certificate
EIN of the previous certificate
Reference to a previous certificate with format CC/31/YYYY/NNNN
An ECM Certificate MAY refer to ONE previous certificate identifier
Defines the time interval during which the certificate is valid (max 5 years)
An ECM Certificate MUST have ONE Validity Interval (start and end date).
Permission type
The role permitted by this ECM Certificate
Category of vehicles
Indicates the vehicle (sub)categories the ECM is allowed to maintain
An ECM certificate must refer to all the vehicle (sub)categories which can be maintained by the holder
Indicates whether the ECM is authorized to maintain vehicles intended for high-speed operations.
An ECM Certificate MUST indicate whether the ECM is authorized to maintain vehicles intended for high-speed operations
Covers wagons specialised in transport of dangerous goods
Indicates whether the ECM is authorized to maintain wagons specialised in transport of dangerous goods
An ECM Certificate MUST indicate whether the ECM is authorized to maintain wagons specialised in transport of dangerous goods
ECM: spatial validity to a Site
Assessed site(s), if relevant.
No assessed site(s) mentioned in the ECM entitlement.
Additional information related to the certificate.
An ECM Certificate allows ONE Additional comment
Date on which the certificate is issued.
An ECM Certificate MUST have ONE Issue date.
Internal reference number used by the issuing NSA
An ECM Certificate SHOULD have an internal identifier
ECM Certification Body Attestation
Attestation
Proof of Entitlement - ECM Certification Body
This Attestation serves as Proof of Entitlement for an ECM Certification Body
An ECM Attestation MUST have `dcterms:type era-permission-types:ECMCertification`
1. ID DATA - EU Identification Number (EIN)
Format: CC/30/MMYY/NNNN where CC=country code, 30=certificate type, YY=year, MM & NNNN=sequential number
An ECM Attestation MUST have ONE valid identifier matching pattern CC/30/MMYY/NNNN
The audience of the ECM CB proof of entitlement
An ECM Certification Body attestation must be held by a era:Body having the role of ECM Certification Body
The organisation receiving an ECM CB attestation must be an `era:Body`.
Specifies the `era:Body` receiving the ECM CB attestation
5.1a The maintenance functions which can be certified by the ECM CB
Indicates the certifiable Maintenance Functions
5.1b The ECM scope which can be certified by the ECM CB
Indicates the certifiable ECM scopes
5.2 Category of vehicles
Indicates the vehicle categories the ECM CB is allowed to certify
An ECM CB Attestation MUST indicate what vehicle categories the ECM CB is authorized to certify operations on.
5.3 Subcategory of vehicles
Indicates the vehicle subcategories the ECM CB is allowed to certify
An ECM CB Attestation MUST indicate what vehicle subcategories the ECM CB is authorized to certify operations on.
Indicates whether the ECM CB is authorized to certify operations regarding vehicles intended for high-speed operations.
An ECM CB Attestation MUST indicate whether the ECM CB is authorized to certify operations regarding vehicles intended for high-speed operations
5.4b Covers wagons specialised in transport of dangerous goods
Indicates whether the ECM CB is authorized to certify operations regarding wagons specialised in transport of dangerous goods
An ECM CB Attestation MUST indicate whether the ECM CB is authorized to certify operations regarding wagons specialised in transport of dangerous goods
The national legislation under which the attestation is issued.
An ECM CB Attestation MUST refer to at least ONE applicable national legislation
Defines the time interval during which the attestation is valid (max 5 years)
An ECM CB Attestation MUST have ONE Validity Interval (start and end date).
An ECM CB Attestation MUST have ONE Issue date (decision date).
An ECM CB Attestation SHOULD have an internal identifier
EIN of previous version
Reference to a previous certificate with format CC/30/MMMM/NNNN
An ECM CD entitlement can refer to a previous version
Certificate of conformity for Maintenance Functions
CERTIFICATE OF CONFORMITY OF Certified Organisation - ECM Certificate
This Certificate must be typed as `Certificate of conformity for Maintenance Functions`
A `Certificate of conformity for Maintenance Functions` MUST have `dcterms:type era-permission-types:MaintenanceFunctionCertificate`
Format: CC/32|33/YYYY/NNNN where CC=country code, 32|33=certificate type, YYYY=year, NNNN=sequential number
A `Certificate of conformity for Maintenance Functions` MUST have ONE valid identifier matching pattern CC/32/YYYY/NNNN
2. Certified Organisation
2. ZERTIFIZIERTE ORGANISATION
Links to the OrganisationRole defining the Certified Organisation
A `Certificate of conformity for Maintenance Functions` MUST certify an organisation in a certain role
`era:Body` which executes the Maintenance Functions
The organisation receiving a `Certificate of conformity for Maintenance Functions` must be an `era:Body`.
Specifies the `era:Body` executing the Maintenance Functions
The OrganisationRole of a `Certificate of conformity for Maintenance Functions` holder must be selected/confirmed
Specifies the type of company which holds the Certificate of conformity for Maintenance Functions
A `Certificate of conformity for Maintenance Functions` MUST link to the OrganisationRole Certificate Issuing Organisation
A `Certificate of conformity for Maintenance Functions` must be issued by a era:Body having the role of ECM Certification Body
The organisation delivering a `Certificate of conformity for Maintenance Functions` must be an `era:Body`.
Specifies the `era:Body` delivering the Certificate of conformity for Maintenance Functions
Reference to a previous certificate with format CC/32/YYYY/NNNN or CC/33/YYYY/NNNN
A `Certificate of conformity for Maintenance Functions` MAY refer to ONE previous certificate identifier
A `Certificate of conformity for Maintenance Functions` MUST have ONE Validity Interval (start and end date).
The role permitted by this `Certificate of conformity for Maintenance Functions`
A `Certificate of conformity for Maintenance Functions` must refer to all the vehicle (sub)categories which can be maintained by the holder
A `Certificate of conformity for Maintenance Functions` MUST indicate whether the ECM is authorized to maintain vehicles intended for high-speed operations
A `Certificate of conformity for Maintenance Functions` MUST indicate whether the ECM is authorized to maintain wagons specialised in transport of dangerous goods
MWS: spatial validity to a Site
No assessed site(s) mentioned in the MWS entitlement.
The maintenance functions covered by the Certificate
Indicates the covered Maintenance Functions
A `Certificate of conformity for Maintenance Functions` MUST indicate which maintenance functions are supported
A `Certificate of conformity for Maintenance Functions` allows ONE Additional comment
A `Certificate of conformity for Maintenance Functions` MUST have ONE Issue date.
A `Certificate of conformity for Maintenance Functions` SHOULD have an internal identifier
This Certificate must be typed as Safety Certificate Part A
A Safety Certificate Type A MUST have `dcterms:type era-permission-types:SafetyCertificateA`
Format: CC11YYYYNNNN where CC=country code, 11=certificate type, YYYY=year, NNNN=sequential number
A Safety Certificate Type A MUST have ONE valid identifier matching pattern CC11YYYYNNNN
Reference to related ECM Certificate with format CC/31/YYYY/NNNN
A Safety Certificate Type A MAY refer to ONE ECM certificate identifier
A Safety Certificate Type A SHOULD have an internal identifier
Links to the OrganisationRole defining the Railway Undertaking
A Safety Certificate Type A MUST link to the OrganisationRole Railway Undertaking
Defines the role classification for Railway Undertakings
The OrganisationRole of a Safety Certificate Part A must apply to a Railway Undertaking (RU)
Specifies the type of Railway Undertaking operations
A Safety Certificate Type A MUST link to the OrganisationRole Certificate Issuing Organisation
Defines the role classification for National Safety Authorities
The OrganisationRole of a Safety Certificate Part A must be issued by a National Safety Authority (NSA)
Specifies National Safety Authority role
Indicates whether the RU is authorized for high-speed operations.
A Safety Certificate Type A MUST indicate whether the RU is authorized for high-speed operations
Indicates whether the RU is authorized for dangerous goods transport according to RID regulations
A Safety Certificate Type A MUST indicate whether the RU is authorized for dangerous goods operations
Indicates whether the RU is restricted to shunting operations only (no mainline running)
A Safety Certificate Type A MUST indicate whether the RU is authorized for shunting operations only
The date when the service/s will begin.
A Safety Certificate Type A MAY indicate the date when the service/s will begin
The transportation volume for passenger services.
A Safety Certificate Type A MAY describe ONE transportation volume for passenger services
The transportation volume for freight services.
A Safety Certificate Type A MAY describe ONE transportation volume for freight services
The national legislation under which the certificate is issued.
A Safety Certificate Type A MUST refer to at least ONE applicable national legislation
Additional comments related to the certificate.
A Safety Certificate Type A allows ONE Additional comment
A Safety Certificate Type A MUST have ONE Issue date.
A Safety Certificate Type A MUST have ONE Validity Interval (start and end date).
This Certificate must be typed as Safety Certificate Part B
A Safety Certificate Type B MUST have `dcterms:type era-permission-types:SafetyCertificateB`
Format: CC12YYYYNNNN where CC=country code, 12=certificate type, YYYY=year, NNNN=sequential number
A Safety Certificate Type B MUST have ONE valid identifier matching pattern CC12YYYYNNNN
Safety Certificate Part A - Certificate Number
Reference to the Certificate Part A with format CC/11/YYYY/NNNN
A Safety Certificate Type B MUST refer to ONE Part A certificate identifier
The OrganisationRole of a Safety Certificate Part B must apply to a Railway Undertaking (RU)
The OrganisationRole of a Safety Certificate Part B must be issued by a National Safety Authority (NSA)
Lines operated under the scope of the certificate.
A Safety Certificate Type B allows several lines operated to be specified.
Internal Identification Number
A Safety Certificate Part B should have an internal identifier.
This Certificate must be typed as Single Safety Certificate
A Single Safety Certificate MUST have `dcterms:type era-permission-types:SingleSafetyCertificate`
Format: CC10YYYYNNNN where CC=country code, 10=certificate type, YYYY=year, NNNN=sequential number
A Single Safety Certificate MUST have ONE valid identifier matching pattern CC10YYYYNNNN
1.3 EIN of the previous certificate (in case of renewal or update only)
Reference to a previous certificate with format CC/10/YYYY/NNNN
A Single Safety Certificate MAY refer to ONE previous certificate identifier
A Single Safety Certificate MUST have ONE Validity Interval (start and end date).
A Single Safety Certificate MUST link to the OrganisationRole Railway Undertaking
The OrganisationRole of a Single Safety Certificate must apply to a Railway Undertaking (RU)
A Single Safety Certificate MUST link to the OrganisationRole Certificate Issuing Organisation
Defines the role classification for Safety Certification Bodies
The OrganisationRole of a Single Safety Certificate must be issued by a Safety Certification Body (NSA)
Specifies Safety Certification Body role
A Single Safety Certificate MUST indicate whether the RU is authorized for high-speed operations
A Single Safety Certificate MUST indicate whether the RU is authorized for dangerous goods operations
A Single Safety Certificate MUST indicate whether the RU is authorized for shunting operations only
A Single Safety Certificate MAY indicate the date when the service/s will begin
A Single Safety Certificate MAY describe ONE transportation volume for passenger services
A Single Safety Certificate MAY describe ONE transportation volume for freight services
4.3 Operations to border stations under the scope of the certificate.
A Single Safety Certificate allows several Operations to border stations to be specified.
4.2 Area of operation under the scope of the certificate.
A Single Safety Certificate allows several Areas of operation to be specified.
A Single Safety Certificate MUST refer to at least ONE applicable national legislation
A Single Safety Certificate allows ONE Additional comment
A Single Safety Certificate MUST have ONE Issue date.
A Single Safety Certificate SHOULD have an internal identifier
The size of a given organisation or body.
organisationSize: Each Body can have up to 1 organisation size which must be represented as an IRI which is a SKOS concept. This error may be due to having more than one value, or having a value that is not an IRI, or a value that is an IRI but not a SKOS concept.
Indication of the organisationSize: The Body {$this} has a value {?concept} that is not one of the predefined values and cannot be converted into a SKOS concept on this list: http://data.europa.eu/949/concepts/org-size/OrgSizes.
PREFIX era: <http://data.europa.eu/949/> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> SELECT $this ?concept WHERE { $this era:organisationSize ?concept . era:organisationSize era:inSkosConceptScheme ?conceptScheme . FILTER NOT EXISTS{ ?concept skos:inScheme ?conceptScheme . } }
The label of an entity
rdfs:label: The era:Body must have a label using rdfs. This error may be due to not having a value, having more than one value, or having a value that is not a string.
The VAT Identifier
vatID: The era:Body should have a at most one vatID. This error may be due to not having a value, having more than one value, or having a value that is not a string.
The ORG indentifier
orgIdentifier: The era:Body must have a at most one org identifier. This error may be due to not having a value, having more than one value, or having a value that is not a string.
The link to the site of the era:Body
hasSite: The organisation site must be represented as an IRI. This error may be due to not having a value, or having a value that is not an IRI.
The link to the site address
locn:adminUnitL1: Each site address must have exactly one country. This error may be due to having a Site without or with more than one adminUnitL1 or it value is not a Concept.
Indicates the country in which the site address.
Country in which the Site address resides: The Address {$this} has a value {?concept} that is not one of the predefined values and cannot be converted into a SKOS concept on this list: http://publications.europa.eu/resource/authority/country.
PREFIX skos: <http://www.w3.org/2004/02/skos/core#> PREFIX locn: <http://w3.org/ns/locn#> SELECT $this ?concept WHERE { $this locn:adminUnitL1 ?concept . FILTER NOT EXISTS{ ?concept skos:inScheme <http://publications.europa.eu/resource/authority/country> . } }
The postCode of a location
postCode: The Address must have exactly one postCode. This error may be due to not having a value, having more than one value, or having a value that is not a string.
The postName of a location
postName: The Address must have exactly one postName. This error may be due to not having a value, having more than one value, or having a value that is not a string.
The thoroughfare of a location
The full address of a location as extracted
fullAddress: The Address should have one fullAddress. This error may be due to not having a value, having more than one value, or having a value that is not a string.
NANDO (New Approach Notified and Designated Organisations) code identifying the organisation that plays this role.
nandoCode: An OrganisationRole must have at most one nandoCode. This error may be due to having more than one value or having a value that is not a string.
An OrganisationRole may only have a value for nandoCode if its hasOrganisationRole is the NOBO (notified body) concept <http://data.europa.eu/949/concepts/organisation-roles/NOBO>.
nandoCode: The OrganisationRole {$this} with label {?label} has a nandoCode {?value} but its hasOrganisationRole is {?role}, not <http://data.europa.eu/949/concepts/organisation-roles/NOBO>. A nandoCode is only allowed for notified bodies (NOBO).
PREFIX era: <http://data.europa.eu/949/> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT $this ?label ?value ?role (era:nandoCode AS ?path) WHERE { $this era:nandoCode ?value . OPTIONAL { $this rdfs:label ?label0 } . BIND(COALESCE(?label0, "unknown label") AS ?label) OPTIONAL { $this era:hasOrganisationRole ?role0 } . BIND(COALESCE(STR(?role0), "none") AS ?role) FILTER NOT EXISTS { $this era:hasOrganisationRole <http://data.europa.eu/949/concepts/organisation-roles/NOBO> } }
The combination of CLD type ({?cldType}) and module ({?cldModule}) is forbidden for the TSI ({?tsiRoot}) at the amendment level referenced by this CLD.
PREFIX era: <http://data.europa.eu/949/> PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX eli: <http://data.europa.eu/eli/ontology#> PREFIX owl: <http://www.w3.org/2002/07/owl#> SELECT $this ?cldType ?cldModule ?tsiRoot ?consolidated WHERE { # 1. Get CLD type and module $this dcterms:type ?cldType . $this dcterms:conformsTo ?cldModule . # 2. Query era-lex for a ForbiddenAssessmentConstraint SERVICE <repository:era-lex> { ?tsiEli owl:sameAs ?tsiRoot . ?tsiEli eli:consolidated_by ?consolidated . ?consolidated era:cldValidityRule ?rule . ?rule a era:ForbiddenAssessmentConstraint . ?rule dcterms:type ?cldType . ?rule dcterms:conformsTo ?cldModule . } # 3. CLD must reference the TSI root $this dcterms:subject ?tsiRoot . # 4. All amendments of this consolidated version must be covered FILTER NOT EXISTS { SERVICE <repository:era-lex> { ?consolidated eli:consolidates ?reqAmendment . FILTER(?reqAmendment != ?tsiEli) } FILTER NOT EXISTS { $this dcterms:subject ?reqAmendment . } FILTER NOT EXISTS { $this dcterms:subject ?cldAmendRef . SERVICE <repository:era-lex> { ?reqAmendment owl:sameAs ?cldAmendRef . } } } # 5. This must be the latest matching consolidated version FILTER NOT EXISTS { SERVICE <repository:era-lex> { ?tsiEli eli:consolidated_by ?newerConsolidated . ?newerConsolidated era:cldValidityRule ?newerRule . ?newerRule a era:ForbiddenAssessmentConstraint . ?newerRule dcterms:type ?cldType . ?newerRule dcterms:conformsTo ?cldModule . } FILTER(?newerConsolidated != ?consolidated) FILTER NOT EXISTS { SERVICE <repository:era-lex> { ?newerConsolidated eli:consolidates ?reqAmendment2 . FILTER(?reqAmendment2 != ?tsiEli) } FILTER NOT EXISTS { $this dcterms:subject ?reqAmendment2 . } FILTER NOT EXISTS { $this dcterms:subject ?cldAmendRef2 . SERVICE <repository:era-lex> { ?reqAmendment2 owl:sameAs ?cldAmendRef2 . } } } SERVICE <repository:era-lex> { { SELECT ?newerConsolidated (COUNT(DISTINCT ?na) AS ?newerCount) WHERE { ?newerConsolidated eli:consolidates ?na . } GROUP BY ?newerConsolidated } { SELECT ?consolidated (COUNT(DISTINCT ?ca) AS ?currentCount) WHERE { ?consolidated eli:consolidates ?ca . } GROUP BY ?consolidated } } FILTER(?newerCount > ?currentCount) } }
CLD validity duration ({?actualYears} years) exceeds the maximum allowed ({?maxYears} years) for type {?cldType} with module {?cldModule} under TSI {?tsiRoot}.
PREFIX era: <http://data.europa.eu/949/> PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX eli: <http://data.europa.eu/eli/ontology#> PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX time: <http://www.w3.org/2006/time#> SELECT $this ?cldType ?cldModule ?tsiRoot ?maxYears ?actualYears WHERE { # 1. Get CLD properties $this dcterms:type ?cldType . $this dcterms:conformsTo ?cldModule . $this dcterms:valid ?validPeriod . ?validPeriod time:hasDurationDescription ?duration . ?duration time:years ?actualYearsRaw . BIND(xsd:decimal(?actualYearsRaw) AS ?actualYears) # 2. Get TSI subject $this dcterms:subject ?tsiRoot . # 3. Look up the applicable MaxDurationConstraint { # --- Path A: TSI-specific constraint --- SERVICE <repository:era-lex> { ?tsiEli owl:sameAs ?tsiRoot . ?tsiEli eli:consolidated_by ?consolidated . ?consolidated era:cldValidityRule ?rule . ?rule a era:MaxDurationConstraint . ?rule dcterms:type ?cldType . ?rule dcterms:conformsTo ?cldModule . ?rule time:years ?maxYears . } # All amendments covered FILTER NOT EXISTS { SERVICE <repository:era-lex> { ?consolidated eli:consolidates ?reqAmendment . FILTER(?reqAmendment != ?tsiEli) } FILTER NOT EXISTS { $this dcterms:subject ?reqAmendment . } FILTER NOT EXISTS { $this dcterms:subject ?cldAmendRef . SERVICE <repository:era-lex> { ?reqAmendment owl:sameAs ?cldAmendRef . } } } # Latest matching consolidated version FILTER NOT EXISTS { SERVICE <repository:era-lex> { ?tsiEli eli:consolidated_by ?newerConsolidated . ?newerConsolidated era:cldValidityRule ?newerRule . ?newerRule a era:MaxDurationConstraint . ?newerRule dcterms:type ?cldType . ?newerRule dcterms:conformsTo ?cldModule . } FILTER(?newerConsolidated != ?consolidated) FILTER NOT EXISTS { SERVICE <repository:era-lex> { ?newerConsolidated eli:consolidates ?reqAmendment2 . FILTER(?reqAmendment2 != ?tsiEli) } FILTER NOT EXISTS { $this dcterms:subject ?reqAmendment2 . } FILTER NOT EXISTS { $this dcterms:subject ?cldAmendRef2 . SERVICE <repository:era-lex> { ?reqAmendment2 owl:sameAs ?cldAmendRef2 . } } } SERVICE <repository:era-lex> { { SELECT ?newerConsolidated (COUNT(DISTINCT ?na) AS ?newerCount) WHERE { ?newerConsolidated eli:consolidates ?na . } GROUP BY ?newerConsolidated } { SELECT ?consolidated (COUNT(DISTINCT ?ca) AS ?currentCount) WHERE { ?consolidated eli:consolidates ?ca . } GROUP BY ?consolidated } } FILTER(?newerCount > ?currentCount) } } UNION { # --- Path B: Fall back to Decision 2010/713/EU --- FILTER NOT EXISTS { SERVICE <repository:era-lex> { ?tsiEli2 owl:sameAs ?tsiRoot . ?tsiEli2 eli:consolidated_by ?anyConsolidated . ?anyConsolidated era:cldValidityRule ?anyRule . ?anyRule dcterms:type ?cldType . ?anyRule dcterms:conformsTo ?cldModule . } } SERVICE <repository:era-lex> { <http://data.europa.eu/eli/dec/2010/713/oj> era:cldValidityRule ?genRule . ?genRule a era:MaxDurationConstraint . ?genRule dcterms:type ?cldType . ?genRule dcterms:conformsTo ?cldModule . ?genRule time:years ?maxYears . } } # 4. Actual duration exceeds maximum FILTER(?actualYears > ?maxYears) }
CLD type {?cldType} with module {?cldModule} under TSI {?tsiRoot} should have unlimited validity, but an end date or duration is specified.
PREFIX era: <http://data.europa.eu/949/> PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX eli: <http://data.europa.eu/eli/ontology#> PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX time: <http://www.w3.org/2006/time#> SELECT $this ?cldType ?cldModule ?tsiRoot WHERE { # 1. Get CLD properties $this dcterms:type ?cldType . $this dcterms:conformsTo ?cldModule . $this dcterms:subject ?tsiRoot . $this dcterms:valid ?validPeriod . # 2. CLD has an end date or a duration — it should not { ?validPeriod time:hasEnd ?endDate . } UNION { ?validPeriod time:hasDurationDescription ?dur . ?dur time:years ?yrs . } # 3. Determine whether the applicable rule is UnlimitedValidityConstraint { # --- Path A: TSI-specific constraint --- SERVICE <repository:era-lex> { ?tsiEli owl:sameAs ?tsiRoot . ?tsiEli eli:consolidated_by ?consolidated . ?consolidated era:cldValidityRule ?rule . ?rule a era:UnlimitedValidityConstraint . ?rule dcterms:type ?cldType . ?rule dcterms:conformsTo ?cldModule . } # All amendments covered FILTER NOT EXISTS { SERVICE <repository:era-lex> { ?consolidated eli:consolidates ?reqAmendment . FILTER(?reqAmendment != ?tsiEli) } FILTER NOT EXISTS { $this dcterms:subject ?reqAmendment . } FILTER NOT EXISTS { $this dcterms:subject ?cldAmendRef . SERVICE <repository:era-lex> { ?reqAmendment owl:sameAs ?cldAmendRef . } } } # Latest matching FILTER NOT EXISTS { SERVICE <repository:era-lex> { ?tsiEli eli:consolidated_by ?newerConsolidated . ?newerConsolidated era:cldValidityRule ?newerRule . ?newerRule dcterms:type ?cldType . ?newerRule dcterms:conformsTo ?cldModule . } FILTER(?newerConsolidated != ?consolidated) FILTER NOT EXISTS { SERVICE <repository:era-lex> { ?newerConsolidated eli:consolidates ?reqAmendment2 . FILTER(?reqAmendment2 != ?tsiEli) } FILTER NOT EXISTS { $this dcterms:subject ?reqAmendment2 . } FILTER NOT EXISTS { $this dcterms:subject ?cldAmendRef2 . SERVICE <repository:era-lex> { ?reqAmendment2 owl:sameAs ?cldAmendRef2 . } } } SERVICE <repository:era-lex> { { SELECT ?newerConsolidated (COUNT(DISTINCT ?na) AS ?newerCount) WHERE { ?newerConsolidated eli:consolidates ?na . } GROUP BY ?newerConsolidated } { SELECT ?consolidated (COUNT(DISTINCT ?ca) AS ?currentCount) WHERE { ?consolidated eli:consolidates ?ca . } GROUP BY ?consolidated } } FILTER(?newerCount > ?currentCount) } } UNION { # --- Path B: General rules from Decision 2010/713/EU --- FILTER NOT EXISTS { SERVICE <repository:era-lex> { ?tsiEli2 owl:sameAs ?tsiRoot . ?tsiEli2 eli:consolidated_by ?anyConsolidated . ?anyConsolidated era:cldValidityRule ?anyRule . ?anyRule dcterms:type ?cldType . ?anyRule dcterms:conformsTo ?cldModule . } } SERVICE <repository:era-lex> { <http://data.europa.eu/eli/dec/2010/713/oj> era:cldValidityRule ?genRule . ?genRule a era:UnlimitedValidityConstraint . ?genRule dcterms:type ?cldType . ?genRule dcterms:conformsTo ?cldModule . } } }
CLD validity rule
Links a legal resource to a validity constraint governing a specific CLD type and module combination.
CLD validity rule must point to a validity constraint.
A validity interval with duration must have exactly one duration description.
A validity interval with duration must have exactly one duration in years description.
A validity interval must have exactly one start date.
A validity interval must have exactly one end date.
The instant in time represented as an XSD Date.
A time instant must have exactly one XSD date value.