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

RE: Displaying Code Dependent on First Encounter of S

Subject: RE: Displaying Code Dependent on First Encounter of Specific Reference
From: <Jarno.Elovirta@xxxxxxxxx>
Date: Thu, 14 Oct 2004 09:21:03 +0300
code dependent
Hi,

> I'm developing a stylesheet that converts XML to html to
> display research articles. The articles contains three
> citation types, bibliographical, table call, and figure call.
> Upon encountering a table call or figure call, I would like
> to display the table or figure referred to immediately
> following the paragraph that contains the call. I want the
> table or figure to appear in the order they were referred to
> in the paragraph and I want each table or figure to only
> appear once in the outputted document. Tables and figures are
> numbered in order of their reference, though at any point you
> can refer to a table or figure that has been previously called.
>
> Citations look like this:
> <xref ref-type="bibr" rid="B1">1</xref>
> <xref ref-type="table" rid="T1">Table 1</xref>
> <xref ref-type="fig" rid="F1">Figure 1</xref>
>
> Sample Input:
>
> [A paragraph that includes a citation for Table 1.]
> [A paragraph that includes citations for Table 2, Table 1,
> Figure 1, and Table 3.]
>
> Sample Output:
>
> [A paragraph that includes a citation for Table 1.]
>
> Table 1
>
> [A paragraph that includes citations for Table 2, Table 1,
> Figure 1, and Table 3.]
>
> Table 2
> Figure 1
> Table 3
>
>  My initial thought is to create a set of keys:
> Key: Last Table Processed
> Key: Last Figure Processed
> Key: Last Table Encountered
> Key: Last Figure Encountered

How would you declare these, because keys cannot state anything about
processing, they're just indices, really.

> Since the tables and figures are numbered in order, a
> comparison of the two keys should be in order. This
> comparison should be made at the end of processing a
> paragraph. However, I'm not quite sure how I'd make such a
> comparison or even if I can use keys in that manner. I'm
> thinking I might need to generate some sort of array to keep
> track of the multiple citations encountered so that in the
> sample provided the output is (Table 2, Figure 1, Table 3)
> and not (Table 2, Table 3, Figure 1) or (Figure 1, Table 2,
> Table 3). If I were to build an array, since at this point I
> don't need to process <xref> citations of "bibr" type, those
> should be ignored. Any suggestions would be greatly
> appreciated. Thanks.

I think you're overcomplicating things, and you're thinking in terms of
procedural programming, not declarative. Just declare a key

<xsl:key name="xref" match="xref" use="concat(@ref-type, ' ', @rid)"/>

and then, when processing a paragraph

<xsl:template match="para">
  <p>
    <xsl:apply-templates/>
  </p>
  <xsl:for-each select="descendant::xref[generate-id() =
generate-id(key('xref', concat(@ref-type, ' ', @rid)))]">
    <xsl:apply-templates select="." mode="process-link"/>
  </xsl:for-each>
</xsl:template>

I.e. use Muenchian Grouping approach to check if the xref being processed is
the first one in document order.

Cheers,

Jarno

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.