Subject: RE: [xsl] creating canonRef from flat From: "Michael Kay" <mhk@xxxxxxxxx> Date: Fri, 19 Sep 2003 16:45:49 +0100 |
> Starting with > <r>Mateus 3.1-12; Lucas 3.1-20; </r> > I want > <parallelPassage> > <canonRef book="MAT" chapter="3" verse="1" verseEnd="12"/> > <canonRef book="LUK" chapter="3" verse="1" > verseEnd="20"/> </parallelPassage> > > I have just switched to 2.0 as it seemed the regular > expressions would > help me here. Yes, this kind of "up-conversion" is an excellent use case for <xsl:analyze-string> > My thinking is to look in <r> and replace "Mateus" with > "<book>MAT</book>" > and "Lucas" with "<book>LUK</book>" ... and all the rest > and in a second pass change > > <r><book>MAT</book> 3.1-12; <book>LUK</book> 3.1-20; </r> > <r> > <book>MAT</book> > <chapter>3</chapter> > <verse>1</verse> > <verseEnd>12</verseEnd> > <book>LUK</book> > <chapter>3</chapter> > <verse>1</verse> > <verseEnd>20</verseEnd > </r> > and then put in final form in third pass > <parallelPassage> > <canonRef book="MAT" chapter="3" verse="1" verseEnd="12"/> > <canonRef book="LUK" chapter="3" verse="1" > verseEnd="20"/> </parallelPassage> > > Am I headed in the right direction? Or are there some really neat > shortcuts? I would have thought it could be done more easily than that. Something like (untested): <xsl:analyze-string select="r" regex="[^;]+"> <xsl:matching-substring> <canonRef> <xsl:analyze-string select="." regex="([^\s]+)\s([0-9]+)\.([0-9]+)\-([0-9]+)"> <xsl:matching-substring> <xsl:attribute name="book" select="my:abbrev(regex-group(1))"/> <xsl:attribute name="chapter" select="regex-group(2)"/> <xsl:attribute name="verse" select="regex-group(3)"/> <xsl:attribute name="verseEnd" select="regex-group(4)"/> </ </ </canonRef> </ </ [Correction, xsl:attribute doesn't take a select attribute - but watch this space] <xsl:function name="my:abbrev"> <xsl:param name="long-name"/> <xsl:variable name="table"> <book long="Mateus" short="MAT"/> <book long="Lucas" short="LUK"/> ... </xsl:variable> <xsl:sequence select="$table/book[@long=$long-name]/@short"/> </xsl:function> > If I use replace will I need to have it nested 66 times to > account for all > books? No, use a lookup table as above. > > > Jim Albright > 704 843-0582 > Wycliffe Bible Translators > > > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] creating canonRef from fl, Michael Kay | Thread | RE: [xsl] creating canonRef from fl, Jim Fuller |
RE: [xsl] Critique/comments sought:, Passin, Tom | Date | [xsl] Can't filter the data correct, alexscott |
Month |