Subject: Re: [xsl] creating diglot From: "Eliot Kimber ekimber@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Thu, 11 Aug 2016 14:33:30 -0000 |
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@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> 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">bBehold, 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">bMake ready the way of the .Lord!</para> > <para style="q2">Make his paths straight!bb </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 >camelbs hair and a leather belt around his waist. He ate locusts and wild >honey. <verse number="7" style="v"/>He preached, saying, bAfter 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.b</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, bYou are my beloved Son, in whom >I am well pleased.b</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, bDispela em >i gutnius bilong Jisas Krais, Pikinini Bilong God.b 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, bPikinini Bilong Manb, 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.1b3.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, bHarim. 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, bRedim rot bilong Bikpela. Stretim ol rot >bilong en.bb</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, bWanpela 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.b</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, bYu >Pikinini bilong mi. Mi laikim yu tumas. Bel bilong mi em i amamas long >yu.b</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 bGodb is bWV1WV9WV4VWWb >(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 Godbs Spirit was >hovering over the surface > of the waters. <ve/></p> > > <p> > <v id="3"/>God said, bLet there be >light,b 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 bdayb, >and the darkness he called > bnightb. 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, bLait i >mas kamap.b > 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 bDe,b na >tudak em i kolim bNait.b 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, bLet there be an >expanse in the middle of the > waters, and let it divide the waters from >the waters.b <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 bskyb. >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, >bWanpela banis i mas > kamap bilong banisim wara, bai wara i >stap long tupela hap.b 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 >bSkai.b 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, bLet the waters >under the sky be gathered > together to one place, and let the dry >land appearb; and it was so. <ve/> > <v id="10"/>God called the dry land >bearthb, and the gathering > together of the waters he called bseasb. >God saw that it was good. <ve/> > <v id="11"/>God said, bLet the earth >yield grass, herbs yielding > seeds, and fruit trees bearing fruit >after their kind, with their > seeds in it, on the earthb; 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, bWara >i stap aninit long skai i > mas i go bung long wanpela hap tasol, bai >ples drai i kamap.b Orait > ples drai i kamap. <ve/> > <v id="10"/>Dispela ples drai God i kolim >bGraun.b Na ol wara i bung > pinis long wanpela hap em i kolim >bSolwara.b God i lukim olgeta > dispela samting i gutpela, na em i >amamas. <ve/> > <v id="11"/>Bihain God i tok olsem, >bGraun i mas kamapim ol kain > kain diwai na gras na kaikai samting.b >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, bLet 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 earthb; 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=b&. 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.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] creating diglot, jim albright jim_alb | Thread | Re: [xsl] creating diglot, jim_albright@xxxxxxx |
Re: [xsl] creating diglot, jim albright jim_alb | Date | [xsl] XSLT3 - Streaming + Recursive, Mailing Lists Mail d |
Month |