Subject: Re: [xsl] generating ID strings that are both readable and unique From: Xmlizer <xmlizer+xsllist@xxxxxxxxx> Date: Tue, 14 Oct 2008 08:43:43 +0200 |
Dear, Give a try to use generate-id(), perhaps by using it with concat() Xmlizer On Tue, Oct 14, 2008 at 8:25 AM, Trevor Nicholls <trevor@xxxxxxxxxxxxxxxxxx> wrote: > Hi > > In this particular application we have a set of XML documents which are > divided into nested sections; each section may (down the track) give rise to > a url. Currently that url is generated by <xsl:number level="multiple"> but > this produces urls that change frequently. Some sections have been given an > ID attribute by the process which originally created the documents, but most > have not. > Additionally, all sections must have exactly one title child, along with > their other content. > > The requirement is to process an XML file and generate an ID attribute for > sections which lack them - deriving the ID value from the title so that the > url is comprehensible. Providing we ignore the problem cases, this is a > trivial exercise: > > ---- > > <xsl:variable name="upchars" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" /> > <xsl:variable name="lochars" select="'abcdefghijklmnopqrstuvwxyz'" /> > > <!-- catchall --> > <xsl:template match="*"> > <xsl:copy> > <xsl:apply-templates select="@*" /> > <xsl:apply-templates /> > </xsl:copy> > </xsl:template> > > <xsl:template match="@*"> > <xsl:copy-of select="." /> > </xsl:template> > > <xsl:template match="section[@id]"> > <xsl:copy> > <xsl:apply-templates select="@*" /> > <xsl:apply-templates /> > </xsl:copy> > </xsl:template> > > <xsl:template match="section"> > <xsl:copy> > <xsl:attribute name="id"> > <xsl:apply-templates select="title" mode="id" /> > </xsl:attribute> > <xsl:apply-templates select="@*" /> > <xsl:apply-templates /> > </xsl:copy> > </xsl:template> > > <xsl:template match="title" mode="id"> > <xsl:value-of select="translate(translate(.,' ','_'),$upchars,$lochars)" > /> > </xsl:template> > > ---- > > The problem cases are > (a) duplicate titles (after the translations) which would lead to duplicate > IDs, and > (b) existing IDs which might also duplicate a title. > > If there were no IDs in the document to begin with, I think I could have > solved the first problem by using a key. But the second problem complicates > it, and I haven't got enough experience with keys to figure out how to > adjust the "id" mode title template to take both issues into account. > > Can anyone offer some helpful advice here? > XSL 1.0 is preferred, although I would be interested to see how XSL2 might > handle this problem too. > > Thanks > Trevor
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] generating ID strings that ar, Trevor Nicholls | Thread | Re: [xsl] generating ID strings tha, David Carlisle |
[xsl] generating ID strings that ar, Trevor Nicholls | Date | Re: [xsl] generating ID strings tha, David Carlisle |
Month |