- From: Norm Tovey-Walsh <ndw@nwalsh.com>
- Date: Tue, 25 Feb 2025 17:56:57 +0000
- To: "xproc-dev@w3.org" <xproc-dev@w3.org>
Norm Tovey-Walsh <ndw@nwalsh.com> writes: > Heidi Vanparys <hevan@kds.dk> writes: >> 2: base-uri(/) = file:/H:/test/sub1/ >> 2: base-uri(/c:directory) = file:/H:/test/sub1/sub1/ > > That really looks wrong. There’s something ugly going on here. The observations below are based on my implementation, but I wonder if it’s systemic given that Morgana seems to produce the same results. I created /tmp/y /tmp/y/file /tmp/y/z /tmp/y/z/file If I do a recursive directory list over /tmp/y and then run the result through this stylesheet: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="3.0"> <xsl:output method="xml" encoding="utf-8" indent="no"/> <xsl:template match="*"> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:attribute name="b" select="base-uri(.)"/> <xsl:apply-templates/> </xsl:copy> </xsl:template> </xsl:stylesheet> The result is: <c:directory xmlns:c="http://www.w3.org/ns/xproc-step" xml:base="file:/tmp/y/" name="y" b="file:/tmp/y/"> <c:file xml:base="file" name="file" b="file:/tmp/y/file"/> <c:directory xml:base="z/" name="z" b="file:/tmp/y/z/"> <c:file xml:base="file" name="file" b="file:/tmp/y/z/file"/> </c:directory> </c:directory> Those are the correct base URIs, so we feel like all is well. Then we do: <p:for-each name="base-uris-directories"> <p:with-input select="//c:directory/c:directory" /> <p:xslt> <p:with-input port="stylesheet" href="test.xsl"/> </p:xslt> </p:for-each> And we get this mess: <c:directory xmlns:c="http://www.w3.org/ns/xproc-step" xml:base="z/" name="z" b="file:/tmp/y/z/z/"> <c:file xml:base="file" name="file" b="file:/tmp/y/z/z/file"/> </c:directory> It’s pretty easy to see *what* has happened: the xml:base attribute has been applied on top of the current base URI. From one perspective, that’s not wrong. That’s ow a relative xml:base attribute is supposed to be resolved. What I can’t see is *why* this has happened. In order to satisfy the select attribute on p:for-each, a new document had to be created for the inner c:directory element. That appears to have started with the correct base URI and then “re-applied” the xml:base attribute to it. And I can’t quite persuade myself that that’s incorrect behavior. I think that the p:directory-list step is perhaps being too clever here. Or maybe I’m just not being clever enough at the moment… Be seeing you, norm -- Norm Tovey-Walsh <ndw@nwalsh.com> https://norm.tovey-walsh.com/ > I think age is a very high price to pay for maturity.--Tom Stoppard
Received on Tuesday, 25 February 2025 17:57:04 UTC