Schematronvalidatie

Uit informatiestandaarden
Ga naar: navigatie, zoeken

Op te testen bestanden kan Schematronvalidatie toegepast worden. Hiervoor is een XSL processor nodig. Aanbevolen is Saxon-HE, een krachtige open source applicatie.

Gebruik: Wanneer de volgende folderstructuur gebruikt wordt (met gedownloade en uitgepakte Saxon HE in de 'saxon' folder):

 - saxon
   - bin
 - test
   - testbestand.xml
 - schematron
   - controles.sch
   - controles.xsl

kan schematronvalidatie uitgevoerd worden met het volgende commando (dit voorbeeld onder DOS):

 $ saxon\bin\Transform
   -t 
   -s:test\testbestand.xml 
   -xsl:schematron\controles.xsl 
   -o:report.xml

De gebruikte schematron moet de SVRL versie van de Schematron zijn. Voor Nictiz projecten wordt deze meestal meegeleverd. Er staat dan een .xsl versie van ieder .sch bestand, in dezelfde folder of vaak een /svrl folder ernaast. Wanneer er geen SVRL versie is, kan deze gemaakt worden. Instructies en benodigdheden zijn te vinden op Github Schematron. (SVRL is een 'xxx.sch' Schematron omgezet naar een 'xxx.xsl' versie ervan. Deze laatste zet een XML testbestand om in een SVRL foutrapportage.)

Dit genereert een report.xml bestand. Een basale HTML versie kan gemaakt worden met de volgende stylesheet: svrl2html.xsl:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:svrl="http://purl.oclc.org/dsdl/svrl">
    <xsl:output method="html" indent="yes"/>

    <xsl:template match="/">
        <html xmlns="http://www.w3.org/1999/xhtml">
            <head>
                <title>SVRL report</title>
                <style>
                    body {margin:8px;}
                    a[href] {color:blue;}
                </style>
            </head>
            <body>
                <h1>SVRL report</h1>
                <div>Errors: <xsl:value-of select="count(.//svrl:failed-assert)"/></div>
                <xsl:for-each select=".//svrl:failed-assert">
                    <ul>
                        <li><b>Text: <xsl:value-of select="svrl:text"/></b></li>
                        <li>Test: <xsl:value-of select="@test"/></li>
                        <li>See: <xsl:value-of select="@see"/></li>
                        <li>Location: <xsl:value-of select="@location"/></li>
                    </ul>
                </xsl:for-each>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

Deze kan uiteraard ook weer met Saxon uitgevoerd worden:

 $ saxon\bin\Transform
   -t 
   -s:report.xml 
   -xsl:svrl2html.xsl 
   -o:report.html