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


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi Paul,

this is great, I was about to write something similar!

Can I suggest that stylesheet to be added to the docbook XSL CVS tree?

Camille.

Paul DuBois a écrit :
> On 2/25/06 1:25, "Chris Chiasson" <chris@chiasson.name> wrote:
> 
>> The current homebrew makefile I have essentially says that every
>> (final) target is dependant on any temporary files used to create it,
>> which in turn are dependant on all source files.
>>
>> This means that if I change one source file, all target documents on
>> the site are rebuilt.
>>
>> Does anyone care to clue me in on a tool (or two or three :]) for
>> extracting dependancy information from xml containing xincludes and
>> lots of docbook elements with fileref attributes?
>>
>> Thank you,
> 
> This is what I use.  It serves my purposes, though surely it could use
> improvement.
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet
>   version="1.0"
>   xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> 
> <!--
> xmldepend.xsl - Find files that an XML document refers to/depends on.
> 
> This stylesheet can be used to build Makefile dependency lists.
> 
> Dependencies are defined as:
> - Files named in <xi:xinclude> elements. These must be traversed to
>   find any subdependencies, unless parse attribute is "text".
> - Files named by the fileref attribute of any other element.
> 
> Who-to-blame:
> Paul DuBois
> paul@kitebird.com
> 2005-08-16
> 
> Change history:
> 2005-08-16
> - Version 1.00.
> 
> TODO:
> - add params for whether to produce debugging output, etc.
> -->
> 
> <xsl:output method="text" indent="no"/>
> 
> <!-- BEGIN PARAMETERS -->
> 
> <xsl:param name="xmldepend.terminator" select="'&#x0A;'"/>
> 
> <!-- END PARAMETERS -->
> 
> <!-- BEGIN UTILITY TEMPLATES -->
> 
> <!--
>   Given a pathname, return the basename (part after last '/'):
>   - If path contains no '/' separators, return entire value
>   - If path contains '/' separator, recurse using part after first one
> -->
> 
> <xsl:template name="path-basename">
>   <xsl:param name="path"/>
>   <xsl:choose>
>     <xsl:when test="not(contains($path,'/'))">
>       <xsl:value-of select="$path"/>
>     </xsl:when>
>     <xsl:otherwise>
>       <xsl:call-template name="path-basename">
>         <xsl:with-param name="path" select="substring-after($path,'/')"/>
>       </xsl:call-template>
>     </xsl:otherwise>
>   </xsl:choose>
> </xsl:template>
> 
> <!--
>   Given a pathname, return the dirname (part up through last '/'):
>   - If path contains no '/' separators, return empty string
>   - If path contains '/' separator, return part up through last one
>     (which is the same as the part before the basename)
> -->
> 
> <xsl:template name="path-dirname">
>   <xsl:param name="path"/>
>   <xsl:choose>
>     <xsl:when test="not(contains($path,'/'))">
>       <!-- return nothing -->
>     </xsl:when>
>     <xsl:otherwise>
>       <xsl:variable name="basename">
>         <xsl:call-template name="path-basename">
>           <xsl:with-param name="path" select="$path"/>
>         </xsl:call-template>
>       </xsl:variable>
>       <xsl:value-of select="substring(
>           $path,1,string-length($path) - string-length($basename)
>       )"/>
>     </xsl:otherwise>
>   </xsl:choose>
> </xsl:template>
> 
> <!-- END UTILITY TEMPLATES -->
> 
> <!--
>   Find XInclude directives, spit out the href value that names
>   the included file, and process the file recursively if it's
>   an XML file.
> -->
> 
> <xsl:template match="xi:include" xmlns:xi="http://www.w3.org/2001/XInclude";>
>   <xsl:param name="curdir"/>
> 
>   <xsl:variable name="href-dir">
>     <xsl:call-template name="path-dirname">
>       <xsl:with-param name="path" select="@href"/>
>     </xsl:call-template>
>   </xsl:variable>
> 
>   <!--
>     Display pathname of included file.  It should be prefixed by
>     the directory of the referring file unless the included file
>     is an absolute pathname.
>   -->
> 
>   <xsl:if test="not(starts-with(@href,'/'))">
>     <xsl:value-of select="$curdir"/>
>   </xsl:if>
>   <xsl:value-of select="@href"/>
>   <xsl:value-of select="$xmldepend.terminator"/>
> 
>   <!--
>     Process included file (unless parse="text").
>     Pass directory of included file while processing it
>     so that relative pathnames referenced in the document
>     can be resolved properly.
>   -->
> 
>   <xsl:if test="not(@parse = 'text')">
>     <xsl:for-each select="document(@href)">
>       <xsl:apply-templates>
>         <xsl:with-param name="curdir">
>           <xsl:if test="not(starts-with(@href,'/'))">
>             <xsl:value-of select="$curdir"/>
>           </xsl:if>
>           <xsl:value-of select="$href-dir"/>
>         </xsl:with-param>
>       </xsl:apply-templates>
>     </xsl:for-each>
>   </xsl:if>
> </xsl:template> 
> 
> <!--
>   Several elements have a fileref attribute.  Spit out the file named
>   by any of them.  Resolve the filename relative to the directory of
>   the referencing file unless the name is an absolute pathname.
> -->
> 
> <xsl:template match="*[@fileref]">
>   <xsl:param name="curdir"/>
> 
>   <xsl:if test="not(starts-with(@fileref,'/'))">
>     <xsl:value-of select="$curdir"/>
>   </xsl:if>
>   <xsl:value-of select="@fileref"/>
>   <xsl:value-of select="$xmldepend.terminator"/>
> </xsl:template> 
> 
> <!-- Identity transform, but keep track of current document directory -->
> 
> <xsl:template match="*">
>   <xsl:param name="curdir"/>
>   <xsl:apply-templates select="*">
>     <xsl:with-param name="curdir" select="$curdir"/>
>   </xsl:apply-templates>
> </xsl:template>
> 
> </xsl:stylesheet>
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: docbook-apps-unsubscribe@lists.oasis-open.org
> For additional commands, e-mail: docbook-apps-help@lists.oasis-open.org
> 
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFEArghjv9P65BfOUMRAlxEAKCkbKZsVX3ghKPtsn0p5apudZOWswCglnlS
PrnxhhBSzLcWwFLmQ+BNB38=
=V5lj
-----END PGP SIGNATURE-----
begin:vcard
fn;quoted-printable:Camille B=C3=A9gnis
n;quoted-printable:B=C3=A9gnis;Camille
org:NeoDoc
adr:Domaine du petit Arbois BP 88;;CEEI;Aix en Provence Cedex 4;;13545;France
email;internet:camille@neodoc.biz
tel;work:+33.4.42.22.62.35 
tel;cell:+33.6.33.15.10.23
x-mozilla-html:FALSE
url:http://neodoc.biz
version:2.1
end:vcard



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