[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
[xsl] Overlapping fo:flows
Subject: [xsl] Overlapping fo:flows From: "Jacqueline Radebaugh" <jrad@xxxxxxx> Date: Fri, 29 Dec 2006 11:36:06 -0500 |
Dear All: On 11/15/2006 (archived at: www.biglist.com/lists/xsl-list/archives/200611/msg00268.html), I wrote to the list about how I would go about creating newspaper-like columns of a long list of items. The majority of the people who helped me suggested that I create the newspaper-like columns using fo:flow. By "newspaper columns," I mean that I would like the data to stream from one column to the other before breaking onto a new page. In the past, I tried to create the two columns using table coding, however, when doing this, the list of elements in the first column continued onto the next page, instead of streaming onto the second column first. The newspaper columns are supposed to be created in the first couple pages of the document using the header, footer and beginning of document "banner" (a graphical bar indicating the chapter name) of the document body. For example: header graphical banner newspaper columns rest of document footer A portion of the XML from which I want to build the columns is: <characterPositions> <characterPosition type="full concise"> <label>18-19</label> <name>Form of composition</name> <level>standard</level> <value type="concise"> <label>an</label> <name>Anthems</name> <level>standard</level> </value> <value type="concise"> <label>bd</label> <name>Ballads</name> <level>standard</level> </value> <!-- There are many, many, many more <value> elements within this <characterPosition> element --> </characterPosition> </characterPositions> A portion of my XSL-FO coding is: <xsl:template match="/"> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:rx="http://www.renderx.com/XSL/Extensions"> <fo:layout-master-set> <fo:simple-page-master master-name="even_page" page-height="11in" margin-right="1in" margin-top=".5in" margin-left="1in" margin-bottom=".5in" page-width="8.5in"> <fo:region-body margin-top=".3in" margin-bottom=".3in"/> <fo:region-before extent="8.5in" region-name="even_before"/> <fo:region-after extent=".2in" precedence="true" region-name="even_after"/> </fo:simple-page-master> <fo:simple-page-master master-name="odd_page" page-height="11in" margin-right="1in" margin-top=".5in" margin-left="1in" margin-bottom=".5in" page-width="8.5in"> <fo:region-body margin-top=".3in" margin-bottom=".3in"/> <fo:region-before extent="8.5in" region-name="odd_before"/> <fo:region-after extent=".2in" precedence="true" region-name="odd_after"/> </fo:simple-page-master> <fo:simple-page-master master-name="TwoColumns"> <fo:region-body column-count="2" column-gap="0.2in" border-top="thin solid silver" border-bottom="thin solid silver" margin="0.9in 0.4in"/> <fo:region-before extent="0.8in" display-align="after" padding="0in 0.4in 3pt"/> <fo:region-after extent="0.8in" display-align="before" padding="0.1in 0.4in 0in"/> </fo:simple-page-master> <fo:page-sequence-master master-name="Repeat-TwoColumns"> <fo:repeatable-page-master-reference master- reference="TwoColumns"/> </fo:page-sequence-master> <fo:page-sequence-master master-name="Page"> <fo:repeatable-page-master-alternatives> <fo:conditional-page-master-reference master-reference="odd_page" odd-or-even="odd" page-position="any"/> <fo:conditional-page-master-reference master-reference="even_page" odd-or-even="even" page-position="any"/> </fo:repeatable-page-master-alternatives> </fo:page-sequence-master> </fo:layout-master-set> <fo:page-sequence master-reference="Repeat-TwoColumns"> <fo:flow flow-name="xsl-region-body"> <fo:block font-size="10pt"> <xsl:apply-templates select="field/guidelines/characterPositions" mode="header"/> </fo:block> </fo:flow> </fo:page-sequence> <fo:page-sequence master-reference="Page" force-page-count="even" initial-page-number="1"> <fo:static-content flow-name="odd_before"> <fo:block text-align="right" font-weight="bold" font-size="14pt">008 - Music</fo:block> </fo:static-content> <fo:static-content flow-name="odd_after"> <fo:block> <fo:inline text-align-last="justify" font-style="italic" font-size="10pt">MARC 21 - Bibliographic <fo:leader leader-pattern="space" leader-length="25%"/>October 2006 <fo:leader leader-pattern="space" leader-length="20%"/>008 - Music - p.<fo:page-number/> </fo:inline> </fo:block> </fo:static-content> <fo:static-content flow-name="even_before"> <fo:block text-align="left" font-weight="bold" font-size="14pt">008 - Music</fo:block> </fo:static-content> <fo:static-content flow-name="even_after"> <fo:block> <fo:inline text-align-last="justify" font-style="italic" font-size="10pt">008 - Music - p.<fo:page-number/> <fo:leader leader-pattern="space" leader-length="25%"/>October 2006 <fo:leader leader-pattern="space" leader-length="25%"/>MARC 21 - Bibliographic</fo:inline> </fo:block> </fo:static-content> <fo:flow flow-name="xsl-region-body"> <fo:block font-size="10pt"> <xsl:apply-templates/> </fo:block> </fo:flow> </fo:page-sequence> </fo:root> </xsl:template> The XSL-FO that I reference in the Repeat-TwoColumns flow is: <xsl:template match="characterPositions" mode="header"> <fo:block space-before="2em"> <fo:table table-layout="fixed" width="100%"> <fo:table-column column-width="100em"/> <fo:table-body> <fo:table-row> <fo:table-cell> <fo:block font-weight="bold"> <xsl:text>Character Positions (008/18-34 and 006/01-17)</xsl:text> </fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> <xsl:variable name="characterPositionCount" select="count(characterPosition) div 2+1"/> <fo:table table-layout="fixed" width="100%"> <fo:table-column column-width="27em"/> <fo:table-column column-width="60em"/> <fo:table-body> <fo:table-row> <fo:table-cell> <fo:block> <fo:table table-layout="fixed" width="40%"> <fo:table-column column-width="5em"/> <fo:table-column column-width="15em"/> <fo:table-column column-width="15em"/> <fo:table-column column-width="5em"/> <fo:table-body> <xsl:for-each select="characterPosition[position()<$characterPositionCount]"> <fo:table-row> <fo:table-cell> <fo:block text-align="left" margin-left="1em"> <xsl:value-of select="label"/> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block text-align="left"> <xsl:value-of select="name"/> </fo:block> </fo:table-cell> </fo:table-row> <fo:table-row> <fo:table-cell> <xsl:for-each select="value"> <fo:block margin-left="3em"> <xsl:value-of select="label"/> </fo:block> </xsl:for-each> </fo:table-cell> <fo:table-cell> <xsl:for-each select="value"> <fo:block> <xsl:value-of select="name"/> </fo:block> </xsl:for-each> </fo:table-cell> </fo:table-row> </xsl:for-each> </fo:table-body> </fo:table> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block> <fo:table table-layout="fixed" width="40%"> <fo:table-column column-width="5em"/> <fo:table-column column-width="15em"/> <fo:table-column column-width="15em"/> <fo:table-column column-width="5em"/> <fo:table-body> <xsl:for-each select="characterPosition[position()>$characterPositionCount]"> <fo:table-row> <fo:table-cell> <fo:block text-align="left" margin-left="1em"> <xsl:value-of select="label"/> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block text-align="left"> <xsl:value-of select="name"/> </fo:block> </fo:table-cell> </fo:table-row> <fo:table-row> <fo:table-cell> <xsl:for-each select="value"> <fo:block margin-left="3em"> <xsl:value-of select="label"/> </fo:block> </xsl:for-each> </fo:table-cell> <fo:table-cell> <xsl:for-each select="value"> <fo:block> <xsl:value-of select="name"/> </fo:block> </xsl:for-each> </fo:table-cell> </fo:table-row> </xsl:for-each> </fo:table-body> </fo:table> </fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> </fo:block> <fo:block> <fo:leader leader-length="100%" leader-pattern="rule" rule-style="solid" rule-thickness=".1mm" color="black"/> </fo:block> </xsl:template> Using the above XSL-FO, I output the newspaper columns at the beginning of the document (which is what I want), however, the columns do not contain the graphical banner or the header and footer of the document. I would like to "overlap" or "overlay" (I am not sure what the terminology is for this) the "Repeat-TwoColumns" flow with the "Page" flow. For example: Page flow for the header, footer, and document banner Repeat-TwoColumns flow for the newspaper columns Page flow for the rest of the document. I have tried many, many different ways to code the above with no luck. I have also endlessly searched this list's archives and consulted two XML and XSL-FO publications. At the advice of a colleague, I once tried using the XEP extension: <rx:flow-section>. For example: <rx:flow-section column-count="2" column-gap="8pt"> <fo:block font-size="10pt"> <xsl:apply-templates select="field/guidelines/characterPositions" mode="header"/> </fo:block> </rx:flow-section> However, another colleague told me that I could create the columns without using the extension. Could someone please help me figure out how to overlap the two fo:flows so that I can create the newspaper-like columns, along with the rest of the document. I am using XSLT 1.0 and XPATH 1.0 with XEP. Thank you very much for all of your help! I sincerely appreciate it! Best wishes, Jackie Radebaugh Library of Congress Network Development & MARC Standards Office Washington, DC USA Phone: +1-202-707-1153 FAX: +1-202-707-0115 E-Mail: jrad@xxxxxxx
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Cosmetic sorting, Harry Liljeström | Thread | [xsl] Default namespace matching, Ed Yau |
Re: [xsl] Managing cross references, Eric Larson | Date | [xsl] Default namespace matching, Ed Yau |
Month |