xsl-list
[Top] [All Lists]

RE: [xsl] question about generate-id()

2010-08-05 06:04:16
Thought I'd throw this one out for unique IDs using generate-id(). I usually 
use something like the following

<anelement id="{concat(generate-id(), '-', local-name(), '-', 
count(preceding::*))}"> ...</>

And if you want you can add the docs name to the ID value also. I usually do 
this as this gives unique IDs across files. 

If by chance you have any illegal chars in the ID value then just translate() 
them out.

Hope this helps.

Marijan (Mario) Madunic
Publishing Specialist
New Flyer Industries

-----Original Message-----
From: Tony Graham [mailto:Tony(_dot_)Graham(_at_)MenteithConsulting(_dot_)com] 
Sent: Thursday, August 05, 2010 4:11 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] question about generate-id()

On Thu, August 5, 2010 7:49 am, Dave Pawson wrote:
On Wed, 04 Aug 2010 18:18:40 -0400
"G. Ken Holman" <gkholman(_at_)CraneSoftwrights(_dot_)com> wrote:

The uniqueness of identifiers is guaranteed only when generate-id()
is used for every identifier.  This makes sense because generate-id()
has no way of knowing which of your attributes are identifiers and
which are not.

Not even when the 'id' values are @id? That sounds wrong Ken.

Possibly not everybody uses @id to mean an ID, plus there's plenty of
other attributes, such as @name, that may or may not be IDs.  The only
attribute that is guaranteed to be an ID is @xml:id, and that postdates
XSLT 1.0 by about six years.

16.6.4
There is no guarantee that a generated unique identifier will be
distinct from any unique IDs specified in the source document.

Yuk. IMHO that's a spec weakness. More constrained, surely
it's not rocket science to implement.

You could do it yourself with keys and a bit of checking, but in the
general case, not everybody will need to search a possibly large source
document in the off-chance that a duplicate ID will be generated (though
if you keep using the same XSLT processor over slightly modified versions
of the same source document, you do stand a good chance of creating
duplicates.)

In this brave new world of streaming XSLT, you might not see the existing
ID value until after you've generated what would be a duplicate ID.

The earlier idea of adding a timestamp to the generated ID, or even a
known prefix if you do things in fixed phases, would be less overhead than
avoiding existing IDs.  I've also implemented a uuid() extension function
for a client to guarantee that generated IDs are unique.

Regards,


Tony Graham                         
Tony(_dot_)Graham(_at_)MenteithConsulting(_dot_)com
Director                                  W3C XSL FO SG Invited Expert
Menteith Consulting Ltd                               XML Guild member
XML, XSL and XSLT consulting, programming and training
Registered Office: 13 Kelly's Bay Beach, Skerries, Co. Dublin, Ireland
Registered in Ireland - No. 428599   http://www.menteithconsulting.com
  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --
xmlroff XSL Formatter                               http://xmlroff.org
xslide Emacs mode                  http://www.menteith.com/wiki/xslide
Unicode: A Primer                               urn:isbn:0-7645-4625-2


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


--------------------------------------------------------------------
Please consider the environment before printing this e-mail.

CONFIDENTIALITY STATEMENT: This communication (and  any and all information or 
material transmitted with this communication) is confidential, may be 
privileged and is intended only for the use of the intended recipient. If you 
are not the intended recipient, any review, retransmission, circulation, 
distribution, reproduction, conversion to hard copy, copying or other use of 
this communication, information or material is strictly prohibited and may be 
illegal. If you received this communication in error or if it is forwarded to 
you without the express authorization of New Flyer, please notify us 
immediately by telephone or by return email and permanently delete the 
communication, information and material from any computer, disk drive, diskette 
or other storage device or media. Thank you.


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--