-
Notifications
You must be signed in to change notification settings - Fork 2
Toepassen Inhoudelijke Validatie
Hieronder is een gedetailleerd stappenplan om zelf inhoudelijke validatie te implementeren binnen je applicatie. Een aantal uitgewerkte voorbeelden zijn hier ter inspiratie te vinden.
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_functionsPas configuration/user_config.xml aan, de volgende eigenschappen zijn beschikbaar:
- Language:
nlofen
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.xmlIn 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>
...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, .)]"/>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>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>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.