Re: STC in VOResource records

From: KevinBenson <kmb-at-mssl.ucl.ac.uk>
Date: Thu, 04 Jan 2007 07:45:35 +0000


If your doing a reg implementation here is a couple of ways of doing the translation. I recently tested the xsl and seems to work fine, currently doing template matches on the xs:IDREF and xs:ID attributes, which seems to be (id, idref, frame_id, coord_system_id) let me know if I have missed other attributes.

XSL (sample of @id translates characters to '_' that are not allowed for xs:ID it also should catch resubmits in case a user edits&submits the xml with the identifier already part of the 'id'. Also note there are probably still a few characters to be translated to '_' that are possible from the reg identifier currently did the most commonly seen.)

    <xsl:template match="@id">

       <xsl:variable name="valofattr" select="." />
       <xsl:variable name="valofident" 
select="translate(substring(../../../identifier,7),'.+-/','____')" />
       <xsl:variable name="valofattrsub" 
select="substring($valofattr,1,string-length($valofident))" />
       <xsl:attribute name="id">
       <xsl:if 
test="contains(namespace-uri(..),'http://www.ivoa.net/xml/STC')">
           <xsl:if test="(string-length($valofattrsub) = 0) or 
(string-length($valofattrsub) &lt; string-length($valofident)) or (not(contains($valofident,$valofattrsub)))">

       <xsl:value-of select="$valofident" /><xsl:text>_</xsl:text></xsl:if></xsl:if><xsl:value-of select="$valofattr"/>

       </xsl:attribute>
    </xsl:template>

XSL2.0 and pattern replacing. If your doing other languages then probably you can do simple string replacement with an expression same goes with xsl and the replace function.
Here is a sample of a Java one that I used in the past and suspect it should work for other language:
tempIdent.replaceAll("[^\\w*]","_"); //replace all characters that are not a 'word' character to "_"

Ray Plante wrote:
> On Wed, 3 Jan 2007, Patrick Dowler wrote:

>> Can we just pick one separator rather than  two optional ones?
>

> It truely doesn't matter as these are opaque string, carrying no other
> information. (yes?) We just have to make sure they are unique. So
> if you have a preference, go with it.
>
>> Does this mean
>> these separators should not (cannot) be used within authority id or 
>> resource
>> key or coordsys key?
>

> The existing rules specified in the Identifier spec still apply. It's
> just when we use the components from the IVOA ID in this specific
> case, certain characters that are illegal in the xs:ID context must be
> translated.
>

> Since multiple characters can get mapped into two characters, this
> convention is not fail-safe.
>

> cheers,
> Ray
Received on 2007-01-04Z08:46:24