[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Grouping in XSLT 2.0 with multiple grouping levels

Subject: Grouping in XSLT 2.0 with multiple grouping levels
From: "Huditsch Roman" <Roman.Huditsch@xxxxxxxxxxxxx>
Date: Tue, 1 Feb 2005 09:24:03 +0100
word break
Hi,

Ok, I'll do my best in trying to explain my use case.

I have to transform source files produced via the Upcast conversion tool
into XML files valid to a given XML Schema.
My input files have a flat and arbitrary structure.

Here is a sample input file:

<?xml version="1.0" encoding="ISO-8859-1"?>
<document>
	<part style="page: pageStyle1;">
		<section level="1">
			<heading class="02_BDGesBlatt" level="1">bundesgesetzblatt</heading>
			<par class="03_RepOesterr">f|r die republik vsterreich</par>
			<par class="04_AusgabeDaten">Jahrgang 2004 Ausgegeben am 30. Dezember 2004
Teil I</par>
			<par class="05_Kurztitel">180. Bundesgesetz: <inline style="color:
#000000;">Abgabendnderungsgesetz 2004 - AbgDG 2004</inline>
			</par>
			<par class="05_Kurztitel">(NR: GP XXII RV 686 AB 734 S. 89. BR: 7160 AB
7184 S. 717.)</par>
			<par class="05_Kurztitel">[CELEX-Nr.: 32003L0030, 32003L0096]</par>
			<par class="11_Titel" style="color: #000000; ">180. Bundesgesetz, mit dem
das Einkommensteuergesetz 1988, das Kvrperschaftsteuergesetz 1988, das
Umgr|ndungssteuergesetz, das Umsatzsteuergesetz 1994, das Gesundheits- und
Sozialbereich-Beihilfengesetz 1996, das Internationale Steuerverg|tungsgesetz,
das Geb|hrengesetz 1957, das Konsulargeb|hrengesetz 1992, das
Investmentfondsgesetz 1993, das EU-Quellensteuergesetz, das
EG-Amtshilfegesetz, das Normverbrauchsabgabegesetz, das
Mineralvlsteuergesetz 1995, das Kommunalsteuergesetz 1993, das
Neugr|ndungs-Fvrderungsgesetz, die Bundesabgabenordnung, das
Abgabenverwaltungsorganisationsgesetz, das Zollrechts-Durchf|hrungsgesetz, das
Finanzstrafgesetz, das Bewertungsgesetz 1955, das Erbschafts- und
Schenkungssteuergesetz 1955 sowie das Bundesbahngesetz gedndert werden
(Abgabendnderungsgesetz 2004 - AbgDG 2004)</par>
			<par class="12_PromKl_EinlSatz">Der Nationalrat hat beschlossen:</par>
			<par class="42_UeberschrG1-">Artikel I</par>
			<par class="43_UeberschrG2">Dnderung des
Einkommensteuergesetzes 1988</par>
			<par class="12_PromKl_EinlSatz">Das Einkommensteuergesetz 1988, BGBl.
Nr. 400, zuletzt gedndert durch das Bundesgesetz BGBl. I Nr. 57/2004, wird wie
folgt gedndert:</par>
			<par class="21_NovAo1">1. In ' 3 Abs. 1 Z 17 wird folgender Satz
angef|gt:</par>
			<par class="23_Satz_(nach_Novao)">"Gutscheine f|r Mahlzeiten bleiben bis zu
einem Wert von 4,40 Euro pro Arbeitstag steuerfrei, wenn die Gutscheine nur am
Arbeitsplatz oder in einer nahe gelegenen Gaststdtte zur dortigen Konsumation
eingelvst werden. Kvnnen die Gutscheine auch zur Bezahlung von Lebensmitteln
verwendet werden, die nicht sofort konsumiert werden m|ssen, sind sie bis zu
einem Betrag von 1,10 Euro pro Arbeitstag steuerfrei."</par>
			<par class="14_Abs">In der Novelle 1839 wird der Inhalt nich
gedndert.</par>
			<par class="22_NovAo2">2. In ' 4 Abs. 4 Z 5 tritt an die Stelle der
Wortfolge <inline class="992_Normal">"der Finanzlandesdirektion"</inline> die
Wortfolge <inline class="992_Normal">"des Finanzamtes Wien
1/23"</inline>.</par>
			<par class="21_NovAo1">3. ' 4 Abs. 4 Z 7 lautet:</par>
			<par class="52_Ziffer_e1">"7.Aufwendungen f|r Aus- und
Fortbildungsma_nahmen im Zusammenhang mit der vom Steuerpflichtigen ausge|bten
oder einer damit verwandten beruflichen Tdtigkeit und Aufwendungen f|r
umfassende Umschulungsma_nahmen, die auf eine tatsdchliche Aus|bung eines
anderen Berufes abzielen. Aufwendungen f|r Ndchtigungen sind jedoch hvchstens
im Ausma_ des den Bundesbediensteten zustehenden Ndchtigungsgeldes der
Hvchststufe bei Anwendung des ' 13 Abs. 7 der Reisegeb|hrenvorschrift zu
ber|cksichtigen."</par>
			<par class="68_UnterschrL" xml:lang="en" style="word-break-inside:
hyphenate; ">Fischer</par>
			<par class="68_UnterschrL" xml:lang="en" style="word-break-inside:
hyphenate; ">Sch|ssel</par>
		</section>
	</part>
</document>


Ok, so far so good. Having such an input file, I need to group various
elements (with <xsl:for-each-group starting-with>).

At the end I would like to get a file like:

<document>
	<part style="page: pageStyle1;">
		<section level="1">
			<heading class="02_BDGesBlatt" level="1">bundesgesetzblatt</heading>
			<par class="03_RepOesterr">f|r die republik vsterreich</par>
			<par class="04_AusgabeDaten">Jahrgang 2004 Ausgegeben am 30. Dezember 2004
Teil I</par>
			<par class="05_Kurztitel">180. Bundesgesetz: <inline style="color:
#000000;">Abgabendnderungsgesetz 2004 - AbgDG 2004</inline>
			</par>
			<par class="05_Kurztitel">(NR: GP XXII RV 686 AB 734 S. 89. BR: 7160 AB
7184 S. 717.)</par>
			<par class="05_Kurztitel">[CELEX-Nr.: 32003L0030, 32003L0096]</par>
			<par class="11_Titel" style="color: #000000; ">180. Bundesgesetz, mit dem
das Einkommensteuergesetz 1988, das Kvrperschaftsteuergesetz 1988, das
Umgr|ndungssteuergesetz, das Umsatzsteuergesetz 1994, das Gesundheits- und
Sozialbereich-Beihilfengesetz 1996, das Internationale Steuerverg|tungsgesetz,
das Geb|hrengesetz 1957, das Konsulargeb|hrengesetz 1992, das
Investmentfondsgesetz 1993, das EU-Quellensteuergesetz, das
EG-Amtshilfegesetz, das Normverbrauchsabgabegesetz, das
Mineralvlsteuergesetz 1995, das Kommunalsteuergesetz 1993, das
Neugr|ndungs-Fvrderungsgesetz, die Bundesabgabenordnung, das
Abgabenverwaltungsorganisationsgesetz, das Zollrechts-Durchf|hrungsgesetz, das
Finanzstrafgesetz, das Bewertungsgesetz 1955, das Erbschafts- und
Schenkungssteuergesetz 1955 sowie das Bundesbahngesetz gedndert werden
(Abgabendnderungsgesetz 2004 - AbgDG 2004)</par>
			<par class="12_PromKl_EinlSatz">Der Nationalrat hat beschlossen:</par>

			<42_UeberschrG1>
				<titel>Artikel I</titel>
				<43_UeberschrG2>
					<titel>Dnderung des Einkommensteuergesetzes 1988</titel>
					<par class="12_PromKl_EinlSatz">Das Einkommensteuergesetz 1988, BGBl.
Nr. 400, zuletzt gedndert durch das Bundesgesetz BGBl. I Nr. 57/2004, wird wie
folgt gedndert:</par>
					<NovAo>
						<absatz>1. In ' 3 Abs. 1 Z 17 wird folgender Satz angef|gt:</absatz>
						<23_Satz_(nach_Novao)>"Gutscheine f|r Mahlzeiten bleiben bis zu einem
Wert von 4,40 Euro pro Arbeitstag steuerfrei, wenn die Gutscheine nur am
Arbeitsplatz oder in einer nahe gelegenen Gaststdtte zur dortigen Konsumation
eingelvst werden. Kvnnen die Gutscheine auch zur Bezahlung von Lebensmitteln
verwendet werden, die nicht sofort konsumiert werden m|ssen, sind sie bis zu
einem Betrag von 1,10 Euro pro Arbeitstag steuerfrei."</23_Satz_(nach_Novao)>
					</NovAo>
					<par class="14_Abs">In der Novelle 1839 wird der Inhalt nich
gedndert.</par>
					<NovAo>
						<absatz>2. In ' 4 Abs. 4 Z 5 tritt an die Stelle der Wortfolge <inline
class="992_Normal">"der Finanzlandesdirektion"</inline> die Wortfolge <inline
class="992_Normal">"des Finanzamtes Wien 1/23"</inline>.</absatz>
					</NovAo>
					<NovAo>
						<absatz>3. ' 4 Abs. 4 Z 7 lautet:</absatz>
						<52_Ziffer_e1>"7.Aufwendungen f|r Aus- und Fortbildungsma_nahmen im
Zusammenhang mit der vom Steuerpflichtigen ausge|bten oder einer damit
verwandten beruflichen Tdtigkeit und Aufwendungen f|r umfassende
Umschulungsma_nahmen, die auf eine tatsdchliche Aus|bung eines anderen Berufes
abzielen. Aufwendungen f|r Ndchtigungen sind jedoch hvchstens im Ausma_ des
den Bundesbediensteten zustehenden Ndchtigungsgeldes der Hvchststufe bei
Anwendung des ' 13 Abs. 7 der Reisegeb|hrenvorschrift zu
ber|cksichtigen."<52_Ziffer_e1>
					</NovAo>
				</43_UeberschrG2>
			</42_UeberschrG1>
			<par class="68_UnterschrL" xml:lang="en" style="word-break-inside:
hyphenate; ">Fischer</par>
			<par class="68_UnterschrL" xml:lang="en" style="word-break-inside:
hyphenate; ">Sch|ssel</par>
		</section>
	</part>
</document>



All elements in the source document containing "NovAo" should be treated
identically.
There are of course other elements which need to be grouped, but for a better
understanding
I have put them out of the source file.

I managed to come up with a working version, but I am sure there are a lot of
problems in it.
I decided to split up the entire transformation in multiple stylesheets where
each of them groups
another element. I thought that would be best because I can't rely on any
element existing in my
source document and some elements like "NovAo" need special care.

How would you deal with such requirements?
How should a stylesheet doing such transformations look like?
I first tried to write a template for "section" and do the grouping there,
but that didn't work out, since I don't want every child element to be
grouped...

Every help is very much appreciated!

I first wanted to send you one of my stylesheets,
but I am doing other element conversions as well, so it
wouldn't produce the simple structure shown above...

wbr,
Roman

> -----Urspr|ngliche Nachricht-----
> Von: Michael Kay [mailto:mike@xxxxxxxxxxxx]
> Gesendet: Dienstag, 1. Februar 2005 01:08
> An: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Betreff: RE:  from start tag A to end tag B
>
> > Is there any resource showing some sophisticated grouping solutions
> > using XSLT 2.0?
> > I just take a look at Michael's XSLT 2.0 reference, but I need some
> > examples with a more complex and felxible structure...
>
> I think you need to post a problem and we'll see what we can
> do to provide a solution.
>
> I could write an essay on recursive grouping but it might be
> addressing a problem that you haven't got...
>
> Michael Kay
> http://www.saxonica.com/

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.