[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Creating new, distinct groups of ranges from an aggregation of individual ranges

Subject: Re: [xsl] Creating new, distinct groups of ranges from an aggregation of individual ranges
From: "Wolfgang Laun wolfgang.laun@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 18 Nov 2014 08:23:56 -0000

An example is rarely a good way of defining an algorithm, and I do have
problems understanding the transformation of the ranges. There is, for
instance the issue of the triple overlap 101-102 (ranges 1, 2 and 3) - it
hasn't been mentioned explicitly.

It seems that a list of ranges (as in the 5th range element) is merely an
alternative to having two or more tange elements.

This is how I would formulate it:

The set of input ranges numbered 1,2,...n defines n lower bounds and n
upper bounds. Output ranges are identified by non-empty, different sets of
input range numbers.

This suggests an abstract algorithm which creates a map where keys are
numbers in ranges and values are range number sets. In this map, find entry
sets with identical values and output a range given by its minimum and
maximum key values for each of them.

Not sure how to code this in XSLT 2.0, though. :-\


On 18 November 2014 06:07, Michael Friedman sumarimike@xxxxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> Greetings,
> I'm trying to use XSLT 2.0 to create a new set of grouped ranges based on
> the overlap of an aggregation of a set of non-contiguous individual ranges.
> Example:
> Given a range of numbers as an individual set:
> 1. <range>150-202</range>
> 2. <range>201-225</range>
> 3. <range>201-204</range>
> 4. <range>205-234</range>
> 5. <range>226-234, 250-260</range>
> I'm trying to produce a new grouping based on the way the groups overlap:
> 150-200 (this is where <range> 1 starts and overlaps to 2 & 3)
> 201-202 (this is where 1 & 2 overlap, and group 1 ends)
> 203-204 (this is where 2 & 3 overlap and 3 ends)
> 205-225 (this is where 4 starts and begins to overlap with 5)
> 226-234 (this is where 4 & 5 overlap and end for the first part of 5)
> 250-260 (this is where the second range in 5 exists)
> The start and end point of the individual source ranges form the
> boundaries.
> I expect to end up with a string or variable structure like:
> <finalrange>
> <range>150-200</range>
> <range>201-202</range>
> etc
> </finalrange>
> or:
> <range start="150" end="200"/>
> <range start="201" end="202"/>
> etc
> Ultimately I have to format some content in XSLFO based on the XML's
> participation in the "new" given range grouping. If you know aircraft
> effectivity, this is what I am trying to group.
> I've been using <xsl:sequence> to find all the numbers of a single range,
> so I can do compares against individual numbers in the entire range, if
> necessary. But, it seems like it may be easier to just work with the
> boundaries: the start and end points and see if a value falls within it,
> somehow, rather than iterating repetitively through enumerations of
> sequences.
> I've been searching the archives for a while and have found some evocative
> possibilities from Dimitre Novatchev and Michael Kay, but I can't quite
> find a way to work with the overlapping. I'm continuing to study their
> ranging/grouping examples, but help would be appreciated!
> Thanks,
> Michael Friedman
>   XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <-list/528976> (by
> email <>)

Current Thread