Re: [xsl] complex positioning problem

Subject: Re: [xsl] complex positioning problem
From: Bruce D'Arcus <bdarcus@xxxxxxxxxxxxx>
Date: Fri, 29 Oct 2004 20:02:15 -0400
On Oct 29, 2004, at 1:32 PM, Wendell Piez wrote:

At 01:26 PM 10/29/2004, you wrote:
I'd try doing this by first processing the entire document expanding my citations into an (ad-hoc, locally-namespaced) markup format that provides each citation or footnote reference with whatever information it needs apart from the first/subsequent rule (that is, as if they were thence to be rendered all alike irrespective of their positions in the final list), and then in a second pass introduce the Ibid/Idem, op.cit., etc. based on their positions relative to one another. The rest of the second pass could be an identity transform otherwise, assuming there's nothing else it is useful for it to do.

I guess my question is how to handle that last pass; the "based on their positions relative to one another" bit.

Well in that pass, their relative positions are determinable in reference to "document order". So, for example, they could be collected in a variable in which position() could be checked, or even axes used to look at the immediate preceding one, etc.

FYI, one of my concerns is performance, since the bib references (db:biblioref) can be in all manner of places (various section level paragraphs, within footnotes, blockquotes, etc.).


Of course, XSLT 2.0 / XPath 2.0 also lets you construct sequences, which could provide an even more direct way to do this, though perhaps not quite as clean.

I append your code and a bit of spec from earlier in case anyone has time today to try it (using either or any approach), noting that this sample should be extended to exhibit the requirement:

<?xml version="1.0" encoding="utf-8"?>
<article xmlns="http://docbook.org/docbook-ng";>
<info>
<title>Test</title>
</info>
<section>
<info>
<title>Introduction</title>
</info>
<para>Some citations: <citation><biblioref linkend="one"/><biblioref
linkend="two"/></citation></para>
</section>
<bibliography>
<modsCollection xmlns="http://www.loc.gov/mods/v3";>
<mods ID="one">
<name type="personal">
<namePart type="given">John</namePart>
<namePart type="family">Doe</namePart>
<role>
<roleTerm type="text">author</roleTerm>
</role>
</name>
<titleInfo>
<title>Some Title</title>
</titleInfo>
<originInfo>
<dateIssued>1999</dateIssued>
</originInfo>
</mods>
<mods ID="two">
<name type="personal">
<namePart type="given">John</namePart>
<namePart type="family">Doe</namePart>
<role>
<roleTerm type="text">author</roleTerm>
</role>
</name>
<titleInfo>
<title>Another Title</title>
</titleInfo>
<originInfo>
<dateIssued>1999</dateIssued>
</originInfo>
</mods>
</modsCollection>
</bibliography>
</article>


The most difficult one is note (footnote/endnote) style, whereby rendering of citations is determined by their relative position within the text. For example, we have:

1) First/subsequent.

On the first occurrence of a citation reference, we have one rendering. On all subsequent, we have another (shorter).

2) Ibid/Idem, op.cit.

When a parameter is switched on, then if one has the same single citation repeated immediately subsequent, then it gets rendered as "Ibid", if the same group of citations repeat, it's "Idem".

Cheers, Wendell

Cheers,
Wendell

Current Thread