xsl-list
[Top] [All Lists]

AW: Grouping in XSLT 2.0 with multiple grouping levels

2005-02-01 04:09:21
Ok, I'll try to explain the rules:

* The following elements must start a new group: 41_UeberschrG1, 
43_UeberschrG2, *_NovAo*, *_Strich*, *_Litera*, *_Sublitera*, *_Ziffer*
        (* is used as wildcard)

        Logical Structur: 41_UeberschrG1
                                |_ 43_UeberschrG2
                                        |_ *_NovAo*
                                                |_ *_Ziffer*
                                                        |_ *_Litera*
                                                                |_ *_Sublitera*
                                                                        |_ 
*_Strich*
                                
* All elements before the first element to be grouped should stay as they are
* Each grouping level is "optional". That means that there may appear an litera 
as child of
NovAo,...
* the elements 68_UnterschrL and 69_UnterschrM must not be included in any group

There are other rules, but they are a little bit difficult to explain here. But 
I am sure that I 
can adapt any solutions to my needs.
Thank you very much for your patience!

wbr,
Roman
_______________________________________

Roman Huditsch
IT and Electronic Publishing
LexisNexis ARD Orac 
Marxergasse 25
1030 Vienna
Austria 
ph: +43-1-534 52-1514
f: +43-1-534 52-140
e-mail roman(_dot_)huditsch(_at_)lexisnexis(_dot_)at
www.lexisnexis.at
 

-----Ursprüngliche Nachricht-----
Von: Michael Kay [mailto:mike(_at_)saxonica(_dot_)com] 
Gesendet: Dienstag, 1. Februar 2005 10:42
An: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Betreff: RE: [xsl] Grouping in XSLT 2.0 with multiple grouping levels

It's not clear what rules you are applying here. The first 
element that's treated differently from the others is 
<42_UeberschrG1>, and you haven't explained why. Nor have you 
explained why this element ends when you get to the 
<68_UnterschrL> element.

To tackle this, we need some kind of description of the rules 
you are applying that determine when a sequence of 
consecutive elements is dropped down a level (that is, when a 
sequence of consecutive elements is considered to form a group.)

Michael Kay
http://www.saxonica.com/

-----Original Message-----
From: Huditsch Roman [mailto:Roman(_dot_)Huditsch(_at_)lexisnexis(_dot_)at]
Sent: 01 February 2005 08:24
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Grouping in XSLT 2.0 with multiple grouping levels

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 österreich</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;">Abgabenänderungsgesetz 2004 - AbgÄG 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 Körperschaftsteuergesetz 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 Mineralölsteuergesetz 1995, das 
Kommunalsteuergesetz 1993, das Neugründungs-Förderungsgesetz, die 
Bundesabgabenordnung, das 
Abgabenverwaltungsorganisationsgesetz, das 
Zollrechts-Durchführungsgesetz, das Finanzstrafgesetz, das 
Bewertungsgesetz 1955, das Erbschafts- und 
Schenkungssteuergesetz 1955 
sowie das Bundesbahngesetz geändert werden (Abgabenänderungsgesetz 
2004 - AbgÄG 2004)</par>
                    <par class="12_PromKl_EinlSatz">Der 
Nationalrat hat 
beschlossen:</par>
                    <par class="42_UeberschrG1-">Artikel I</par>
                    <par class="43_UeberschrG2">Änderung 
des Einkommensteuergesetzes 
1988</par>
                    <par class="12_PromKl_EinlSatz">Das 
Einkommensteuergesetz 1988, 
BGBl. Nr. 400, zuletzt geändert durch das Bundesgesetz BGBl. I Nr. 
57/2004, wird wie folgt geändert:</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 
Gaststätte 
zur dortigen Konsumation eingelöst werden. Können 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 
geändert.</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 Tätigkeit und 
Aufwendungen für umfassende Umschulungsmaßnahmen, die auf eine 
tatsächliche Ausübung eines anderen Berufes abzielen. 
Aufwendungen für 
Nächtigungen sind jedoch höchstens im Ausmaß des den 
Bundesbediensteten zustehenden Nächtigungsgeldes der 
Höchststufe 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 österreich</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;">Abgabenänderungsgesetz 2004 - AbgÄG 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 Körperschaftsteuergesetz 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 Mineralölsteuergesetz 1995, das 
Kommunalsteuergesetz 1993, das Neugründungs-Förderungsgesetz, die 
Bundesabgabenordnung, das 
Abgabenverwaltungsorganisationsgesetz, das 
Zollrechts-Durchführungsgesetz, das Finanzstrafgesetz, das 
Bewertungsgesetz 1955, das Erbschafts- und 
Schenkungssteuergesetz 1955 
sowie das Bundesbahngesetz geändert werden (Abgabenänderungsgesetz 
2004 - AbgÄG 2004)</par>
                    <par class="12_PromKl_EinlSatz">Der 
Nationalrat hat 
beschlossen:</par>
                    
                    <42_UeberschrG1>
                            <titel>Artikel I</titel>
                            <43_UeberschrG2>
                                    <titel>Änderung des
Einkommensteuergesetzes 1988</titel>
                                    <par
class="12_PromKl_EinlSatz">Das Einkommensteuergesetz 1988, 
BGBl. Nr. 
400, zuletzt geändert durch das Bundesgesetz BGBl.
I Nr. 57/2004, wird wie folgt geändert:</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 Gaststätte zur 
dortigen 
Konsumation eingelöst werden. Können 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 geändert.</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 Tätigkeit und Aufwendungen für umfassende 
Umschulungsmaßnahmen, die auf eine tatsächliche Ausübung 
eines anderen 
Berufes abzielen. Aufwendungen für Nächtigungen sind jedoch 
höchstens 
im Ausmaß des den Bundesbediensteten zustehenden 
Nächtigungsgeldes der 
Höchststufe 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(_at_)saxonica(_dot_)com]
Gesendet: Dienstag, 1. Februar 2005 01:08
An: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Betreff: RE: [xsl] 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/




--~------------------------------------------------------------------
XSL-List info and archive:  
http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--




--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>