This commit is contained in:
2025-03-17 17:14:46 +00:00
parent ffacf12177
commit a53f6b26ef
598 changed files with 147684 additions and 337 deletions

View File

@ -0,0 +1,337 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:stylesheet xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:saxon="http://saxon.sf.net/"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:schold="http://www.ascc.net/xml/schematron"
xmlns:iso="http://purl.oclc.org/dsdl/schematron"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:rep="http://www.xoev.de/de/validator/varl/1"
xmlns:s="http://www.xoev.de/de/validator/framework/1/scenarios"
version="2.0"><!--Implementers: please note that overriding process-prolog or process-root is
the preferred method for meta-stylesheets to use where possible. -->
<xsl:param name="archiveDirParameter"/>
<xsl:param name="archiveNameParameter"/>
<xsl:param name="fileNameParameter"/>
<xsl:param name="fileDirParameter"/>
<xsl:variable name="document-uri">
<xsl:value-of select="document-uri(/)"/>
</xsl:variable>
<!--PHASES-->
<!--PROLOG-->
<xsl:output method="text"/>
<!--XSD TYPES FOR XSLT2-->
<!--KEYS AND FUNCTIONS-->
<!--DEFAULT RULES-->
<!--MODE: SCHEMATRON-SELECT-FULL-PATH-->
<!--This mode can be used to generate an ugly though full XPath for locators-->
<xsl:template match="*" mode="schematron-select-full-path">
<xsl:apply-templates select="." mode="schematron-get-full-path"/>
</xsl:template>
<!--MODE: SCHEMATRON-FULL-PATH-->
<!--This mode can be used to generate an ugly though full XPath for locators-->
<xsl:template match="*" mode="schematron-get-full-path">
<xsl:apply-templates select="parent::*" mode="schematron-get-full-path"/>
<xsl:text>/</xsl:text>
<xsl:choose>
<xsl:when test="namespace-uri()=''">
<xsl:value-of select="name()"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>*:</xsl:text>
<xsl:value-of select="local-name()"/>
<xsl:text>[namespace-uri()='</xsl:text>
<xsl:value-of select="namespace-uri()"/>
<xsl:text>']</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:variable name="preceding"
select="count(preceding-sibling::*[local-name()=local-name(current()) and namespace-uri() = namespace-uri(current())])"/>
<xsl:text>[</xsl:text>
<xsl:value-of select="1+ $preceding"/>
<xsl:text>]</xsl:text>
</xsl:template>
<xsl:template match="@*" mode="schematron-get-full-path">
<xsl:apply-templates select="parent::*" mode="schematron-get-full-path"/>
<xsl:text>/</xsl:text>
<xsl:choose>
<xsl:when test="namespace-uri()=''">@<xsl:value-of select="name()"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>@*[local-name()='</xsl:text>
<xsl:value-of select="local-name()"/>
<xsl:text>' and namespace-uri()='</xsl:text>
<xsl:value-of select="namespace-uri()"/>
<xsl:text>']</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!--MODE: SCHEMATRON-FULL-PATH-2-->
<!--This mode can be used to generate prefixed XPath for humans-->
<xsl:template match="node() | @*" mode="schematron-get-full-path-2">
<xsl:for-each select="ancestor-or-self::*">
<xsl:text>/</xsl:text>
<xsl:value-of select="name(.)"/>
<xsl:if test="preceding-sibling::*[name(.)=name(current())]">
<xsl:text>[</xsl:text>
<xsl:value-of select="count(preceding-sibling::*[name(.)=name(current())])+1"/>
<xsl:text>]</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:if test="not(self::*)">
<xsl:text/>/@<xsl:value-of select="name(.)"/>
</xsl:if>
</xsl:template>
<!--MODE: SCHEMATRON-FULL-PATH-3-->
<!--This mode can be used to generate prefixed XPath for humans
(Top-level element has index)-->
<xsl:template match="node() | @*" mode="schematron-get-full-path-3">
<xsl:for-each select="ancestor-or-self::*">
<xsl:text>/</xsl:text>
<xsl:value-of select="name(.)"/>
<xsl:if test="parent::*">
<xsl:text>[</xsl:text>
<xsl:value-of select="count(preceding-sibling::*[name(.)=name(current())])+1"/>
<xsl:text>]</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:if test="not(self::*)">
<xsl:text/>/@<xsl:value-of select="name(.)"/>
</xsl:if>
</xsl:template>
<!--MODE: GENERATE-ID-FROM-PATH -->
<xsl:template match="/" mode="generate-id-from-path"/>
<xsl:template match="text()" mode="generate-id-from-path">
<xsl:apply-templates select="parent::*" mode="generate-id-from-path"/>
<xsl:value-of select="concat('.text-', 1+count(preceding-sibling::text()), '-')"/>
</xsl:template>
<xsl:template match="comment()" mode="generate-id-from-path">
<xsl:apply-templates select="parent::*" mode="generate-id-from-path"/>
<xsl:value-of select="concat('.comment-', 1+count(preceding-sibling::comment()), '-')"/>
</xsl:template>
<xsl:template match="processing-instruction()" mode="generate-id-from-path">
<xsl:apply-templates select="parent::*" mode="generate-id-from-path"/>
<xsl:value-of select="concat('.processing-instruction-', 1+count(preceding-sibling::processing-instruction()), '-')"/>
</xsl:template>
<xsl:template match="@*" mode="generate-id-from-path">
<xsl:apply-templates select="parent::*" mode="generate-id-from-path"/>
<xsl:value-of select="concat('.@', name())"/>
</xsl:template>
<xsl:template match="*" mode="generate-id-from-path" priority="-0.5">
<xsl:apply-templates select="parent::*" mode="generate-id-from-path"/>
<xsl:text>.</xsl:text>
<xsl:value-of select="concat('.',name(),'-',1+count(preceding-sibling::*[name()=name(current())]),'-')"/>
</xsl:template>
<!--MODE: GENERATE-ID-2 -->
<xsl:template match="/" mode="generate-id-2">U</xsl:template>
<xsl:template match="*" mode="generate-id-2" priority="2">
<xsl:text>U</xsl:text>
<xsl:number level="multiple" count="*"/>
</xsl:template>
<xsl:template match="node()" mode="generate-id-2">
<xsl:text>U.</xsl:text>
<xsl:number level="multiple" count="*"/>
<xsl:text>n</xsl:text>
<xsl:number count="node()"/>
</xsl:template>
<xsl:template match="@*" mode="generate-id-2">
<xsl:text>U.</xsl:text>
<xsl:number level="multiple" count="*"/>
<xsl:text>_</xsl:text>
<xsl:value-of select="string-length(local-name(.))"/>
<xsl:text>_</xsl:text>
<xsl:value-of select="translate(name(),':','.')"/>
</xsl:template>
<!--Strip characters-->
<xsl:template match="text()" priority="-1"/>
<!--SCHEMA SETUP-->
<xsl:template match="/">
<xsl:apply-templates select="/" mode="M2"/>
<xsl:apply-templates select="/" mode="M3"/>
<xsl:apply-templates select="/" mode="M4"/>
<xsl:apply-templates select="/" mode="M5"/>
<xsl:apply-templates select="/" mode="M6"/>
</xsl:template>
<!--SCHEMATRON PATTERNS-->
<!--PATTERN -->
<!--RULE -->
<xsl:template match="rep:report" priority="1000" mode="M2">
<!--ASSERT -->
<xsl:choose>
<xsl:when test="@varlVersion='1.0.0'"/>
<xsl:otherwise>
<xsl:message>Schematron rule violation on <xsl:value-of select="document-uri(root(.))"/> VARL version must be 1.0.0. (@varlVersion='1.0.0')</xsl:message>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="*" mode="M2"/>
</xsl:template>
<xsl:template match="text()" priority="-1" mode="M2"/>
<xsl:template match="@*|node()" priority="-2" mode="M2">
<xsl:apply-templates select="*" mode="M2"/>
</xsl:template>
<!--PATTERN -->
<!--RULE -->
<xsl:template match="rep:report[rep:noScenarioMatched]" priority="1002" mode="M3">
<!--ASSERT -->
<xsl:choose>
<xsl:when test="@valid='false'"/>
<xsl:otherwise>
<xsl:message>Schematron rule violation on <xsl:value-of select="document-uri(root(.))"/> If no scenario matched, then the report must be flagged invalid. (@valid='false')</xsl:message>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="*" mode="M3"/>
</xsl:template>
<!--RULE -->
<xsl:template match="rep:report[rep:scenarioMatched/rep:validationStepResult[@valid = 'false']]"
priority="1001"
mode="M3">
<!--ASSERT -->
<xsl:choose>
<xsl:when test="@valid='false'"/>
<xsl:otherwise>
<xsl:message>Schematron rule violation on <xsl:value-of select="document-uri(root(.))"/> If any validation step has been flagged invalid, then the report must be flagged invalid. (@valid='false')</xsl:message>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="*" mode="M3"/>
</xsl:template>
<!--RULE -->
<xsl:template match="rep:report[rep:scenarioMatched and empty(rep:scenarioMatched/rep:validationStepResult[@valid = 'false'])]"
priority="1000"
mode="M3">
<!--ASSERT -->
<xsl:choose>
<xsl:when test="@valid='true'"/>
<xsl:otherwise>
<xsl:message>Schematron rule violation on <xsl:value-of select="document-uri(root(.))"/> If a scenario matched and no validation step has been flagged invalid, then the report must be flagged valid. (@valid='true')</xsl:message>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="*" mode="M3"/>
</xsl:template>
<xsl:template match="text()" priority="-1" mode="M3"/>
<xsl:template match="@*|node()" priority="-2" mode="M3">
<xsl:apply-templates select="*" mode="M3"/>
</xsl:template>
<!--PATTERN -->
<!--RULE -->
<xsl:template match="rep:scenarioMatched[rep:validationStepResult[@id = 'val-xsd' and @valid='true']]"
priority="1001"
mode="M4">
<!--ASSERT -->
<xsl:choose>
<xsl:when test="rep:validationStepResult[@id = 'val-sch.1']"/>
<xsl:otherwise>
<xsl:message>Schematron rule violation on <xsl:value-of select="document-uri(root(.))"/> If xsd is valid then schematron checks have to be performed. (rep:validationStepResult[@id = 'val-sch.1'])</xsl:message>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="*" mode="M4"/>
</xsl:template>
<!--RULE -->
<xsl:template match="rep:scenarioMatched[rep:validationStepResult[@id = 'val-xsd' and @valid='false']]"
priority="1000"
mode="M4">
<!--ASSERT -->
<xsl:choose>
<xsl:when test="empty(rep:validationStepResult[@id = 'val-sch.1'])"/>
<xsl:otherwise>
<xsl:message>Schematron rule violation on <xsl:value-of select="document-uri(root(.))"/> If xsd is invalid then schematron checks must not be performed. (empty(rep:validationStepResult[@id = 'val-sch.1']))</xsl:message>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="*" mode="M4"/>
</xsl:template>
<xsl:template match="text()" priority="-1" mode="M4"/>
<xsl:template match="@*|node()" priority="-2" mode="M4">
<xsl:apply-templates select="*" mode="M4"/>
</xsl:template>
<!--PATTERN -->
<!--RULE -->
<xsl:template match="rep:validationStepResult[rep:message[@level=('error','warning')]]"
priority="1001"
mode="M5">
<!--ASSERT -->
<xsl:choose>
<xsl:when test="@valid = 'false'"/>
<xsl:otherwise>
<xsl:message>Schematron rule violation on <xsl:value-of select="document-uri(root(.))"/> If a validation step has errors or warnings, it must be flagged invalid. (@valid = 'false')</xsl:message>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="*" mode="M5"/>
</xsl:template>
<!--RULE -->
<xsl:template match="rep:validationStepResult[not(rep:message[@level=('error','warning')])]"
priority="1000"
mode="M5">
<!--ASSERT -->
<xsl:choose>
<xsl:when test="@valid = 'true'"/>
<xsl:otherwise>
<xsl:message>Schematron rule violation on <xsl:value-of select="document-uri(root(.))"/> If a validation step has no errors or warnings, it must be flagged valid. (@valid = 'true')</xsl:message>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="*" mode="M5"/>
</xsl:template>
<xsl:template match="text()" priority="-1" mode="M5"/>
<xsl:template match="@*|node()" priority="-2" mode="M5">
<xsl:apply-templates select="*" mode="M5"/>
</xsl:template>
<!--PATTERN -->
<!--RULE -->
<xsl:template match="rep:message" priority="1000" mode="M6">
<!--ASSERT -->
<xsl:choose>
<xsl:when test="@lineNumber or @xpathLocation"/>
<xsl:otherwise>
<xsl:message>Schematron rule violation on <xsl:value-of select="document-uri(root(.))"/> Some kind of error location must be given. (@lineNumber or @xpathLocation)</xsl:message>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="*" mode="M6"/>
</xsl:template>
<xsl:template match="text()" priority="-1" mode="M6"/>
<xsl:template match="@*|node()" priority="-2" mode="M6">
<xsl:apply-templates select="*" mode="M6"/>
</xsl:template>
</xsl:stylesheet>