how to do modular glossaries with 5.0 ?

View: New views
4 Messages — Rating Filter:   Alert me  

how to do modular glossaries with 5.0 ?

by Bergfrid Skaara :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi, I'm building multiple glossaries from a modular master glossary
and find the validation errors triggered by the otherterm constraint
on glosssee and glossseealso distracting.
The modularization is done as follows: 1 file for each letter a-z
containing individual glossentries on that letter + 1 master book file
for each glossary,  xincluding by xml:id from those files.

What I would like most of all is to use the same setup as for master
bibliography, referencing a single bib. file using bibliomixed, but I
don't get this to work since the glossentries are split on 26 files.
My immediate challenge is however validation of the individual files,
since the otherterm constraint on glosssee and glossseealso uses id
and not xml:id and only see elements within the same document (file).
I can live with this, but our non-technical wysiwyg users cannot.
I'm considering the following options - any pro/con, implementation
suggestions, and alternative solutions are welcome.

1) redefine glosssee and glossseealso to behave like olinks by
replacing otherterm attribute with targetdoc and targetptr and writing
some templates to handle it (which we are already using)
2) suppress the otherterm validation errors by customization (removing
schematron rules) - guess I'd have to QA the see links manually then
3) link by using xlink:href rather than otherterm and write a custom
template to add and format the generated text (See / See also)

Best regards, Bergfrid Skaara

---------------------------------------------------------------------
To unsubscribe, e-mail: docbook-apps-unsubscribe@...
For additional commands, e-mail: docbook-apps-help@...


Re: how to do modular glossaries with 5.0 ?

by Bob Stayton :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Regarding option #1 using olinks for cross references within a glossary
collection, I don't think this will work with the current setup.  The
problem is that the templates that collect the olink target data do not
process an automatic glossary before extracting the target information.  It
probably should, but currently does not.  So that means the olink database
won't have the target information for the generated glossentries.  You could
file that as a bug report on the SourceForge DocBook site so it gets fixed.

I think approach #3 is probably easiest.  Below is an example XSL code to
the template for glossseealso to add an xsl:when clause when an xlink is
available.  It also handles the "See Also" part.  It uses mode="xref-to" to
generate the link text for the target entry if the glossseealso element is
empty.

<xsl:template match="d:glossseealso" mode="glossary.as.list">
  <xsl:variable name="otherterm" select="@otherterm"/>
  <xsl:variable name="targets" select="key('id', $otherterm)"/>
  <xsl:variable name="target" select="$targets[1]"/>
  <xsl:variable name="xhref" select="@xlink:href"/>

  <xsl:choose>
    <xsl:when test="$target">
      <fo:basic-link internal-destination="{$otherterm}"
                     xsl:use-attribute-sets="xref.properties">
        <xsl:apply-templates select="$target" mode="xref-to"/>
      </fo:basic-link>
    </xsl:when>
    <xsl:when test="$xhref">
      <xsl:variable name="idref">
        <xsl:call-template name="xpointer.idref">
          <xsl:with-param name="xpointer" select="$xhref"/>
        </xsl:call-template>
      </xsl:variable>

      <xsl:variable name="xtargets" select="key('id',$idref)"/>
      <xsl:variable name="xtarget" select="$xtargets[1]"/>

      <xsl:call-template name="check.id.unique">
        <xsl:with-param name="linkend" select="$idref"/>
      </xsl:call-template>

      <xsl:choose>
        <xsl:when test="count($xtarget) = 0">
          <xsl:message>
            <xsl:text>XLink to nonexistent id: </xsl:text>
            <xsl:value-of select="$idref"/>
          </xsl:message>
        </xsl:when>

        <xsl:otherwise>
          <fo:basic-link internal-destination="{$idref}">
            <xsl:choose>
              <xsl:when test="string-length(.) != 0">
                <xsl:apply-templates/>
              </xsl:when>
              <xsl:otherwise>
                <xsl:apply-templates select="$xtarget" mode="xref-to"/>
              </xsl:otherwise>
            </xsl:choose>
          </fo:basic-link>
        </xsl:otherwise>
      </xsl:choose>

    </xsl:when>
    <xsl:when test="$otherterm != '' and not($target)">
      <xsl:message>
        <xsl:text>Warning: glossseealso @otherterm reference not found:
</xsl:text>
        <xsl:value-of select="$otherterm"/>
      </xsl:message>
      <xsl:apply-templates mode="glossary.as.list"/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:apply-templates mode="glossary.as.list"/>
    </xsl:otherwise>
  </xsl:choose>

  <xsl:choose>
    <xsl:when test="position() = last()">
      <xsl:text>.</xsl:text>
    </xsl:when>
    <xsl:otherwise>
      <xsl:text>, </xsl:text>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>



Bob Stayton
Sagehill Enterprises
bobs@...


----- Original Message -----
From: "Bergfrid Skaara" <bergfrid.digitaldias@...>
To: <docbook-apps@...>
Sent: Friday, March 20, 2009 10:07 AM
Subject: [docbook-apps] how to do modular glossaries with 5.0 ?


> Hi, I'm building multiple glossaries from a modular master glossary
> and find the validation errors triggered by the otherterm constraint
> on glosssee and glossseealso distracting.
> The modularization is done as follows: 1 file for each letter a-z
> containing individual glossentries on that letter + 1 master book file
> for each glossary,  xincluding by xml:id from those files.
>
> What I would like most of all is to use the same setup as for master
> bibliography, referencing a single bib. file using bibliomixed, but I
> don't get this to work since the glossentries are split on 26 files.
> My immediate challenge is however validation of the individual files,
> since the otherterm constraint on glosssee and glossseealso uses id
> and not xml:id and only see elements within the same document (file).
> I can live with this, but our non-technical wysiwyg users cannot.
> I'm considering the following options - any pro/con, implementation
> suggestions, and alternative solutions are welcome.
>
> 1) redefine glosssee and glossseealso to behave like olinks by
> replacing otherterm attribute with targetdoc and targetptr and writing
> some templates to handle it (which we are already using)
> 2) suppress the otherterm validation errors by customization (removing
> schematron rules) - guess I'd have to QA the see links manually then
> 3) link by using xlink:href rather than otherterm and write a custom
> template to add and format the generated text (See / See also)
>
> Best regards, Bergfrid Skaara
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: docbook-apps-unsubscribe@...
> For additional commands, e-mail: docbook-apps-help@...
>
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: docbook-apps-unsubscribe@...
For additional commands, e-mail: docbook-apps-help@...


Parent Message unknown Re: how to do modular glossaries with 5.0 ?

by Bob Stayton :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I fixed the olink collection process so that now it will also collect from a
glossary collection, which would enable using olinks.  So my statement
before about option #1 not working no longer applies if you use the
stylesheet from the latest snapshot build.

Bob Stayton
Sagehill Enterprises
bobs@...


----- Original Message -----
From: "Bob Stayton" <bobs@...>
To: "Bergfrid Skaara" <bergfrid.digitaldias@...>;
<docbook-apps@...>
Sent: Friday, March 20, 2009 12:38 PM
Subject: Re: [docbook-apps] how to do modular glossaries with 5.0 ?


> Regarding option #1 using olinks for cross references within a glossary
> collection, I don't think this will work with the current setup.  The
> problem is that the templates that collect the olink target data do not
> process an automatic glossary before extracting the target information.
> It probably should, but currently does not.  So that means the olink
> database won't have the target information for the generated glossentries.
> You could file that as a bug report on the SourceForge DocBook site so it
> gets fixed.
>
> I think approach #3 is probably easiest.  Below is an example XSL code to
> the template for glossseealso to add an xsl:when clause when an xlink is
> available.  It also handles the "See Also" part.  It uses mode="xref-to"
> to generate the link text for the target entry if the glossseealso element
> is empty.
>
> <xsl:template match="d:glossseealso" mode="glossary.as.list">
>  <xsl:variable name="otherterm" select="@otherterm"/>
>  <xsl:variable name="targets" select="key('id', $otherterm)"/>
>  <xsl:variable name="target" select="$targets[1]"/>
>  <xsl:variable name="xhref" select="@xlink:href"/>
>
>  <xsl:choose>
>    <xsl:when test="$target">
>      <fo:basic-link internal-destination="{$otherterm}"
>                     xsl:use-attribute-sets="xref.properties">
>        <xsl:apply-templates select="$target" mode="xref-to"/>
>      </fo:basic-link>
>    </xsl:when>
>    <xsl:when test="$xhref">
>      <xsl:variable name="idref">
>        <xsl:call-template name="xpointer.idref">
>          <xsl:with-param name="xpointer" select="$xhref"/>
>        </xsl:call-template>
>      </xsl:variable>
>
>      <xsl:variable name="xtargets" select="key('id',$idref)"/>
>      <xsl:variable name="xtarget" select="$xtargets[1]"/>
>
>      <xsl:call-template name="check.id.unique">
>        <xsl:with-param name="linkend" select="$idref"/>
>      </xsl:call-template>
>
>      <xsl:choose>
>        <xsl:when test="count($xtarget) = 0">
>          <xsl:message>
>            <xsl:text>XLink to nonexistent id: </xsl:text>
>            <xsl:value-of select="$idref"/>
>          </xsl:message>
>        </xsl:when>
>
>        <xsl:otherwise>
>          <fo:basic-link internal-destination="{$idref}">
>            <xsl:choose>
>              <xsl:when test="string-length(.) != 0">
>                <xsl:apply-templates/>
>              </xsl:when>
>              <xsl:otherwise>
>                <xsl:apply-templates select="$xtarget" mode="xref-to"/>
>              </xsl:otherwise>
>            </xsl:choose>
>          </fo:basic-link>
>        </xsl:otherwise>
>      </xsl:choose>
>
>    </xsl:when>
>    <xsl:when test="$otherterm != '' and not($target)">
>      <xsl:message>
>        <xsl:text>Warning: glossseealso @otherterm reference not found:
> </xsl:text>
>        <xsl:value-of select="$otherterm"/>
>      </xsl:message>
>      <xsl:apply-templates mode="glossary.as.list"/>
>    </xsl:when>
>    <xsl:otherwise>
>      <xsl:apply-templates mode="glossary.as.list"/>
>    </xsl:otherwise>
>  </xsl:choose>
>
>  <xsl:choose>
>    <xsl:when test="position() = last()">
>      <xsl:text>.</xsl:text>
>    </xsl:when>
>    <xsl:otherwise>
>      <xsl:text>, </xsl:text>
>    </xsl:otherwise>
>  </xsl:choose>
> </xsl:template>
>
>
>
> Bob Stayton
> Sagehill Enterprises
> bobs@...
>
>
> ----- Original Message -----
> From: "Bergfrid Skaara" <bergfrid.digitaldias@...>
> To: <docbook-apps@...>
> Sent: Friday, March 20, 2009 10:07 AM
> Subject: [docbook-apps] how to do modular glossaries with 5.0 ?
>
>
>> Hi, I'm building multiple glossaries from a modular master glossary
>> and find the validation errors triggered by the otherterm constraint
>> on glosssee and glossseealso distracting.
>> The modularization is done as follows: 1 file for each letter a-z
>> containing individual glossentries on that letter + 1 master book file
>> for each glossary,  xincluding by xml:id from those files.
>>
>> What I would like most of all is to use the same setup as for master
>> bibliography, referencing a single bib. file using bibliomixed, but I
>> don't get this to work since the glossentries are split on 26 files.
>> My immediate challenge is however validation of the individual files,
>> since the otherterm constraint on glosssee and glossseealso uses id
>> and not xml:id and only see elements within the same document (file).
>> I can live with this, but our non-technical wysiwyg users cannot.
>> I'm considering the following options - any pro/con, implementation
>> suggestions, and alternative solutions are welcome.
>>
>> 1) redefine glosssee and glossseealso to behave like olinks by
>> replacing otherterm attribute with targetdoc and targetptr and writing
>> some templates to handle it (which we are already using)
>> 2) suppress the otherterm validation errors by customization (removing
>> schematron rules) - guess I'd have to QA the see links manually then
>> 3) link by using xlink:href rather than otherterm and write a custom
>> template to add and format the generated text (See / See also)
>>
>> Best regards, Bergfrid Skaara
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: docbook-apps-unsubscribe@...
>> For additional commands, e-mail: docbook-apps-help@...
>>
>>
>>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: docbook-apps-unsubscribe@...
For additional commands, e-mail: docbook-apps-help@...


Re: how to do modular glossaries with 5.0 ?

by Bergfrid Skaara :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,
 
I testet out the suggested XSL for approach #3 with the 1.75 stylesheets and found that some changes are required to produce output identical to otherterm with xlink:href. Below is the revised version of the xsl handling xlink:href.
 
The problem was that xpointer.idref template returns an empty string, since no xpointer is used here. The fix is to omit the assignment of idref variable and use xhref directly . You also need to add xref.properties if you want identical styling.
 
<xsl:when test="$xhref">
     <xsl:variable name="xtargets" select="key('id',$xhref)"/>
     <xsl:variable name="xtarget" select="$xtargets[1]"/>
 
     <xsl:call-template name="check.id.unique">
       <xsl:with-param name="linkend" select="$xhref"/>
     </xsl:call-template>
 
     <xsl:choose>
       <xsl:when test="count($xtarget) = 0">
         <xsl:message>
           <xsl:text>XLink to nonexistent id: </xsl:text>
           <xsl:value-of select="$xhref"/>
         </xsl:message>
      </xsl:when>
 
       <xsl:otherwise>
         <fo:basic-link internal-destination="{$xhref}" xsl:use-attribute-sets="xref.properties">
          <xsl:choose>
            <xsl:when test="string-length(.) != 0">
               <xsl:apply-templates/>
             </xsl:when>
             <xsl:otherwise>
               <xsl:apply-templates select="$xtarget" mode="xref-to"/>
             </xsl:otherwise>
           </xsl:choose>
         </fo:basic-link>
       </xsl:otherwise>
     </xsl:choose>
  </xsl:when>
 
Also, the gentext templates adds the trailing period mark, so that should be omitted from the last xsl:choose block
 
Best regards,
Bergfrid Skaara
 
 
 
 
On Fri, Mar 20, 2009 at 9:38 PM, Bob Stayton<bobs@...> wrote:
> Regarding option #1 using olinks for cross references within a glossary
> collection, I don't think this will work with the current setup.  The
> problem is that the templates that collect the olink target data do not
> process an automatic glossary before extracting the target information.  It
> probably should, but currently does not.  So that means the olink database
> won't have the target information for the generated glossentries.  You could
> file that as a bug report on the SourceForge DocBook site so it gets fixed.
>
> I think approach #3 is probably easiest.  Below is an example XSL code to
> the template for glossseealso to add an xsl:when clause when an xlink is
> available.  It also handles the "See Also" part.  It uses mode="xref-to" to
> generate the link text for the target entry if the glossseealso element is
> empty.
>
> <xsl:template match="d:glossseealso" mode="glossary.as.list">
>  <xsl:variable name="otherterm" select="@otherterm"/>
>  <xsl:variable name="targets" select="key('id', $otherterm)"/>
>  <xsl:variable name="target" select="$targets[1]"/>
>  <xsl:variable name="xhref" select="@xlink:href"/>
>
>  <xsl:choose>
>   <xsl:when test="$target">
>     <fo:basic-link internal-destination="{$otherterm}"
>                    xsl:use-attribute-sets="xref.properties">
>       <xsl:apply-templates select="$target" mode="xref-to"/>
>     </fo:basic-link>
>   </xsl:when>
>   <xsl:when test="$xhref">
>     <xsl:variable name="idref">
>       <xsl:call-template name="xpointer.idref">
>         <xsl:with-param name="xpointer" select="$xhref"/>
>       </xsl:call-template>
>     </xsl:variable>
>
>     <xsl:variable name="xtargets" select="key('id',$idref)"/>
>     <xsl:variable name="xtarget" select="$xtargets[1]"/>
>
>     <xsl:call-template name="check.id.unique">
>       <xsl:with-param name="linkend" select="$idref"/>
>     </xsl:call-template>
>
>     <xsl:choose>
>       <xsl:when test="count($xtarget) = 0">
>         <xsl:message>
>           <xsl:text>XLink to nonexistent id: </xsl:text>
>           <xsl:value-of select="$idref"/>
>         </xsl:message>
>       </xsl:when>
>
>       <xsl:otherwise>
>         <fo:basic-link internal-destination="{$idref}">
>           <xsl:choose>
>             <xsl:when test="string-length(.) != 0">
>               <xsl:apply-templates/>
>             </xsl:when>
>             <xsl:otherwise>
>               <xsl:apply-templates select="$xtarget" mode="xref-to"/>
>             </xsl:otherwise>
>           </xsl:choose>
>         </fo:basic-link>
>       </xsl:otherwise>
>     </xsl:choose>
>
>   </xsl:when>
>   <xsl:when test="$otherterm != '' and not($target)">
>     <xsl:message>
>       <xsl:text>Warning: glossseealso @otherterm reference not found:
> </xsl:text>
>       <xsl:value-of select="$otherterm"/>
>     </xsl:message>
>     <xsl:apply-templates mode="glossary.as.list"/>
>   </xsl:when>
>   <xsl:otherwise>
>     <xsl:apply-templates mode="glossary.as.list"/>
>   </xsl:otherwise>
>  </xsl:choose>
>
>  <xsl:choose>
>   <xsl:when test="position() = last()">
>     <xsl:text>.</xsl:text>
>   </xsl:when>
>   <xsl:otherwise>
>     <xsl:text>, </xsl:text>
>   </xsl:otherwise>
>  </xsl:choose>
> </xsl:template>
>
>
>
> Bob Stayton
> Sagehill Enterprises
>
>
> ----- Original Message ----- From: "Bergfrid Skaara"
> Sent: Friday, March 20, 2009 10:07 AM
> Subject: [docbook-apps] how to do modular glossaries with 5.0 ?
>
>
>> Hi, I'm building multiple glossaries from a modular master glossary
>> and find the validation errors triggered by the otherterm constraint
>> on glosssee and glossseealso distracting.
>> The modularization is done as follows: 1 file for each letter a-z
>> containing individual glossentries on that letter + 1 master book file
>> for each glossary,  xincluding by xml:id from those files.
>>
>> What I would like most of all is to use the same setup as for master
>> bibliography, referencing a single bib. file using bibliomixed, but I
>> don't get this to work since the glossentries are split on 26 files.
>> My immediate challenge is however validation of the individual files,
>> since the otherterm constraint on glosssee and glossseealso uses id
>> and not xml:id and only see elements within the same document (file).
>> I can live with this, but our non-technical wysiwyg users cannot.
>> I'm considering the following options - any pro/con, implementation
>> suggestions, and alternative solutions are welcome.
>>
>> 1) redefine glosssee and glossseealso to behave like olinks by
>> replacing otherterm attribute with targetdoc and targetptr and writing
>> some templates to handle it (which we are already using)
>> 2) suppress the otherterm validation errors by customization (removing
>> schematron rules) - guess I'd have to QA the see links manually then
>> 3) link by using xlink:href rather than otherterm and write a custom
>> template to add and format the generated text (See / See also)
>>
>> Best regards, Bergfrid Skaara
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: docbook-apps-unsubscribe@...
>> For additional commands, e-mail: docbook-apps-help@...
>>
>>
>>
>
>