Skip to content

Toepassen Inhoudelijke Validatie

Sytse Walraven edited this page Apr 13, 2026 · 7 revisions

Voorbeelden

Hieronder is een gedetailleerd stappenplan om zelf inhoudelijke validatie te implementeren binnen je applicatie. Een aantal uitgewerkte voorbeelden zijn hier ter inspiratie te vinden.

Stappenplan validatie

1. Download release

Download de meest recente release van de NLCS++ inhoudelijk validatie. Unzip deze:

dist
├───configuration
├───doc
├───localization
└───src
    ├───base
    └───xsl_functions
        ├───geometry_functions
        ├───global_functions
        └───helper_functions

2. Configureer validatie

Pas configuration/user_config.xml aan, de volgende eigenschappen zijn beschikbaar:

  • Language: nl of en

3. Valideer NLCS++ bestand

Gebruik een XSLT 2.0+ processor om een NLCS++ bestand te valideren. Gebruik hiervoor src/base/v[VERSIENUMMER].xsl in combinatie met de NLCS++ XML. De output maakt gebruik van de Schematron Validation Report Language (.svrl.xml).

Hieronder een voorbeeld van valideren met Saxon-HE:

java -jar saxon-he.jar -xsl:src/base/v12.xsl -s:path/to/nlcspp.xml -o:path/to/nlcspp_report.svrl.xml

4. Verwerk validatierapport

In het onderstaande voorbeeld wordt het volgende (incomplete) NLCS++ object gevalideerd:

<MSkabel>
  <ID>6301</ID>
  <Status>NIEUW</Status>
  <Bedrijfstoestand>IN BEDRIJF</Bedrijfstoestand>
  ...
  <Geometry>
    <gml:LineString
    srsDimension="3"
    srsName="EPSG:7415">
      <gml:posList>
        21.0 21.0 -0.80
        21.3 21.0 -0.80
        71.3 21.1 -0.80
      </gml:posList>
    </gml:LineString>
  </Geometry>
</MSkabel>

Het rapport bevat informatie over de uitgevoerde validaties en gedetailleerde informatie of de falende validaties. Hieronder is een sectie uit een rapport met falende validaties:

...
<svrl:fired-rule context="//nlcs:MSkabel[ma:rule-within-scope-for-object(4, .)] | //nlcs:LSkabel[ma:rule-within-scope-for-object(4, .)] | //nlcs:Eaarddraad[ma:rule-within-scope-for-object(4, .)] | //nlcs:Aaanlegtechniek[ma:rule-within-scope-for-object(4, .)] | //nlcs:Amantelbuis[ma:rule-within-scope-for-object(4, .)]"/>
<svrl:failed-assert id="line-geometry-line-segments-meet-length-demand" test="empty($geometries)" location="/Q{NS_NLCSnetbeheer}NLCSnetbeheer[1]/Q{NS_NLCSnetbeheer}MSkabel[1]">
  <svrl:property-reference property="scope">
    <svrl:text>Deelrevisie nieuwe objecten</svrl:text>
  </svrl:property-reference>
  <svrl:property-reference property="rule-number">
    <svrl:text>4</svrl:text>
  </svrl:property-reference>
  <svrl:property-reference property="severity">
    <svrl:text>Fout</svrl:text>
  </svrl:property-reference>
  <svrl:property-reference property="object-type">
    <svrl:text>MSkabel</svrl:text>
  </svrl:property-reference>
  <svrl:property-reference property="object-id">
    <svrl:text>B</svrl:text>
  </svrl:property-reference>
  <svrl:property-reference property="geometries">
    <svrl:text>
      <gml:LineString srsDimension="3" srsName="EPSG:7415">
        <gml:posList>
          21.3 21.0 -0.80
          71.3 21.1 -0.80 
        </gml:posList>
      </gml:LineString>
    </svrl:text>
  </svrl:property-reference>
  <svrl:text>
    Een lijnsegment is korter dan 10cm of langer dan 50m.
  </svrl:text>
</svrl:failed-assert>
...

4.1 Afgetrapte regel

In de bovenste regel zien we dat er een regel is afgetrapt:

<svrl:fired-rule context="//nlcs:MSkabel[ma:rule-within-scope-for-object(4, .)] | //nlcs:LSkabel[ma:rule-within-scope-for-object(4, .)] | //nlcs:Eaarddraad[ma:rule-within-scope-for-object(4, .)] | //nlcs:Aaanlegtechniek[ma:rule-within-scope-for-object(4, .)] | //nlcs:Amantelbuis[ma:rule-within-scope-for-object(4, .)]"/>

4.2 Gefaalde validatie

Direct hieronder staat een svrl:failed-assert element; het object voldoet niet aan de eisen van de regel:

<svrl:failed-assert id="line-geometry-line-segments-meet-length-demand" test="empty($line_segments_not_meeting_length_demands)" location="/Q{NLCSnetbeheer}NLCSnetbeheerType[1]/Q{NLCSnetbeheer}MSkabel[1]">
...
</svrl:failed-assert>

4.3 Validatiebericht

Binnen de svrl:failed-assert is meer gedetailleerde informatie over het falen van de validatie te vinden. Bij het onderste svrl:text element is het bericht te vinden met een omschrijving van de oorzaak van de falende validatie:

<svrl:text>
  Een lijnsegment is korter dan 10cm of langer dan 50m.
</svrl:text>

4.4 Validatie eigenschappen

Naast het bericht worden er svrl:property-reference elementen gegenereerd die meer gedetailleerde informatie over de gefaalde validatie geven:

<svrl:property-reference property="scope">
  <svrl:text>Deelrevisie nieuwe objecten</svrl:text>
</svrl:property-reference>
<svrl:property-reference property="rule-number">
  <svrl:text>4</svrl:text>
</svrl:property-reference>
<svrl:property-reference property="severity">
  <svrl:text>Fout</svrl:text>
</svrl:property-reference>
<svrl:property-reference property="object-type">
  <svrl:text>MSkabel</svrl:text>
</svrl:property-reference>
<svrl:property-reference property="object-id">
  <svrl:text>B</svrl:text>
</svrl:property-reference>
<svrl:property-reference property="geometries">
  <svrl:text>
    <gml:LineString srsDimension="3" srsName="EPSG:7415">
      <gml:posList>
        21.3 21.0 -0.80
        71.3 21.1 -0.80 
      </gml:posList>
    </gml:LineString>
  </svrl:text>
</svrl:property-reference>

Hiervoor zijn de volgende waarden mogelijk:

Veld Omschrijving Verplicht?
scope De scope waarbinnen de regel gevalideerd is ✓*
rule-number Het nummer van de validatieregel
severity Het niveau van de gefaalde validatie binnen zijn scope (Fout of Informerend)
object-type Het object type waarop de validatie heeft plaatsgevonden ✓*
object-id Het object ID van het object waarop de validatie heeft plaatsgevonden ✓*
geometries De geometrie(ën) waarop de validatie gefaald is

* Met uitzondering voor regels van soort Bestand (R.1, R.2, R.35 en R.40). Deze dekken de structuur van het document, niet de objecten zelf. Als gevolg hiervan zijn de status en bedrijfstoestand niet vast te stellen en hebben deze regels dus geen scope.