|
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 |