I didn't consider having multiple keys bound to the same resource, which of
course can happen (and for good reasons).
So ultimately you need a map of URIs to keys or simply a distinct-values()
applied to the list of URIs provided by processing your key-to-resource map.
Cheers,
E.
--
Eliot Kimber
http://contrext.com
On 5/5/19, 10:36 PM, "Dan Vint dvint(_at_)dvint(_dot_)com"
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:
I just wanted to post an update. Thanks for
pointing me in this direction, it's the first
time I've used maps. the idea works but we have a
quirk in my DITA content. I've got different keys
pointing to the same content. So although the map
key is unique, when I go to write a file based
upon the sourcename + target, I end up with the same filename for the
output.
The map solution gives me a convenient way to
build an XML source that I can then process and
check for duplicates in the filenames I'm creating.
Thanks for the help
..dan
At 08:39 AM 4/19/2019, Eliot Kimber ekimber(_at_)contrext(_dot_)com wrote:
>Yes--thanks for catching that--cut and paste error.
>
>Cheers,
>
>E.
>
>--
>Eliot Kimber
>http://contrext.com
>
>
>On 4/19/19, 10:10 AM, "Martin Honnen
>martin(_dot_)honnen(_at_)gmx(_dot_)de"
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:
>
> On 19.04.2019 17:02, Eliot Kimber ekimber(_at_)contrext(_dot_)com
wrote:
>
> > If you construct map entries for each use
> and then combine them into a single map using
> the "use-first" or "use-any" "duplicates"
> option then you can blindly process all the
> references and let the map-merge process
> produce a single list of elements, e.g.;
> >
> > <xsl:variable name="use-entries" as="map(*)*">
> > <xsl:call-template name="find-all-conrefs"/>
> > </xsl:variable>
> >
> > The find-all-conrefs template generates
> maps, one for each id/element pair, which you
> can create with xsl:map or using the literal
> map constructor: "map{$key : $value}".
> >
> > Now make a single map:
> >
> > <xsl:variable name="use-map" as="map(*)"
> > select="map:merge($use-entries, map{ 'duplicates' : 'use-any'}"
> > />
> >
> > And then process the entries to produce the result docs:
> >
> > <xsl:for-each select="map:keys($use-map)">
> > <xsl:variable name="key" select="." as="xs:string"/>
> > <xsl:call-template name="make-result-doc">
> > <xsl:with-param name="key" as="xs:string" select="$key"/>
> > <xsl:with-param name="key"
> as="element() " select="map:get($use-map, $key)" as="element() "/>
>
> Isn't that second parameter supposed to be named
> <xsl:with-param name="value" as="element() "
> select="map:get($use-map, $key)" as="element() "/>
> ?
>
> > </xsl:call-template>
> > </xsl:for-each>
> >
>
>
>
>
---------------------------------------------------------------------------
Danny Vint
Panoramic Photography
http://www.dvint.com
voice: 619-647-5780
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--