[Home] [By Thread] [By Date] [Recent Entries]

Subject: Aw: Re: Optimising XSLT 2.0 restructuring of large SVRL files (Saxon-HE 12.9)
From: "Martin Honnen martin.honnen@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Sat, 23 May 2026 02:57:56 -0000
I think the exception in

<xsl:for-each-group select="current-group() except (current() |

svrl:fired-rule[not(@role)] | svrl:fired-rule[@flag='ignore'])"

group-starting-with="svrl:fired-rule ">

can't work, you rather want

<xsl:for-each-group
select="current-group()[not(self::svrl:fired-rule[not(@role)]|self::svrl:fire
d-rule[@flag='ignore])] except ." group-starting-with="svrl:fired-rule">
--
Gesendet mit der GMX Mail App

Am 22.05.26, 18:24 schrieb "Susanne Wunsch susanne.wunsch@xxxxxxxxxxxxx"
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>: Hi Michael, hi Graydon,

thank you both very much for your hints -- the runtime improvement is

already significant, and the stylesheet has become noticeably more

compact. Below is the current state, plus one artefact in the result

that I cannot explain, and a few attempts I made to fix it (none of

which worked).

Current stylesheet

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transf orm"

xmlns:svrl="http://purl.oclc.org/dsdl/svrl"

xmlns:hsvrl="http://tu-dresde n.de/vlp/schematron/hierarchical-svrl"

xmlns:xs="http://www.w3.org/2001/XMLSchema"

exclude-result-prefixes="xs svrl"

version="2.0">

<xsl:output method="xml" indent="yes"/>

<xsl:template match="@*|comment()" mode="restructure">

<xsl:copy copy-namespaces="no">

<xsl:apply-templates select="@*|comment()" mode="#current"/>

</xsl:copy>

</xsl:template>

<xsl:template match="svrl:*" mode="restructure">

<xsl:element name="{local-name()}"

namespace="http://tu-dresde n.de/vlp/schematron/hierarchical-svrl">

<xsl:apply-templates select="@*|comment()|node()"

mode="#current"/>

</xsl:element>

</xsl:template>

<xsl:template match="*" mode="restructure">

<xsl:element name="{name()}" namespace="{namespace-uri()}">

<xsl:apply-templates select="@*|comment()|node()"

mode="#current"/>

</xsl:element>

</xsl:template>

<xsl:template match="svrl:schematron-output" mode="restructure">

<xsl:element name="{local-name()}"

namespace="http://tu-dresde n.de/vlp/schematron/hierarchical-svrl">

<xsl:apply-templates select="@*" mode="#current"/>

<xsl:comment>

This is a restructured SVRL document, which does not

comply with ISO 19757-3 Annex D grammar!

</xsl:comment>

<xsl:apply-templates select="comment()" mode="#current"/>

<xsl:apply-templates select="svrl:text" mode="#current"/>

<xsl:apply-templates

select="svrl:ns-prefix-in-attribute-values" mode="#current"/>

<xsl:for-each-group select="svrl:active-pattern |

svrl:active-pattern/following-sibling::*"

group-starting-with="svrl:active-pattern">

<xsl:element name="{local-name()}"

namespace="http://tu-dresde n.de/vlp/schematron/hierarchical-svrl">

<xsl:apply-templates select="@*|comment()"

mode="#current"/>

<xsl:apply-templates select="*" mode="#current"/>

<xsl:for-each-group select="current-group() except

current()" group-starting-with="svrl:fired-rule">

<xsl:element name="{local-name()}"

namespace="http://tu-dresde n.de/vlp/schematron/hierarchical-svrl">

<xsl:apply-templates select="@*|comment()"

mode="#current"/>

<xsl:apply-templates

select="current-group() except current()" mode="#current"/>

</xsl:element>

</xsl:for-each-group>

</xsl:element>

</xsl:for-each-group>

</xsl:element>

</xsl:template>

<xsl:template

match="svrl:failed-assert[preceding-sibling::*[1]/@flag = 'ignore']"

mode="restructure" priority="2">

<xsl:apply-templates mode="restructure"/>

</xsl:template>

<xsl:template

match="svrl:successful-report[preceding-sibling::*[1]/@flag = 'ignore']"

mode="restructure" priority="2">

<xsl:apply-templates mode="restructure"/>

</xsl:template>

</xsl:stylesheet>

Open problem: fired-rule elements without @role, or with @flag='ignore',

are no longer eliminated

In the previous (slow) version these were dropped by dedicated

templates. With the new for-each-group structure they are now wrapped

just like ordinary fired-rule elements, which is wrong. I tried the

following variants without success:

(a) Filter directly in group-starting-with:

<xsl:for-each-group select="current-group() except current()"

group-starting-with="svrl:fired-rule[@role][@flag!='ignore']">

(b) Pre-filter the input sequence:

<xsl:for-each-group select="current-group() except (current() |

svrl:fired-rule[not(@role)] | svrl:fired-rule[@flag='ignore'])"

group-starting-with="svrl:fired-rule">

(c) Wrap conditionally inside the inner for-each-group:

<xsl:if test="current()[@role][@flag!='ignore']>

<xsl:element name="{local-name()}"

namespace="http://tu-dresde n.de/vlp/schematron/hierarchical-svrl">

<xsl:apply-templates select="@*|comment()" mode="#current"/>

<xsl:apply-templates select="current-group() except current()"

mode="#current"/>

</xsl:element>

</xsl:if>

How to drop fired-rule elements that either have no @role or have

@flag='ignore', INCLUDING all their following failed-assert /

successful-report children, while still grouping the surviving

fired-rule elements correctly?

Any further hint would be much appreciated.

Thanks again,

Susanne

Am 22.05.2026 um 14:16 schrieb Michael Kay mike@xxxxxxxxxxxx:

> So you're doing

>

> <xsl:apply-templates
select="following-sibling::svrl:fired-rule[count(preceding-sibling::svrl:acti
ve-pattern[1] | current()) = 1]"

>

> I think that predicate

>

> [count(preceding-sibling::svrl:active-pattern[1] | current()) = 1

>

> is essentially saying

>

> preceding-sibling::svrl:active-pattern[1] is current()

>

> so the intent is to process only those following-sibling
svrl:fired-rule elements up to the next svrl:active pattern

>

> One way to achieve this would be sibling recursion, where you process
the following siblings one at a time until a terminating condition is
reached.

>

> But it feels to me that this could be done with positional grouping: at
the next level up from svrl:active-pattern, do something like

>

> <xsl:for-each-group select="*"
group-starting-with="svrl:active-pattern">

> <xsl:element ....>

> <xsl:apply-templates ...

> <xsl:for-each select="current-group() except current()">

> <xsl:apply-templates/>

> </xsl:for-each>

> </xsl:element>

> </xsl:for-each-group>

>

> Michael Kay

> Saxonica

>

>>

>> <xsl:element name="{local-name()}" namespace="http://tu-dresde
n.de/vlp/schematron/hierarchical-svrl">

>> <xsl:apply-templates select="@*|comment()" mode="#current"/>

>> <xsl:apply-templates select="*" mode="#current"/>

>> <xsl:apply-templates
select="following-sibling::svrl:fired-rule[count(preceding-sibling::svrl:acti
ve-pattern[1] | current()) = 1]"

>> mode="#current"/>

>> </xsl:element>

>

>

>

>> On 22 May 2026, at 12:36, Susanne Wunsch susanne.wunsch@xxxxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

>>

>> Hi all,

>>

>> TL;DR: An XSLT 2.0 stylesheet that restructures a flat SVRL document
into a hierarchical tree takes ~20 minutes for a 40 MB input
(C"o?=o?=346,000 elements) on Saxon-PE 12.9. I suspect the
following-sibling:: / preceding-sibling:: lookups are the culprit. I
would be grateful for hints on how to rewrite the two hot templates
(svrl:active-pattern, svrl:fired-rule) while preserving the exact same
output.

>>

>> Background:

>>

>> Schematron validation produces an SVRL (Schematron Validation Report
Language) document. To make the report accessible to domain experts, the
SVRL is post-processed in two steps:

>>

>> (1) Transformation from the rather flat SVRL into a hierarchical XML
tree (the step in question).

>> (2) A domain-specific enrichment of that restructured tree.

>>

>> From the resulting in-memory tree, two output chains are derived:

>>

>> a) HTML, and

>> b) XSL-FO, rendered to PDF via FOP.

>>

>> The intermediate result of step (1) is NOT serialised to disk; it is
held in an xsl:variable and consumed directly by step (2):

>>

>> <xsl:import href="HierarchicalSVRL.xsl"/>

>>

>> <xsl:variable name="strukt-svrl">

>> <xsl:apply-templates mode="restructure"/>

>> </xsl:variable>

>>

>> Environment:

>>

>> XSLT processor: Saxon-HE 12.9, no extensions

>> XSLT version: 2.0

>> Input size: ~40 MB SVRL, ~346,000 elements

>> Runtime of step (1): ~20 minutes

>>

>> Profiling observation:

>>

>> Running Saxon with -TP (profile) shows the dominant "total time
(net/ms)" for these two templates, which I would like to optimise:

>>

>> * xsl:template element(Q{http://purl.oclc.org/dsdl/svrl}acti
ve-pattern)

>> * xsl:template element(Q{http://purl.oclc.org/dsdl/svrl}fire d-rule)

>>

>>

>> The stylesheet (HierarchicalSVRL.xsl):

>>

>> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transf orm"

>> xmlns:svrl="http://purl.oclc.org/dsdl/svrl"

>> xmlns:hsvrl="http://tu-dresde n.de/vlp/schematron/hierarchical-svrl"

>> xmlns:xs="http://www.w3.org/2001/XMLSchema"

>> exclude-result-prefixes="xs svrl"

>> version="2.0">

>>

>> <xsl:output method="xml" indent="yes"/>

>>

>> <!-- The following templates in 'mode="restructure"' perform the
restructuring process -->

>>

>> <xsl:template match="@*|comment()" mode="restructure">

>> <xsl:copy copy-namespaces="no">

>> <xsl:apply-templates select="@*|comment()" mode="#current"/>

>> </xsl:copy>

>> </xsl:template>

>>

>> <xsl:template match="svrl:*" mode="restructure">

>> <xsl:element name="{local-name()}" namespace="http://tu-dresde
n.de/vlp/schematron/hierarchical-svrl">

>> <xsl:apply-templates select="@*|comment()|node()" mode="#current"/>

>> </xsl:element>

>> </xsl:template>

>>

>> <xsl:template match="*" mode="restructure">

>> <xsl:element name="{name()}" namespace="{namespace-uri()}">

>> <xsl:apply-templates select="@*|comment()|node()" mode="#current"/>

>> </xsl:element>

>> </xsl:template>

>>

>> <xsl:template match="svrl:schematron-output" mode="restructure">

>> <xsl:element name="{local-name()}" namespace="http://tu-dresde
n.de/vlp/schematron/hierarchical-svrl">

>> <xsl:apply-templates select="@*" mode="#current"/>

>> <xsl:comment>

>> This is a restructured SVRL document, which does not comply with ISO
19757-3 Annex D grammar!

>> </xsl:comment>

>> <xsl:apply-templates select="comment()" mode="#current"/>

>> <xsl:apply-templates select="svrl:text" mode="#current"/>

>> <xsl:apply-templates select="svrl:ns-prefix-in-attribute-values"
mode="#current"/>

>> <xsl:apply-templates select="svrl:active-pattern" mode="#current"/>

>> </xsl:element>

>> </xsl:template>

>>

>> <xsl:template match="svrl:active-pattern" mode="restructure">

>> <xsl:element name="{local-name()}" namespace="http://tu-dresde
n.de/vlp/schematron/hierarchical-svrl">

>> <xsl:apply-templates select="@*|comment()" mode="#current"/>

>> <xsl:apply-templates select="*" mode="#current"/>

>> <xsl:apply-templates
select="following-sibling::svrl:fired-rule[count(preceding-sibling::svrl:acti
ve-pattern[1] | current()) = 1]"

>> mode="#current"/>

>> </xsl:element>

>> </xsl:template>

>>

>> <xsl:template match="svrl:fired-rule[@flag = 'ignore']"
mode="restructure">

>> <xsl:apply-templates mode="restructure"/>

>> </xsl:template>

>>

>> <xsl:template match="svrl:failed-assert[preceding-sibling::*[1]/@flag
= 'ignore']" mode="restructure" priority="2">

>> <xsl:apply-templates mode="restructure"/>

>> </xsl:template>

>>

>> <xsl:template
match="svrl:successful-report[preceding-sibling::*[1]/@flag = 'ignore']"
mode="restructure" priority="2">

>> <xsl:apply-templates mode="restructure"/>

>> </xsl:template>

>>

>> <xsl:template match="svrl:fired-rule[not(@role)]" mode="restructure"
priority="-1">

>> <xsl:apply-templates mode="restructure"/>

>> </xsl:template>

>>

>> <xsl:template match="svrl:fired-rule" mode="restructure">

>> <xsl:element name="{local-name()}" namespace="http://tu-dresde
n.de/vlp/schematron/hierarchical-svrl">

>> <xsl:apply-templates select="@*|comment()" mode="#current"/>

>> <xsl:variable name="next-element"
select="parent::*/following-sibling::*[1]"/>

>> <xsl:if test="$next-element/not(svrl:*)">

>> <xsl:apply-templates select="$next-element" mode="#current"/>

>> </xsl:if>

>> <xsl:apply-templates
select="following-sibling::svrl:failed-assert[count(preceding-sibling::svrl:f
ired-rule[1] | current()) = 1] |

>>

>>
following-sibling::svrl:successful-report[count(preceding-sibling::svrl:fired
-rule[1] | current()) = 1]"

>> mode="#current"/>

>> </xsl:element>

>> </xsl:template>

>> </xsl:stylesheet>

>>

>>

>> "Minimal" Input Example (SVRL):

>> (I can post the full sample if anyone wants it; I trimmed it here for
brevity.)

>>

>> <svrl:schematron-output xmlns:fx="http://tu-dresden.de/vlp
/schematron/functions"

>> xmlns:iso="http://purl.oclc.org/dsdl/schemat ron"

>> xmlns:planpro="http://www.plan-pro.org/regeln /struktur"

>> xmlns:saxon="http://saxon.sf.net/"

>> xmlns:schold="http://www.ascc.net/xml/schematron< /a>"

>> xmlns:svrl="http://purl.oclc.org/dsdl/svrl"

>> xmlns:xhtml="http://www.w3.org/1999/xhtml"

>> xmlns:xs="http://www.w3.org/2001/XMLSchema"

>> xmlns:xsd="http://www.w3.org/2001/XMLSchema"

>> xmlns:xsi="http://www.w3.org/2001/XMLSc hema-instance"

>> title="Regelbasis fCB<r PlanPro-PlaZ"

>> schemaVersion="ISO19757-3">

>> <svrl:ns-prefix-in-attribute-values uri="http://www.plan-pro.org/regeln
/struktur" prefix="planpro"/>

>> <svrl:ns-prefix-in-attribute-values uri="http://tu-dresden.de/vlp
/schematron/functions" prefix="fx"/>

>> <svrl:ns-prefix-in-attribute-values uri="http://www.w3.org/2001/XMLSc
hema-instance" prefix="xsi"/>

>> <svrl:active-pattern
document="file:/C:/Users/xyz/PlaZ/PlanPro-samples/Testdateien/Bezeichnertest2
.xml"

>> id="ID123"

>> name="test rule"

>> fpi="12345678-9ABC-DEF1-2345-6789ABCDEF12"

>> see="test"

>> planpro:workpackage="BASISOBJEKTE"

>> planpro:version="1.10.0.1">

>> <svrl:text>

>> <planpro:description xmlns="http://purl.oclc.org/dsdl/schemat ron">

>> Human readable (sometimes lengthy) description of the specific rule,
to be applied to the whole input XML file

>> </planpro:description>

>> <planpro:comment xmlns="http://purl.oclc.org/dsdl/schemat ron"/>

>> <planpro:test xmlns="http://purl.oclc.org/dsdl/schemat ron">

>> <planpro:success>human readable success message</planpro:success>

>> <planpro:error>human readable error message</planpro:error>

>> </planpro:test>

>> <planpro:output xmlns="http://purl.oclc.org/dsdl/schemat ron">PlanPro
object type</planpro:output>

>> </svrl:text>

>> </svrl:active-pattern>

>> <svrl:fired-rule context="(LST_Zustand|LST_Zustand_Ziel)/Container/*"
role="error"/>

>> <svrl:failed-assert test="false()"

>>

>> location="/*:PlanPro_Schnittstelle[namespace-uri()='http://www.plan-pro.or
g/modell/PlanPro/1.10.0.1'][1]/LST_Planung[1]/Fachdaten[1]/Ausgabe_Fachda
ten[1]/LST_Zustand_Ziel[1]/Container[1]/Anhang[1]">

>> <svrl:text>Es ist ein Fehler aufgetreten.</svrl:text>

>> <svrl:diagnostic-reference
diagnostic="guid">317691e7-6b55-428d-925b-9107f72b9bc0</svrl:diagnostic
-reference>

>> <svrl:diagnostic-reference
diagnostic="typ">Anhang</svrl:diagnostic-reference>

>> <svrl:diagnostic-reference
diagnostic="bereich">Betrachtung</svrl:diagnostic-reference>

>> <svrl:diagnostic-reference
diagnostic="aufbau">00</svrl:diagnostic-reference>

>> <svrl:diagnostic-reference
diagnostic="s1">Anhang</svrl:diagnostic-reference>

>> <svrl:diagnostic-reference diagnostic="s2">file
name</svrl:diagnostic-reference>

>> <svrl:diagnostic-reference diagnostic="s3"/>

>> <svrl:diagnostic-reference diagnostic="s4"/>

>> <svrl:diagnostic-reference diagnostic="s5"/>

>> <svrl:diagnostic-reference diagnostic="s6"/>

>> <svrl:diagnostic-reference diagnostic="s7"/>

>> </svrl:failed-assert>

>> <svrl:fired-rule context="(LST_Zustand|LST_Zustand_Ziel)/Container/*"
role="error"/>

>> <svrl:fired-rule context="(LST_Zustand|LST_Zustand_Ziel)/Container/*"
role="error"/>

>> <svrl:fired-rule context="(LST_Zustand|LST_Zustand_Ziel)/Container/*"
role="error"/>

>> <svrl:fired-rule context="(LST_Zustand|LST_Zustand_Ziel)/Container/*"
role="error"/>

>> <svrl:fired-rule context="(LST_Zustand|LST_Zustand_Ziel)/Container/*"
role="error"/>

>> <svrl:fired-rule context="(LST_Zustand|LST_Zustand_Ziel)/Container/*"
role="error"/>

>> <svrl:fired-rule context="(LST_Zustand|LST_Zustand_Ziel)/Container/*"
role="error"/>

>> <svrl:fired-rule context="(LST_Zustand|LST_Zustand_Ziel)/Container/*"
role="error"/>

>> <svrl:failed-assert test="false()"

>>

>> location="/*:PlanPro_Schnittstelle[namespace-uri()='http://www.plan-pro.or
g/modell/PlanPro/1.10.0.1'][1]/LST_Planung[1]/Fachdaten[1]/Ausgabe_Fachda
ten[1]/LST_Zustand_Ziel[1]/Container[1]/Aussenelementansteuerung[1]">

>> <svrl:text>Es ist ein Fehler aufgetreten.</svrl:text>

>> <svrl:diagnostic-reference
diagnostic="guid">bc2efe9a-a70b-4249-9c84-80636c08b093</svrl:diagnostic
-reference>

>> <svrl:diagnostic-reference
diagnostic="typ">Aussenelementansteuerung</svrl:diagnostic-reference> ;

>> <svrl:diagnostic-reference
diagnostic="bereich">Betrachtung</svrl:diagnostic-reference>

>> <svrl:diagnostic-reference
diagnostic="aufbau">01</svrl:diagnostic-reference>

>> <svrl:diagnostic-reference
diagnostic="s1">Au\xDFenelementansteuerung</svrl:diagnostic-reference&g
t;

>> <svrl:diagnostic-reference
diagnostic="s2">Gleisfreimelde-Innenanlage</svrl:diagnostic-reference&g
t;

>> <svrl:diagnostic-reference diagnostic="s3">AEA
blah</svrl:diagnostic-reference>

>> <svrl:diagnostic-reference diagnostic="s4"/>

>> <svrl:diagnostic-reference diagnostic="s5"/>

>> <svrl:diagnostic-reference diagnostic="s6"/>

>> <svrl:diagnostic-reference diagnostic="s7"/>

>> </svrl:failed-assert>

>> </svrl:schematron-output>

>>

>>

>> Desired Restructured Output (excerpt):

>>

>> <?xml version="1.0" encoding="UTF-8"?>

>> <schematron-output xmlns="http://tu-dresde
n.de/vlp/schematron/hierarchical-svrl" title="Regelbasis f\xFCr
PlanPro-PlaZ" schemaVersion="ISO19757-3"><!--

>> This is a restructured SVRL document, which does not comply with ISO
19757-3 Annex D grammar!

>> -->

>> <ns-prefix-in-attribute-values uri="http://www.plan-pro.org/regeln
/struktur" prefix="planpro"/>

>> <ns-prefix-in-attribute-values uri="http://tu-dresden.de/vlp
/schematron/functions" prefix="fx"/>

>> <ns-prefix-in-attribute-values uri="http://www.w3.org/2001/XMLSc
hema-instance" prefix="xsi"/>

>> <active-pattern xmlns:planpro="http://www.plan-pro.org/regeln
/struktur"

>>

>>
document="file:/C:/Users/xyz/PlaZ/PlanPro-samples/Testdateien/Bezeichnertest2
.xml"

>> id="ID123"

>> name="test rule"

>> fpi="12345678-9ABC-DEF1-2345-6789ABCDEF12"

>> see="test"

>> planpro:workpackage="BASISOBJEKTE"

>> planpro:version="1.10.0.1">

>> <text>

>> <planpro:description>

>> Human readable (sometimes lengthy) description of the specific rule,
to be applied to the whole input XML file

>> </planpro:description>

>> <planpro:comment/>

>> <planpro:test>

>> <planpro:success>human readable success message</planpro:success>

>> <planpro:error>human readable error message</planpro:error>

>> </planpro:test>

>> <planpro:output>PlanPro object type</planpro:output>

>> </text>

>> <fired-rule context="(LST_Zustand|LST_Zustand_Ziel)/Container/*"
role="error">

>> <failed-assert test="false()"

>>

>> location="/*:PlanPro_Schnittstelle[namespace-uri()='http://www.plan-pro.or
g/modell/PlanPro/1.10.0.1'][1]/LST_Planung[1]/Fachdaten[1]/Ausgabe_Fachda
ten[1]/LST_Zustand_Ziel[1]/Container[1]/Anhang[1]">

>> <text>Es ist ein Fehler aufgetreten.</text>

>> <diagnostic-reference
diagnostic="guid">317691e7-6b55-428d-925b-9107f72b9bc0</diagnostic-refe
rence>

>> <diagnostic-reference diagnostic="typ">Anhang</diagnostic-reference>

>> <diagnostic-reference
diagnostic="bereich">Betrachtung</diagnostic-reference>

>> <diagnostic-reference diagnostic="aufbau">00</diagnostic-reference>

>> <diagnostic-reference diagnostic="s1">Anhang</diagnostic-reference>

>> <diagnostic-reference diagnostic="s2">file name</diagnostic-reference>

>> <diagnostic-reference diagnostic="s3"/>

>> <diagnostic-reference diagnostic="s4"/>

>> <diagnostic-reference diagnostic="s5"/>

>> <diagnostic-reference diagnostic="s6"/>

>> <diagnostic-reference diagnostic="s7"/>

>> </failed-assert>

>> </fired-rule>

>> <fired-rule context="(LST_Zustand|LST_Zustand_Ziel)/Container/*"
role="error"/>

>> <fired-rule context="(LST_Zustand|LST_Zustand_Ziel)/Container/*"
role="error"/>

>> <fired-rule context="(LST_Zustand|LST_Zustand_Ziel)/Container/*"
role="error"/>

>> <fired-rule context="(LST_Zustand|LST_Zustand_Ziel)/Container/*"
role="error"/>

>> <fired-rule context="(LST_Zustand|LST_Zustand_Ziel)/Container/*"
role="error"/>

>> <fired-rule context="(LST_Zustand|LST_Zustand_Ziel)/Container/*"
role="error"/>

>> <fired-rule context="(LST_Zustand|LST_Zustand_Ziel)/Container/*"
role="error"/>

>> <fired-rule context="(LST_Zustand|LST_Zustand_Ziel)/Container/*"
role="error">

>> <failed-assert test="false()"

>>

>> location="/*:PlanPro_Schnittstelle[namespace-uri()='http://www.plan-pro.or
g/modell/PlanPro/1.10.0.1'][1]/LST_Planung[1]/Fachdaten[1]/Ausgabe_Fachda
ten[1]/LST_Zustand_Ziel[1]/Container[1]/Aussenelementansteuerung[1]">

>> <text>Es ist ein Fehler aufgetreten.</text>

>> <diagnostic-reference
diagnostic="guid">bc2efe9a-a70b-4249-9c84-80636c08b093</diagnostic-refe
rence>

>> <diagnostic-reference
diagnostic="typ">Aussenelementansteuerung</diagnostic-reference>

>> <diagnostic-reference
diagnostic="bereich">Betrachtung</diagnostic-reference>

>> <diagnostic-reference diagnostic="aufbau">01</diagnostic-reference>

>> <diagnostic-reference
diagnostic="s1">Au\xDFenelementansteuerung</diagnostic-reference>

>> <diagnostic-reference
diagnostic="s2">Gleisfreimelde-Innenanlage</diagnostic-reference>

>> <diagnostic-reference diagnostic="s3">AEA blah</diagnostic-reference>

>> <diagnostic-reference diagnostic="s4"/>

>> <diagnostic-reference diagnostic="s5"/>

>> <diagnostic-reference diagnostic="s6"/>

>> <diagnostic-reference diagnostic="s7"/>

>> </failed-assert>

>> </fired-rule>

>> </active-pattern>

>> </schematron-output>

>>

>> In short: every fired-rule has to swallow its following failed-assert
/ successful-report siblings up to the next fired-rule, and every
active-pattern has to swallow its following fired-rule group up to the
next active-pattern.

>>

>> Is there an XSLT 2.0 way that produces identical output but avoids the
apparent n^2 cost of the sibling-axis idioms above?

>>

>> Any pointer, code sketch, or "you are doing this wrong because..." is
highly welcome.

>>

>> Thanks in advance, and best regards,

>> Susanne

>>

>>

>

>

--

Dipl.-Ing.in Susanne Wunsch

Wissenschaftliche Mitarbeiterin | Research Associate

Gleichstellungsbeauftragte der FakultC$t | Equal Opportunity Commissioner

of the Faculty

Technische UniversitC$t Dresden

FakultC$t Verkehrswissenschaften "Friedrich List" | "Friedrich List"

Faculty of Transport and Traffic Sciences

Professur fC<r Verkehrprozessautomatisierung | Chair of Traffic Process

Automation

01062 Dresden

BC<ro | office Gerhart-Potthoff-Bau, POT 68a

Tel. | phone +49 351 463-36689

E-Mail | email susanne.wunsch@xxxxxxxxxxxxx

XSL-List info and archiveEasyUnsubscribe (by email)

Current Thread
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member