Subject: Re: [xsl] Ordered union of sequences From: "Imsieke, Gerrit, le-tex" <gerrit.imsieke@xxxxxxxxx> Date: Fri, 09 Apr 2010 00:25:51 +0200 |
Am 08.04.2010 um 16:09 schrieb Michael Kay:
It seems to me that you first want to create (or imagine) a graph: in your example there are arcs k->o, o->p, p->c, a->b, b->c, etc.
Then you want to look for cycles in this graph. If any cycles exist, there is no solution to your problem.
Thanks Michael, I guess I have to finally understand the graph stuff. I will turn to the example in the 4th edition p.251 ff. for a starter.
Am 08.04.2010 um 16:47 schrieb Imsieke, Gerrit, le-tex:
[... cool, ready-made example ...]
Does that make sense?
If I include<o/> at the other position, i.e., <seq><k/><f/><z/><o/></seq>, I receive "Too many nested function calls. May be due to infinite recursion." as expected.
Gerrit, I am at early stages to understand the algorithm. The function counts the maximum number of preceding siblings on any available path and uses this as a sort key. This is some sort of creating a graph, backtracing to the beginning... which is what Michael suggested, isn't it.
<xsl:function name="my:sortkey" as="xs:integer"> <xsl:param name="input" as="element(*)" /> <xsl:param name="seen" as="xs:string*" /> <xsl:if test="name($input) = $seen"> <xsl:message terminate="yes">Element <xsl:value-of select="name($input)"/> doesn't seem to occur at a determinate position in a sequence. The circle is <xsl:value-of select="string-join((name($input), $seen), '-')"/> </xsl:message> </xsl:if> <xsl:variable name="preceding-siblings" select="$input/../../seq/*[ name() = name($input) ]/preceding-sibling::*[1]" as="element(*)*" /> <xsl:sequence select="( max( for $ps in $preceding-siblings return my:sortkey($ps, (name($input), $seen)) ) + 1, 1 )[1]"/> </xsl:function>
Thanks a lot for the most valuable input!
I need a result and the inconsistency report, so the user can fix the input. I will be looking into stopping the infinite recursion somehow.
- Michael
There is an arbitrary number of sequences, sometimescontaining itemswith the same name:
(k, o, p, c, f) (d, e, f, g) (k, f, z, o) (a, b, c, d)
I want to create a master sequence which contains every item once, preserving the original order.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Ordered union of sequence, Imsieke, Gerrit, le- | Thread | Re: [xsl] Ordered union of sequence, Michael Müller-Hille |
RE: [xsl] Grouping problem, Joel Dubien | Date | Re: [xsl] Create Table, Eric J. Bowman |
Month |