Re: [xsl] targeting the 'first' instance of the same element in variable structures

Subject: Re: [xsl] targeting the 'first' instance of the same element in variable structures
From: "Jean-Paul Rehr rehrjb@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 2 Jul 2024 11:04:54 -0000
At first Martin's solution  <xsl:template match="(div//head)[1]"> looked
like it would work. But then I started to test the various documents I have
to work with, in particular at the most problematic. Below is an actual
fragment, but I've put it in this Fiddle
<https://martin-honnen.github.io/cheerpj3-saxonhe12-fiddle/?code=%3C%3Fxml+ve
rsion%3D%221.0%22+encoding%3D%22utf-8%22%3F%3E%0A%3Cxsl%3Astylesheet+xmlns%3A
xsl%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2FXSL%2FTransform%22%0A++version%3D%2
23.0%22%0A++xmlns%3Axs%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema%22%0A+
+exclude-result-prefixes%3D%22%23all%22%0A++expand-text%3D%22yes%22%3E%0A++%0
A++%3Cxsl%3Atemplate+match%3D%22%28div%2F%2Fhead%29%5B1%5D%22%3E%0A++++%3Cxsl
%3Acomment%3EMatched+%7Bnode-name%28%29%7D%3C%2Fxsl%3Acomment%3E%0A++++%3Cxsl
%3Anext-match%2F%3E%0A++%3C%2Fxsl%3Atemplate%3E%0A%0A++%3Cxsl%3Aoutput+method
%3D%22xml%22+indent%3D%22no%22%2F%3E%0A%0A++%3Cxsl%3Amode+on-no-match%3D%22sh
allow-copy%22%2F%3E%0A%0A++%3Cxsl%3Atemplate+match%3D%22%2F%22+name%3D%22xsl%
3Ainitial-template%22%3E%0A++++%3Cxsl%3Acopy%3E%0A++++++%3Cxsl%3Aapply-templa
tes%2F%3E%0A++++++%3Cxsl%3Acomment%3ERun+with+%7Bsystem-property%28%27xsl%3Ap
roduct-name%27%29%7D+%7Bsystem-property%28%27xsl%3Aproduct-version%27%29%7D+a
t+%7Bcurrent-dateTime%28%29%7D%3C%2Fxsl%3Acomment%3E%0A++++%3C%2Fxsl%3Acopy%3
E%0A++%3C%2Fxsl%3Atemplate%3E%0A%0A%3C%2Fxsl%3Astylesheet%3E%0A&input=%3Croot
%3E%0A++%3Cdiv+xml%3Aid%3D%22michael-meld-dist-div-5Ehm2la0%22%3E%0A%09%09%3C
div+xml%3Aid%3D%22michael-meld-dist-div-1k784804%22+type%3D%22fulltext%22%3E%
0A%09%09%09%3Cdiv+xml%3Aid%3D%22michael-meld-dist-div-23IEC0ec%22+type%3D%22p
rologus%22%3E%0A%09%09%09%09%09%3Chead%3EPREFATIO%3Cnote+type%3D%22source%22%
3EIndicem+analyticum%2C+qui+ex+vetusta+exemplari+Ms.+in+ceteris+editionibus+h
oc+loco+legitur%2C+ad+calcem+voluminis+tomi+rejecimus.%3C%2Fnote%3E%0A%09%09%
09%09%09%3C%2Fhead%3E%0A%09%09%09%09%09%3Cp+xml%3Aid%3D%22michael-meld-dist-p
-k78i0214%22%3EQuisquis+ad+divine+pagine+lectionem+erudiendus+accedit%2C+in+p
rincipio+considerare+debet%2C+que+sit+illius+Scripture+materia%2C+circa+quam+
versatur+ejus+tractatus.+Est+autem+illius%0A%09%09%09%09%09%09principalis+mat
eria%2C+opus+restaurationis.%3C%2Fp%3E%0A%09%09%09%09%09%3Cdiv+xml%3Aid%3D%22
michael-meld-dist-div-02847i24%22+sameAs%3D%22michaelis_0001%22+type%3D%22dis
tinctio%22%3E%0A%09%09%09%09%09%09%3Chead%3EOpus+conditionis+et+restaurationi
s%3C%2Fhead%3E%0A%09%09%09%09%09%09%3Cp+xml%3Aid%3D%22michael-meld-dist-p-0M0
t4368%22%3ESunt+enim+duo+opera+%3A+opus+conditionis%2C+et+opus+restaurationis
.+Opus+conditionis+est%2C+quo+factum+est+ut+essent%2C+que+non+erant%3B+opus+r
estaurationis+est%2C+per+quod+meliorata+sunt%2C+que%0A%09%09%09%09%09%09%09pe
rierant.+Opere+conditionis+factus+est+mundus+cum+suis+elementis%3B+opere+rest
aurationis%2C+Verbi+incarnatio+cum+suis+sacramentis.+%3C%2Fp%3E%0A%09%09%09%0
9++%3C%2Fdiv%3E%0A%09%09%09++%09%3Cdiv+xml%3Aid%3D%22michael-meld-dist-div-qA
5X66Ks%22+sameAs%3D%22michaelis_0002%22+type%3D%22distinctio%22%3E%0A%09%09%0
9%09%09++%3Chead%3ESacre+Scripture+prestantia%3C%2Fhead%3E%0A%09%09%09%09%09+
+%3Cp+xml%3Aid%3D%22michael-meld-dist-p-E1v5wA1j%22%3EEx+quo+manifestum+est%2
C+quod+Scriptura+cunctis+aliis+precellit%2C+tum+materie+dignitate%2C+tum+prof
unditate%2C+et+subtilitate.+Et+si+quis+diligenter+attendit%2C+potest+perciper
e+quod+omnes%0A%09%09%09%09%09%09+artes%2C+tam+liberales%2C+quam+naturales%2C
+ei+tanquam+domine+famulantur.+%3C%2Fp%3E%0A%09%09%09%09++%3C%2Fdiv%3E%0A%09%
09%09%3C%2Fdiv%3E%0A%09%09%3C%2Fdiv%3E%0A%09%3C%2Fdiv%3E%0A%3C%2Froot%3E%0A&c
ode-type=XSLT&input-type=XML>.
As we can see it matched two items...it should only match the first. In
bold below are what the template matched, in red bold what should be
exclusively matched.

  <div xml:id="michael-meld-dist-div-5Ehm2la0">
    <div xml:id="michael-meld-dist-div-1k784804" type="fulltext">
      <div xml:id="michael-meld-dist-div-23IEC0ec" type="prologus">

*<head>PREFATIO<note type="source">Indicem analyticum, qui ex vetusta
exemplari Ms. in ceteris editionibus hoc loco legitur, ad
   calcem  voluminis tomi rejecimus.</note>          </head>*
          <p xml:id="michael-meld-dist-p-k78i0214">Quisquis ad divine
pagine lectionem erudiendus accedit, in principio considerare debet, que
sit illius                Scripture materia, circa quam versatur ejus
tractatus. Est autem illius
               principalis materia, opus restaurationis.</p>
          <div xml:id="michael-meld-dist-div-02847i24"
sameAs="michaelis_0001" type="distinctio">
        *     <head>Opus conditionis et restaurationis</head>*
             <p xml:id="michael-meld-dist-p-0M0t4368">Sunt enim duo opera :
opus conditionis, et opus restaurationis. Opus conditionis est, quo factum
               est ut essent, que non erant; opus restaurationis est, per
quod meliorata sunt, que
               perierant. Opere conditionis factus est mundus cum suis
elementis; opere restaurationis, Verbi incarnatio cum suis sacramentis. </p>
          </div>
          <div xml:id="michael-meld-dist-div-qA5X66Ks"
sameAs="michaelis_0002" type="distinctio">
             <head>Sacre Scripture prestantia</head>
             <p xml:id="michael-meld-dist-p-E1v5wA1j">Ex quo manifestum
est, quod Scriptura cunctis aliis precellit, tum materie dignitate, tum
                             profunditate, et subtilitate. Et si quis
diligenter attendit, potest percipere quod omnes
             artes, tam liberales, quam naturales, ei tanquam domine
famulantur. </p>
        </div>
     </div>
    </div>
   </div>


On Tue, Jul 2, 2024 at 12:41b/PM Martin Honnen martin.honnen@xxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

>
> On 02/07/2024 12:34, Jean-Paul Rehr rehrjb@xxxxxxxxx wrote:
>
> Dear XSL list,
>
> I am trying to target a specific <head> which can appear nested within a
> variable number of <div> and  possible <list> elements. In the three
> examples below I have put in red the <head> element I want to target with
> the same XSL template. In my way of thinking, it is always the first
> appearance of <head> no matter how deep or shallow it may be nested. But I
> am having trouble conceiving a path that can take into account the variable
> depth. Any thoughts about how to target this?
>
>
> You can do
>
>   <xsl:template match="(div//head)[1]">
>
> in XSLT 3 (if the processor is up to it, I think early Saxon releases like
> 9.8 or 9.9 that are no longer supported, didn't support it, but current
> releases (11 and 12) certainly do.
>
>
> fiddle link
>
<https://martin-honnen.github.io/cheerpj3-saxonhe12-fiddle/?code=%3C%3Fxml+ve
rsion%3D%221.0%22+encoding%3D%22utf-8%22%3F%3E%0A%3Cxsl%3Astylesheet+xmlns%3A
xsl%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2FXSL%2FTransform%22%0A++version%3D%2
23.0%22%0A++xmlns%3Axs%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema%22%0A+
+exclude-result-prefixes%3D%22%23all%22%0A++expand-text%3D%22yes%22%3E%0A++%0
A++%3Cxsl%3Atemplate+match%3D%22%28div%2F%2Fhead%29%5B1%5D%22%3E%0A++++%3Cxsl
%3Acomment%3EMatched+%7Bnode-name%28%29%7D%3C%2Fxsl%3Acomment%3E%0A++++%3Cxsl
%3Anext-match%2F%3E%0A++%3C%2Fxsl%3Atemplate%3E%0A%0A++%3Cxsl%3Aoutput+method
%3D%22html%22+indent%3D%22no%22+html-version%3D%225%22%2F%3E%0A%0A++%3Cxsl%3A
mode+on-no-match%3D%22shallow-copy%22%2F%3E%0A%0A++%3Cxsl%3Atemplate+match%3D
%22%2F%22+name%3D%22xsl%3Ainitial-template%22%3E%0A++++%3Cxsl%3Acopy%3E%0A+++
+++%3Cxsl%3Aapply-templates%2F%3E%0A++++++%3Cxsl%3Acomment%3ERun+with+%7Bsyst
em-property%28%27xsl%3Aproduct-name%27%29%7D+%7Bsystem-property%28%27xsl%3Apr
oduct-version%27%29%7D+at+%7Bcurrent-dateTime%28%29%7D%3C%2Fxsl%3Acomment%3E%
0A++++%3C%2Fxsl%3Acopy%3E%0A++%3C%2Fxsl%3Atemplate%3E%0A%0A%3C%2Fxsl%3Astyles
heet%3E%0A&input=%3Croot%3E%0A++++%3Cdiv%3E%0A++++++++%3Cdiv%3E%0A+++++++++++
+%3Cdiv%3E%0A++++++++++++++++++%3Chead%3ETitle%3C%2Fhead%3E+%3C%21--+nested+i
n+3+divs+--%3E%0A++++++++++++++++++%3Cp%3Esome+content%3C%2Fp%3E%0A++++++++++
+++%3C%2Fdiv%3E%0A++++++++%3C%2Fdiv%3E%0A++++++++%3Cdiv%3E%0A+++++++++++++%3C
head%3ETitle%3C%2Fhead%3E%0A++++++++++++++%3Cp%3Esome+content%3C%2Fp%3E%0A+++
++++++%3C%2Fdiv%3E%0A++++%3C%2Fdiv%3E%0A%0A++++%3Cdiv%3E%0A+++++++++++%3Cdiv%
3E%0A++++++++++++++++++%3Chead%3ETitle%3C%2Fhead%3E+%3C%21--+nested+in+2+divs
+--%3E%0A++++++++++++++++++%3Cp%3Esome+content%3C%2Fp%3E%0A++++++++++++%3C%2F
div%3E%0A++++++++++++%3Cdiv%3E%0A++++++++++++++++++%3Chead%3ETitle%3C%2Fhead%
3E%0A++++++++++++++++++%3Cp%3Esome+content%3C%2Fp%3E%0A+++++++++++%3C%2Fdiv%3
E%0A+++%3C%2Fdiv%3E%0A%0A++++%3Cdiv%3E%0A++++++++%3Cdiv%3E%0A++++++++++++%3Cd
iv%3E%0A+++++++++++++++++%3Clist%3E%0A++++++++++++++++++++++%3Chead%3ETitle%3
C%2Fhead%3E+%3C%21--+nested+in+3+divs+and+list+--%3E%0A++++++++++++++++++++++
%3Citem%3E%3C%2Fitem%3E%0A++++++++++++++++++++++%3Citem%3E%3C%2Fitem%3E%0A+++
++++++++++++++%3C%2Flist%3E%0A+++++++++++++%3C%2Fdiv%3E%0A+++++++++++++%3Cdiv
%3E%0A+++++++++++++++++%3Chead%3ETitle%3C%2Fhead%3E%0A+++++++++++++++++%3Cp%3
Esome+content%3C%2Fp%3E%0A+++++++++++++%3C%2Fdiv%3E%0A++++++++%3C%2Fdiv%3E%0A
++++%3C%2Fdiv%3E%0A%3C%2Froot%3E%0A&code-type=XSLT&input-type=XML>
>
>
>
>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/3377836> (by
> email <>)

Current Thread