[sword-devel] XSLT for OpenOffice export to OSIS Genbook
Greg Hellings
greg.hellings at gmail.com
Wed Feb 6 18:09:51 MST 2008
Daniel,
I am unable to get the .ott or a .odt of the template to open in
anything that even vaguely resembles XML format. Thus I am unable to
really test my suggestion. Since a call to <xsl:apply-templates> is
working from the same context just a few lines below - try applying
<xsl:apply-templates /> rather than using <xsl:value-of ...> if you
don't know how to make the XPath work. If I had a copy of the sample
document or access to the DOM/Schema that was being used for these
documents, then I would be able to suggest an XPath expression.
Cheers,
Greg
On Feb 6, 2008 6:48 PM, Daniel Owens <dhowens at pmbx.net> wrote:
>
> Greg,
>
> Thanks for your response.
>
> I thought the XSL looked cumbersome, but since I am at the level of trial
> and error with xsl (read: comment out and see what affects the output), I am
> relying heavily on what others have done. It may be cumbersomely written,
> but it is effective for my purposes. Feel free to offer suggestions for how
> to simplify...
>
> For the issue at hand, I didn't specify this, but I was aware that
> <xsl:value-of select="***" />
>
>
> was the culprit. I left "***" in there to remind myself and others that it
> was at that specific spot that I was needing help (a trick used by an editor
> I used to work with). My problem is I don't know how to form an XPath
> expression to get what I want. I tried several ways (trial and error) to
> find the right XPath expression but to no avail. This template is
> transforming several styles at once (all the headers which make <div>
> elements in OSIS), all beginning with text:h but with different outline
> levels and styles in OpenOffice.
>
> I would be happy to read up more on XPath expressions, but I just don't
> know where to look on this one. Any help in that regard would be
> appreciated.
>
> Daniel
>
>
>
> Greg Hellings wrote:
> Daniel,
>
> This is a very cumbersomely written XSL - I don't know why it doesn't
> use the <xsl:element> tags and such for the creation of new elements
> in the output. However, your problem is specified below.
>
> On Feb 6, 2008 10:46 AM, Daniel Owens <dhowens at pmbx.net> wrote:
>
>
> I have several genbook projects which I want to be able to export from
> OpenOffice Writer to OSIS. I downloaded the TEI package from
> http://www.tei-c.org/wiki/index.php/TEI_OpenOffice_Package and started
> playing around (I know next to nothing about XSLT except what I could glean
> from www.w3schools.com).
>
> With some modifications I was able to get a rather rough OSIS document, at
> least with valid <div> and <p> elements nested properly. I created a
> template for Writer that has custom text styles that correspond to OSIS div
> types: bookGroup, book, chapter, section, subSection. I added x-unit
> (between book and chapter) to correspond to a unit of chapters. I arranged
> these in the template in the outline numbering according to the following
> order:
>
> 1 bookGroup
> 2 x-unit
> 3 book
> 4 chapter
> 5 section
> 6 subSection
>
> The XSLT arranges the parent-child relationships between <div> elements
> based on the outline numbering order in Writer. The type attribute is easy
> enough to add, but I am having trouble getting an osisID (The text that is
> placed in the style "book," for example, which creates the division). With
> the xslt as it is now, the chapter div looks like this:
>
> <div type="chapter" osisID="***">
> <title>Chapter 1</title>
> </div>
>
> I would like it to look like this:
>
> <div type="chapter" osisID="Chapter 1">
> <title>Chapter 1</title>
> </div>
>
> How do I retrieve that text to place it in osisID?
>
> This is the relevant template (line 371 in the xsl file):
> <xsl:template name="make-section">
> <xsl:param name="current"/>
> <xsl:param name="prev"/>
> <xsl:text disable-output-escaping="yes"><div</xsl:text>
> <xsl:text> type="</xsl:text>
> <xsl:value-of select="@text:style-name" />
> <xsl:text>"</xsl:text>
> <xsl:text> osisID="</xsl:text>
> <xsl:value-of select="***" />
>
> This line above here is the culprit - as you see, it is told to output
> the value-of the string literal ***. You need to replace this with
> the XPath expression to the location that "Chapter 1" (for example) is
> being pulled from. A few lines down that is being pulled in by a call
> to <xsl:apply-templates> but here you can just substitute the XPath to
> where the text is provided in the original XML document.
>
> --Greg
>
>
>
> <xsl:text>"</xsl:text>
> <xsl:call-template name="id.attribute.literal"/>
> <xsl:text disable-output-escaping="yes">></xsl:text>
> <xsl:choose>
> <xsl:when test="$current > $prev+1">
> <title/>
> <xsl:call-template name="make-section">
> <xsl:with-param name="current" select="$current"/>
> <xsl:with-param name="prev" select="$prev+1"/>
> </xsl:call-template>
> </xsl:when>
> <xsl:otherwise>
> <title>
> <xsl:apply-templates/>
> </title>
> <xsl:variable name="this">
> <xsl:value-of select="generate-id()"/>
> </xsl:variable>
> <xsl:for-each select="key('headchildren', $this)">
> <xsl:if test="not(parent::text:h)">
> <xsl:apply-templates select="."/>
> </xsl:if>
> </xsl:for-each>
> <xsl:choose>
> <xsl:when test="$current=1">
> <xsl:apply-templates select="key('children1',
> generate-id())"/>
> </xsl:when>
> <xsl:when test="$current=2">
> <xsl:apply-templates select="key('children2',
> generate-id())"/>
> </xsl:when>
> <xsl:when test="$current=3">
> <xsl:apply-templates select="key('children3',
> generate-id())"/>
> </xsl:when>
> <xsl:when test="$current=4">
> <xsl:apply-templates select="key('children4',
> generate-id())"/>
> </xsl:when>
> <xsl:when test="$current=5">
> <xsl:apply-templates select="key('children5',
> generate-id())"/>
> </xsl:when>
> <xsl:when test="$current=6">
> <xsl:apply-templates select="key('children6',
> generate-id())"/>
> </xsl:when>
> </xsl:choose>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:template>
>
> I attached the xsl file, OpenOffice Writer template, and the exported xml.
> Sorry for such a basic question, but I'm so new to xslt that I don't even
> know where to look for an answer.
>
> Daniel
> --
> PMBX license 1502
>
> _______________________________________________
> sword-devel mailing list: sword-devel at crosswire.org
> http://www.crosswire.org/mailman/listinfo/sword-devel
> Instructions to unsubscribe/change your settings at above page
>
>
> _______________________________________________
> sword-devel mailing list: sword-devel at crosswire.org
> http://www.crosswire.org/mailman/listinfo/sword-devel
> Instructions to unsubscribe/change your settings at above page
>
>
>
> --
> PMBX license 1502
>
>
> _______________________________________________
> sword-devel mailing list: sword-devel at crosswire.org
> http://www.crosswire.org/mailman/listinfo/sword-devel
> Instructions to unsubscribe/change your settings at above page
>
More information about the sword-devel
mailing list