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

RE: generating id by calling template but how to use i

Subject: RE: generating id by calling template but how to use it at other places
From: Jinesh Varia <jineshresearch@xxxxxxxxx>
Date: Thu, 6 Feb 2003 17:48:24 -0800 (PST)
yahoo id maker
Roger,
Are you some kind of XML jini!
thank you very much. I am entangled in this XSL
programming since two weeks and you solved it like in
a blink.

But there are some serious issues here:

With your approach of generating perids before the
actual seperation of publication, person, pubper
elements, I feel it would not work when I have 500,000
author elements. I have an 130MB XML sheet which
contains almost 350,000 publication elements
I know you did not knew about this. Can you please
comment on this. 

Do you think I am right on this? Please correct me.

Now there are also editors along with authors. Authors
can be editors also for some publication. means
<author>Steve Lawyer</author> for pub1 can be
<editor>Steve Lawyer</editor> for pub2. but we want
to have single person element generated. While in
<pubper> we have <persontype> (1 for author, 2 for
editors) hence in our example for pub1, it shoud be
<persontype>1</persontype> and for pub2 it should be
<persontype>2</persontype> 
how can we store that information with your code then?
we have to get unique person names

ALso

You dont have a clue How much your code has helped
me!!! I have been working on this since two weeks...
thanks, roger. thank you

Jinesh

--- Roger Glover <glover_roger@xxxxxxxxx> wrote:
> Roger Glover [mailto:glover_roger@xxxxxxxxx] wrote:
> >
> > Jinesh Varia wrote:
> ----- snip -----
> > > Please comment on ###1,
> >
> > ###1 was a typo, see above.
> >
> >
> > > ###3
> > > I want to know what select statement should I
> use?
> > > I thought using a
> > >
> > > <xsl:variable name="tempperid">
> > > <xsl:call-template name="generate-author-id" />
> > > </xsl:variable>
> > >
> > > and use $tempperid everywhere. But this does not
> work
> > > since the XSL is a decraraltive language and the
> value
> > > of the variable remains the same.
> >
> > So what *I* would do instead is generate *ALL* the
> "perid"s (and
> > the "person" elements around them) in a global
> variable (see
> > above) and extract the "perid"s you need when you
> need them.
> >
> > I would be glad to work up a some demo code for
> you (being out of
> > work does give me a fair amount of free time for
> this sort of
> > thing) :-)-:.  But it is nearly midnight on a cold
> night in
> > Minnesota, so I am off to bed.  If you don't have
> any better
> > answers by (my) morning, I will be glad to see
> what I can do for you.
> 
> See demo code below.  I ran this with the version of
> Xalan-J included in
> Sun's Java J2SE 1.4.1 release.
> 
> ========================
> pubs.xml
> ================================================
> <pubs>
> <publication pubid="0002">
> <author>steve lawer</author>
> <isbn>010101010101</isbn>
> <title>How I Did That</title>
> <publisher>Been There Press</publisher>
> <copyright>2001</copyright>
> </publication>
> <publication pubid="0002">
> <author>rick maker</author>
> <isbn>010101010202</isbn>
> <title>Why I Went There</title>
> <publisher>Done That Books</publisher>
> <copyright>1998</copyright>
> </publication>
> <publication pubid="0003">
> <author>rick maker</author>
> <isbn>010101020202</isbn>
> <title>There and Back Again</title>
> <publisher>Done That Books</publisher>
> <copyright>2000</copyright>
> </publication>
> <publication pubid="0004">
> <author>rick maker</author>
> <author>steve lawer</author>
> <isbn>010102020202</isbn>
> <title>Been There, Done That: The Kareem Abdul
> Jabbar Story</title>
> <publisher>Stringbean Publications</publisher>
> <copyright>2002</copyright>
> </publication>
> </pubs>
> ================================================
> 
> ========================
> pubRegroup.xsl
> ================================================
> <xsl:transform version="1.1"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> 
> <xsl:output method="xml" indent="yes"
> xmlns:xalan="http://xml.apache.org/xalan"
> xalan:indent-amount="4"/>
> 
> <xsl:variable name="persons">
>     <xsl:apply-templates
>
select="//publication/author[not(.=preceding::author)]"
> mode="generate-person"/>
> </xsl:variable>
> 
> <!-- Similar to original "generate-author-id"
> template, but generates entire
> person element-->
> <xsl:template match="author" mode="generate-person">
>     <xsl:variable name="temp"
> select="concat('800000000',position())" />
>     <xsl:variable name="perid"
> select="substring($temp,string-length($temp)-9)"/>
>     <person perid="{$perid}">
>         <personname>
>             <xsl:value-of select="."/>
>         </personname>
>     </person>
> </xsl:template>
> 
> <!-- I had to make up "pubs" since there was not a
> top level element in the
> original XML source example -->
> <xsl:template match="pubs">
> 
> 	<!-- I had to make up "pubs2" since there was not a
> top level element in
> the original XML result example -->
>     <pubs2>
> 
>         <!-- copies the "person" elements result
> tree fragment into the
> result tree -->
>         <xsl:copy-of select="$persons"/>
>         <xsl:apply-templates select="publication"/>
>     </pubs2>
> </xsl:template>
> 
> <xsl:template match="publication">
> 
>     <!-- Same as in the original code -->
>     <publication>
>         <xsl:copy-of select="@*|*[not(self::author
> or self::editor)]"/>
>     </publication>
> 
>     <!-- calls template to create "pubper" elements,
> one per publication per
> pub author -->
>     <xsl:apply-templates select="author"/>
> </xsl:template>
> 
> <!-- creates "pubper" elements -->
> <xsl:template match="author">
>     <pubper>
> 
>         <!-- gets "pubid" from parent  -->
>         <pubid>
>             <xsl:value-of select="../@pubid"/>
>         </pubid>
> 
>         <!-- gets "perid" from "$persons" variable
> -->
>         <perid>
> 
>             <!-- Note that in XSLT 1.0 a result tree
> fragment like
> "$persons" does
>                  not automatically convert to a node
> set.  Therefore most
> processors
>                  provide an extension function for
> that purpose
>                  (like "xalan:nodeset()" below) -->
>             <xsl:value-of
>                
> xmlns:xalan="http://xml.apache.org/xalan"
> 
>
select="xalan:nodeset($persons)/person[current()=personname]/@perid"
>             />
>         </perid>
>         <persontype>1</persontype>
>     </pubper>
> </xsl:template>
> 
> 
> </xsl:transform>
> ================================================
> 
> ========================
> pubs2.xml
> ================================================
> <?xml version="1.0" encoding="UTF-8"?>
> <pubs2>
> <person perid="8000000001">
> <personname>steve lawer</personname>
> </person>
> <person perid="8000000002">
> <personname>rick maker</personname>
> </person>
> <publication pubid="0002">
> <isbn>010101010101</isbn>
> <title>How I Did That</title>
> <publisher>Been There Press</publisher>
> <copyright>2001</copyright>
> </publication>
> <pubper>
> 
=== message truncated ===


=====
-----------------------------------------------------------------
Jinesh Varia
Graduate Student, Information Systems
Pennsylvania State University
Email: jinesh@xxxxxxx
-----------------------------------------------------------------
'Self is the author of its actions.'

__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


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.