OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

docbook-apps message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [docbook-apps] Collecting glossentries in glossary database


Thank you for your valuable help, especially the tip of using 2 separate 
keys and thus calculating two intersections at once seems very elegant 
to me.

Jirka Kosek wrote:

>> ... The only problem remaining is with glossseealso. Either it can 
>> happen that relevant glossentries are missing, because they didn't 
>> appear in the document, but were referenced by a glossseealso, or too 
>> many of them appear in the result, because I gather all those, that 
>> were referenced by otherterm too. For the moment I work with the 
>> latter - I declared the following key:
>
>
> It shouldn't be too hard to get this working correctly. I assume that 
> you are using solely linkend/otherterm to point to glossentries. Given 
> following two keys:
>
> <xsl:key name="directly-referenced" match="glossterm[@linkend]" 
> use="@linkend"/>
>
> <xsl:key name="indirectly-referenced" match="glossseealso[@othertem]" 
> use="@otherterm"/>
>
> you can test whether context node which is some particular glossentry 
> should be included:
>
> <xsl:if test="key('directly-referenced', @id) or
>               (key('directly-referenced', key('indirectly-referenced', 
> @id)/../@id))">
>   ... copy current glossentry ...
> </xsl:if>


There was just a small mistake, the last use of the key function should be

    key('indirectly-referenced', @id)/../../@id))

>>  <xsl:for-each select="exsl:node-set($collected.glossary)/glossary">
>>    <xsl:call-template name="make-glossary"/>
>>  </xsl:for-each>
>> </xsl:template>
>>
> Using exsl:node-set() should be conditional if you want to have see 
> something like this in standard distribution. Stylesheets should work 
> (albeit in limited way) also with XSLT processors that don't support 
> EXSLT.


To allow for "condionality", would it be enough to perform a test with 
function-available() and if negative, just processing the original 
glossary? Because I wouldn't know, how to come around with the problem 
of using a temporary tree containing a filtered glossary.

  <xsl:choose>
    <xsl:when test="function-available('exsl:node-set')">
      <xsl:for-each select="exsl:node-set($collected.glossary)/glossary">
        <xsl:call-template name="make-glossary"/>
      </xsl:for-each>
    </xsl:when>
    <xsl:otherwise>
      <xsl:message>+++ Function 'exsl:node-set()' not available. 
Processing glossary in ordinary way. +++</xsl:message>
      <xsl:call-template name="make-glossary"/>
    </xsl:otherwise>
  </xsl:choose>

I will continue working on it (when I get time), especially introducing 
some parameter to switch sorting on/off and FO should work too.

Thanks for the help so far,
Georges



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]