- From: Romain Deltour <rdeltour@gmail.com>
- Date: Thu, 22 Sep 2011 00:51:48 +0200
- To: XProc Comments <public-xml-processing-model-comments@w3.org>
- Cc: XProc Dev <xproc-dev@w3.org>
- Message-Id: <51128456-EB0A-42CA-9E19-4AE39D70BF52@gmail.com>
Hi,
It seems the general approach for XProc steps is that if an attribute
named "xml:base" is added (or changed), the base URI of the underlying
element MUST be updated [1].
However, there seems to be no simple way [*] to change the base URI of
a *document* flowing through a pipeline. This makes the no-arg p:base-
uri() function (returning the context document base URI) very brittle
whenever @xml:base is manipulated.
I think it would be better to say: if an attribute named "xml:base" is
added (or changed), the base URI of the underlying element MUST be
updated ; if the underlying element is the root element, the base URI
of the document MUST be updated.
Note that the introduction of section 7 [2] is confusing for the same
reason:
"When a step in this library produces an output document, the base
URI of the output is the base URI of the step's primary input document
unless the step's process explicitly sets an xml:base attribute (...)"
Comments welcome!
Romain.
[1] http://lists.w3.org/Archives/Public/public-xml-processing-model-comments/2009Jan/0040.html
[2] http://www.w3.org/TR/xproc/#std-components
[*] I tried several solutions:
a) adding an @xml:base (e.g. with p:add-attribute) affects an
element, not the document node.
b) using a p:xslt with @output-base-uri and an identity XSLT seems
to work with XSLT 1.0-enabled processors (e.g. Calumet), not with XSLT
2.0-enabled ones (e.g. Calabash).
I suppose it's because Calumet uses XSLT 1.0 ("An XSLT 1.0 step should
use the value of the output-base-uri as the base URI of its output")
and Calabash XSLT 2.0 (which doesn't specifies, as far as I
understood, that the base output URI sets the base URI of an
implicitly constructed final result tree).
c) I could get something working by using an XSLT 2.0 identity
that writes on an explicit xsl:result-document, then discarding the
main result port, wrapping/unwrapping the secondary sequence port to
get the single result document.
I attached some XProc documents showing the approaches described above.
--
Romain Deltour, Software Developer
The DAISY Consortium
http://www.daisy.org
Attachments
- application/zip attachment: base-uri.zip
Received on Wednesday, 21 September 2011 22:52:22 UTC