xsl-list
[Top] [All Lists]

Re: [xsl] creating diglot

2016-08-11 09:33:38
Given the flat nature of the input I would be tempted to use
for-each-group to synthesize a more normal hierarchy for the input source
and then use that result as input to the language-to-language matching and
final output production phases.

For example, 


<xsl:template match="/">
<!-- Make a hierarchical structure that will be easier to process and
     that can also be massaged or augmented as needed to make subsequent
     processing easier.
  -->
  <xsl:variable name="hierarchical" as="node()*">
    <xsl:apply-templates select="book" mode="make-hierarchical"/>
  </xsl:variable/>
<!-- Now generate the final output: -->
  <xsl:apply-templates select="$hierarchical"/>
</xsl:template>

<xsl:template mode="make-hierarchical" match="book">
  <book>
    <xsl:call-template name="setup-book-metadata"/>
    <xsl:for-each-group select="*" group-starting-with="chapter">
      <xsl:choose>
        <xsl:when test="./self::chapter">
          <xsl:call-template select="make-chapter">
            <xsl:with-param name="input" select="current-group()"
as="node()*"/>
          </xsl:call-template>
        <xsl:otherwise>
           <xsl:sequence select="current-group"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:for-each-group>
   </book>
</xsl:template>

The default-mode templates can then be more normal hierarchy-handling
templates, making the rendition generation task easier to manage.

The template make-chapter can then use for-each-group to further organize
the content and so on.

This approach also helps to isolate the logic of handling each level,
making the code a bit more modular and, hopefully, a little easier to
write and validate.

As part of this pre-processing you could also add IDs or other markers to
the elements you need to correlate to make the follow-on language-matching
task easier or more reliable.

For example, if the correlation is based on more complex business logic
than just position, you could implement a function that constructs a
unique ID for a given element based on whatever the business logic is,
whatever that might be.

Cheers,

Eliot
--
Eliot Kimber
http://contrext.com
 






On 8/10/16, 6:37 PM, "jim_albright(_at_)wycliffe(_dot_)org"
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:

saxon960HE   xslt 2.0

I would like to produce a diglot of scripture. That means two languages
in two columns per page.
I have processed each text to identify the chapter and verse in
attributes cvStart and cvEnd. I can fill in ones without attributes if
needed.


Assuming that English is secondary

<?xml version="1.0" encoding="UTF-8"?><usx version="2.0">
 <book code="MRK" style="id">41-MRK-web.sfm World English Bible British
Edition (WEBBE)</book>
 <para style="ide">UTF-8</para>
 <para style="h">Mark</para>
 <para style="mt1">Mark</para>
 <chapter number="1" style="c"/>
 <para style="p" cvStart="1.1" cvEnd="1.2">
   <verse number="1" style="v"/>The beginning of the Good News of Jesus
Christ, the Son of God. <verse number="2" style="v"/>As it is written in
the prophets,</para>
 <para style="q1">“Behold, I send my messenger before your face,</para>
 <para style="q2">who will prepare your way before you: </para>
 <para style="q1" cvStart="1.3">
   <verse number="3" style="v"/>the voice of one crying in the
wilderness,</para>
 <para style="q2">‘Make ready the way of the .Lord!</para>
 <para style="q2">Make his paths straight!’” </para>
 <para style="p" cvStart="1.4" cvEnd="1.8">
   <verse number="4" style="v"/>John came baptising in the wilderness
and preaching the baptism of repentance for forgiveness of sins. <verse
number="5" style="v"/>All the country of Judea and all those of Jerusalem
went out to him. They were baptised by him in the Jordan river,
confessing their sins. <verse number="6" style="v"/>John was clothed with
camel’s hair and a leather belt around his waist. He ate locusts and wild
honey. <verse number="7" style="v"/>He preached, saying, “After me comes
he who is mightier than I, the thong of whose sandals I am not worthy to
stoop down and loosen. <verse number="8" style="v"/>I baptised you in
water, but he will baptise you in the Holy Spirit.”</para>
 <para style="p" cvStart="1.9" cvEnd="1.11">
   <verse number="9" style="v"/>In those days, Jesus came from Nazareth
of Galilee, and was baptised by John in the Jordan. <verse number="10"
style="v"/>Immediately coming up from the water, he saw the heavens
parting, and the Spirit descending on him like a dove. <verse number="11"
style="v"/>A voice came out of the sky, “You are my beloved Son, in whom
I am well pleased.”</para>
 <para style="p" cvStart="1.12" cvEnd="1.13">
...


And Tok Pisin is primary

<?xml version="1.0" encoding="UTF-8"?><usx version="2.0">
 <book code="MRK" style="id">Tok Pisin Bible</book>
 <para style="ide">65001 - Unicode (UTF-8)</para>
 
<para style="mt1">Mak i raitim</para>
 <para style="imt1">Tok i go pas</para>
 <para style="ip">Namba wan tok bilong buk Mak i tok olsem, “Dispela em
i gutnius bilong Jisas Krais, Pikinini Bilong God.” Na long dispela buk
yumi lukim Jisas em i man i gat strong na namba bilong mekim olkain wok.
Yumi lukim strong na namba bilong en long taim em i skulim ol manmeri na
long taim em i rausim ol spirit nogut na long taim em i lusim sin bilong
ol manmeri. Jisas i kolim em yet olsem, “Pikinini Bilong Man”, na em i
tok olsem em i kam bilong givim laip bilong em yet bilong baim bek planti
manmeri (10.45).</para>
 <para style="ip">Mak i stori planti long wok bilong Jisas, tasol em i
no stori planti long ol toktok Jisas i bin mekim bilong skulim ol
manmeri. Pastaim Mak i stori long wok bilong Jon bilong Baptais na long
Jisas i kisim baptais na Satan i traim em. Bihain yumi lukim Jisas i
marimari long ol man i karim ol kain kain hevi, na em i skulim ol.
Pastaim ol disaipel i no klia tumas long as bilong ol samting Jisas i
mekim, tasol isi isi ol i kisim save long em.</para>
 <para style="ip">Yumi lukim tu ol man i kamap birua bilong Jisas na ol
i givim planti hevi long em. Na long las hap bilong Gutnius em i raitim,
Mak i stori long Jisas i dai na i kirap bek.</para>
 <chapter number="1" style="c"/>
 <para style="ms1">Jisas i kam bilong tokim ol manmeri long kingdom
bilong God</para>
 <para style="s2">(Sapta 1.1—3.6)</para>
 <para style="s1">Jon Bilong Baptais i autim tok</para>
 <para style="r">(Matyu 3.1-12 na Luk 3.1-9 na 3.15-17 na Jon
1.19-28)</para>
 <para style="p" cvStart="1.1">
   <verse number="1" style="v"/>Dispela em i gutnius bilong Jisas Krais,
Pikinini Bilong God.</para>
 <para style="p" cvStart="1.2" cvEnd="1.3">
   <verse number="2" style="v"/>Dispela gutnius em i kamap pastaim olsem
profet Aisaia i bin raitim, “Harim. Bai mi salim wanpela man bilong autim
tok bilong mi, na em i go paslain long yu. Na em bai i redim rot bilong
yu. <verse number="3" style="v"/>Long ples i no gat man, maus bilong
wanpela man i singaut olsem, ‘Redim rot bilong Bikpela. Stretim ol rot
bilong en.’”</para>
 <para style="p" cvStart="1.4" cvEnd="1.5">
  <verse number="4" style="v"/>Jon, dispela man bilong givim baptais, em
i kamap long ples i no gat man, na em i autim tok long ol manmeri i mas
tanim bel na kisim baptais, na bai God i lusim sin bilong ol. <verse
number="5" style="v"/>Na olgeta Judia na olgeta manmeri bilong Jerusalem
ol i go long Jon. Na ol i autim sin bilong ol, na Jon i baptaisim ol long
wara Jordan.</para>
 <para style="p" cvStart="1.6" cvEnd="1.8">
   <verse number="6" style="v"/>Jon hani bilong bus. <verse number="7"
style="v"/>Em i autim tok olsem, “Wanpela man i kam bihain long mi, na
strong bilong en i winim strong bilong mi. Mi no gutpela man inap long mi
brukim skru na lusim string i pasim su bilong em. <verse number="8"
style="v"/>Mi  save baptaisim yupela long wara. Tasol em bai i baptaisim
yupela long Holi Spirit.”</para>
 <para style="s1">Jon i baptaisim Jisas</para>
 <para style="r">(Matyu 3.13-17 na Luk 3.21-22)</para>
 <para style="p" cvStart="1.9" cvEnd="1.11">
   <verse number="9" style="v"/>Long dispela taim Jisas i lusim taun
Nasaret long distrik Galili na i kam. Na Jon i baptaisim em long wara
Jordan. <verse number="10" style="v"/>Na Jisas i lusim wara na i kam
antap, na wantu em i lukim heven i op, na Holi Spirit i kam daun long em
olsem wanpela bilong ol dispela pisin ol i kolim balus. <verse
number="11" style="v"/>Na long heven wanpela maus i singaut olsem, “Yu
Pikinini bilong mi. Mi laikim yu tumas. Bel bilong mi em i amamas long
yu.”</para>
 <para style="s1">Satan i traim Jisas</para>
 <para style="r">(Matyu 4.1-11 na Luk 4.1-13)</para>
 <para style="p" cvStart="1.12" cvEnd="1.13">
   <verse number="12" style="v"/>Na long dispela taim stret Holi Spirit
i salim Jisas i go long ples i no gat man. <verse number="13"
style="v"/>Na  Jisas i stap long ples i no gat man inap long 40 de, na
Satan i traim em. Em i stap wantaim ol wel abus. Na ol ensel i helpim
em.</para>
.....

Desired output (note this was done for Genesis by hand so content won't
match)
<?xml version="1.0" encoding="UTF-8"?>

<book id="GEN">

       <div class="group">

               <div class="secondary">

                       <id id="GEN">World English Bible (WEB) </id>

                       <ide charset="UTF-8"/>

                       <h>Genesis </h>

                       <toc level="1">The First Book of Moses, Commonly
Called Genesis </toc>

                       <toc level="2">Genesis </toc>

                       <toc level="3">Gen </toc>

                       <p sfm="mt" style="Book Title" level="2">The
First Book of Moses, </p>

                       <p sfm="mt" style="Book Title" level="3">Commonly
Called </p>

                       <p sfm="mt" style="Book Title">Genesis </p>
               </div>

               <div class="primary">

                       <id id="GEN">Tok Pisin Bible </id>

                       <ide charset="65001">- Unicode (UTF-8)</ide>

                       <p sfm="mt" style="Book Title">Stat bilong Olgeta
Samting </p>

                       <p sfm="mt" style="Book Title" level="2">o </p>

                       <p sfm="mt" style="Book Title" level="2">Jenesis
</p>

                       <p sfm="imt" style="Intro Title Main">Tok i go
pas </p>

                       <p sfm="ip" style="Intro Paragraph">Dispela buk i
stori long as o stat
                               bilong olgeta samting. Em i stori long as
bilong skai na graun, na
                               em i stori tu long stat bilong ol manmeri
na long as bilong ol sin
                               na hevi na pen i stap long dispela graun.
Em i stori long rot God
                               yet i makim bilong wok wantaim yumi
manmeri bilong dispela graun. </p>

                       <p sfm="ip" style="Intro Paragraph">Yumi inap
brukim dispela buk long tupela
                               bikpela hap. </p>

                       <p sfm="ip" style="Intro Paragraph">1) Sapta
1-11. Dispela hap i stori long
                               God i wokim skai na graun, na em i stori
tu long ol samting i bin
                               kamap bipo yet, taim ol manmeri i kamap
long graun. I gat ol stori
                               bilong Adam tupela Iv, na bilong Kein na
Abel. Na tu dispela hap
                               bilong buk i stori long Noa na long
bikpela tait i bin kamap long
                               graun, na long taua bilong Babel. </p>

                       <p sfm="ip" style="Intro Paragraph">2) Sapta
12-50. Dispela ol sapta i stori
                               long ol tumbuna bilong ol lain Israel.
Namba wan tumbuna em Abraham.
                               Abraham i bin aninit tru long laik bilong
God na em i kamap olsem
                               piksa bilong ol manmeri i bilip tru long
God. Dispela hap i stori tu
                               long Aisak na long pikinini bilong en
Jekop wantaim ol 12-pela
                               pikinini man bilong em. Dispela man Jekop
em i kisim narapela nem
                               Israel, na ol 12-pela pikinini man bilong
en i bin kamapim ol
                               12-pela lain bilong Israel. Planti sapta
long dispela hap bilong buk
                               i stori long Josep, em wanpela pikinini
bilong Jekop. Ol i soim klia
                               ol samting i bin kamap bilong mekim ol
lain tumbuna bilong ol Israel
                               i go i stap long kantri Isip. </p>

                       <p sfm="ip" style="Intro Paragraph">I gat planti
stori bilong ol manmeri i
                               stap insait long dispela buk, tasol namba
wan samting dispela buk i
                               tok long en, em ol samting God yet i bin
mekim. Pastaim God yet i
                               bin wokim olgeta samting, na bihain, taim
ol manmeri i stat long
                               mekim ol pasin nogut, God i mekim save
long ol na em i larim ol lain
                               bilong Noa tasol i stap. Na bihain gen,
God i makim Abraham na em i
                               promis long mekim gut long Abraham na
long ol lain tumbuna bilong
                               en. Dispela buk i stori moa yet long God.
Em i Papa tru bilong ol
                               manmeri, na em i save skelim pasin bilong
ol na mekim save long ol
                               lain i save mekim rong. Na em i save
bosim gut na lukautim ol
                               manmeri i aninit long em. Dispela buk i
stori long bilip bilong ol
                               manmeri bilong bipo tru, bai ol lain i
kamap bihain, ol tu i ken
                               ritim na i stap strong long bilip. </p>
               </div>
       </div>

       <div class="group">

               <div class="secondary">

                       <p>
                               <v id="1"/>In the beginning, God <f
caller="+">The Hebrew word
                                       rendered “God” is “אֱלֹהִ֑ים”
(Elohim).</f> created the
                               heavens and the earth. <ve/>
                               <v id="2"/>The earth was formless and
empty. Darkness was on the
                               surface of the deep and God’s Spirit was
hovering over the surface
                               of the waters. <ve/></p>

                       <p>
                               <v id="3"/>God said, “Let there be
light,” and there was light. <ve/>
                               <v id="4"/>God saw the light, and saw
that it was good. God divided
                               the light from the darkness. <ve/>
                               <v id="5"/>God called the light “day”,
and the darkness he called
                               “night”. There was evening and there was
morning, the first day.
                               <ve/></p>
               </div>

               <div class="primary">

                       <c id="1"/>

                       <p sfm="ms" style="Section Head Major">God i
mekim kamap olgeta samting </p>

                       <p sfm="mr" style="Section Range">(Sapta 1-2) </p>

                       <s>Stori bilong God i mekim kamap olgeta samting
</s>

                       <p>
                               <v id="1"/>Bipo bipo tru God i
                               mekim kamap skai na graun na olgeta
samting i stap long en. <ve/>
                               <v id="2"/>Tasol graun i no bin i stap
                               olsem yumi save lukim nau. Nogat. Em i
stap nating na i narakain
                               tru. Tudak i karamapim bikpela wara na
spirit bilong God i go i kam
                               antap long en. <ve/>
                               <v id="3"/>Na God i tok olsem, “Lait i
mas kamap.”
                               Orait lait i kamap. <ve/>
                               <v id="4"/>God i lukim lait i gutpela, na
em i amamas. Na em i
                               brukim tudak na tulait. <ve/>
                               <v id="5"/>Tulait em i kolim “De,” na
tudak em i kolim “Nait.” Nait
                               i go pinis na moning i kamap. Em i de
namba wan. <ve/></p>
               </div>
       </div>

       <div class="group">

               <div class="secondary">

                       <p>
                               <v id="6"/>God said, “Let there be an
expanse in the middle of the
                               waters, and let it divide the waters from
the waters.” <ve/>
                               <v id="7"/>God made the expanse, and
divided the waters which were
                               under the expanse from the waters which
were above the expanse; and
                               it was so. <ve/>
                               <v id="8"/>God called the expanse “sky”.
There was evening and there
                               was morning, a second day. <ve/></p>
               </div>

               <div class="primary">

                       <p>
                               <v id="6-7"/>Bihain God i tok olsem,
“Wanpela banis i mas
                               kamap bilong banisim wara, bai wara i
stap long tupela hap.” Orait
                               dispela banis i kamap. God i mekim
dispela banis i kamap bilong
                               banisim wara antap na wara daunbilo. <ve/>
                               <v id="8"/>Na dispela banis em i kolim
“Skai.” Nait i go pinis na
                               moning i kamap. Em i de namba 2. <ve/></p>
               </div>
       </div>

       <div class="group">

              <div class="secondary">

                       <p>
                               <v id="9"/>God said, “Let the waters
under the sky be gathered
                               together to one place, and let the dry
land appear”; and it was so. <ve/>
                               <v id="10"/>God called the dry land
“earth”, and the gathering
                               together of the waters he called “seas”.
God saw that it was good. <ve/>
                               <v id="11"/>God said, “Let the earth
yield grass, herbs yielding
                               seeds, and fruit trees bearing fruit
after their kind, with their
                               seeds in it, on the earth”; and it was
so. <ve/>
                               <v id="12"/>The earth yielded grass,
herbs yielding seed after their
                               kind, and trees bearing fruit, with their
seeds in it, after their
                               kind; and God saw that it was good. <ve/>
                               <v id="13"/>There was evening and there
was morning, a third day.
                               <ve/></p>
               </div>

               <div class="primary">

                       <p>
                               <v id="9"/>Bihain God i tok olsem, “Wara
i stap aninit long skai i
                               mas i go bung long wanpela hap tasol, bai
ples drai i kamap.” Orait
                               ples drai i kamap. <ve/>
                               <v id="10"/>Dispela ples drai God i kolim
“Graun.” Na ol wara i bung
                               pinis long wanpela hap em i kolim
“Solwara.” God i lukim olgeta
                               dispela samting i gutpela, na em i
amamas. <ve/>
                               <v id="11"/>Bihain God i tok olsem,
“Graun i mas kamapim ol kain
                               kain diwai na gras na kaikai samting.”
Orait dispela samting i
                               kamap. <ve/>
                               <v id="12"/>Ol kain kain diwai na gras na
kaikai samting i kamap
                               long graun. God i lukim olgeta dispela
samting i gutpela, na em i
                               amamas. <ve/>
                               <v id="13"/>Nait i go pinis na moning i
kamap. Em i de namba 3.
                               <ve/></p>

               </div>
       </div>

       <div class="group">
               <div class="secondary">

                       <p>
                               <v id="14"/>God said, “Let there be
lights in the expanse of sky to
                               divide the day from the night; and let
them be for signs to mark
                               seasons, days, and years; <ve/>
                               <v id="15"/>and let them be for lights in
the expanse of sky to give
                               light on the earth”; and it was so. <ve/>
                               <v id="16"/>God made the two great
lights: the greater light to rule
                               the day, and the lesser light to rule the
night. He also made the
                               stars. <ve/>
                               <v id="17"/>God set them in the expanse
of sky to give light to the
                               earth, <ve/>
                               <v id="18"/>and to rule over the day and
over the night, and to
                               divide the light from the darkness. God
saw that it was good. <ve/>
                               <v id="19"/>There was evening and there
was morning, a fourth day.
                               <ve/></p>
               </div>

Resulting pdf where primary text is outside and secondary text is inside.
This is a proof of concept. I will add the verse numbers and better
formatting. I just wanted to be sure I could handle the alignment at
paragraphs correctly.
Tok Pisin is wordier so I may adjust column sizes to help minimize page
count.





My problem is how do I select text from secondary document to correspond
to the primary at paragraph level of primary document?

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
   xmlns:xs="http://www.w3.org/2001/XMLSchema";
   exclude-result-prefixes="xs"
   version="2.0">

<xsl:variable name="secondary"
select="document('../secondary/041MRK.usx')"/>

<xsl:template match="book">
   <xsl:element name="book">
       <xsl:attribute name="id" select="@code"/>
      <xsl:apply-templates select="following-sibling::para"/>
   </xsl:element>
</xsl:template>
       
<xsl:template match="para">
   <xsl:call-template name="makeGroup">
   <xsl:with-param  name="cvStart" select="@cvStart"/>
   <xsl:with-param name="cvEnd" select="@cvEnd"/>
   </xsl:call-template>
</xsl:template> 

<xsl:template name="makeGroup">
   <xsl:param name="cvStart" select="."/>
   <xsl:param name="cvEnd" select="."/>
  <xsl:element name="group">
       <xsl:element name="secondary">
           <xsl:element name="p">
               <xsl:attribute name="class" select="@style"/>
                     <xsl:value-of select="$secondary//para[@cvStart =
'1.1' ]"/>
          </xsl:element>

           <xsl:element name="p">
               <xsl:attribute name="class" select="@style"/>
<!--              <xsl:apply-templates />-->
           </xsl:element>
           
       </xsl:element>
   </xsl:element>
</xsl:template>

Problems
1.                   <xsl:value-of select="$secondary//para[10 ]"/>
correctly selects the tenth paragraph from secondary text
But      [@cvStart = '1.1' ] fails so does
                      [@cvStart = $cvStart] fails also
2. If I use <apply-templates select=….    I get into an endless loop.
There must be an easy solution to stop this.

Any help is appreciated.

Jim Albright
704-562-1529 unlimited cell
Wycliffe Bible Translators


PDF or picture available.


--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

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