- From: Jeremy Carroll <jjc@hpl.hp.com>
- Date: Tue, 19 Jun 2007 14:52:16 +0100
- To: GRDDL Working Group <public-grddl-wg@w3.org>
Advice sought:
1) modules
2) avoiding repetition, continuations?
========
1) modules
The new library module
http://www.w3.org/2003/g/xml-attributes
[not yet correctly documented]
is intended to be imported, by other people's code.
(see also previously mailed documentation, that I will add soon).
I have never written such a thing before.
I made the following steps:
a) all templates and top-level variables are named in the namespace of
the module
- this includes both the templates that I (conceptually) export
and the templates that are (conceptually) private
b) local params are given simple names, not in the xa namespace.
Is this sufficient?
Or do I need to do other things?
==========
2) avoiding repetition, continuations?
I usually use XSLT 2.0 where it is easier to define user functions etc.
The most difficult bit of the code is detecting relative URIs.
I decided that I would not do proper URI processing (e.g. resolve
relative refs, in cascading xml:base decls), but simply barf if there
were nested relative xml:base declarations.
The logic I required was:
- if I have an xml:base B, and an ancestor xml:base, then if B is
relative, temrinate with a message
- if I have a relative xml:base B1 and no ancestor xml:base but an
html base B2, and I am respecting xml:base within HTML, then if both B1
and B2 are relative, barf.
Rather than copy/pasting the is-a-uri-relative code, I wanted one copy
in one place. The method I used was to define a template:
<xsl:template name="xa:if-relative-then-call-continuation">
and to define templates
<xsl:template name="xa:barf">
which terminates
and
<xsl:template name="xa:barf-if-relative">
and
<xsl:template name="xa:barf-if-both-relative">
defined in terms of xa:if-relative-then-call-continuation and xa:barf.
Since XSLT doesn't support templates as first class objects, I followed
Michael Kay's advice, in XSLT 2.0, 3rd Edition, Programmer's Reference,
p198, combined with xsl:choose, to implement the continuation style of
programming.
---
Is there a more straight forward way, in XSLT 1.0, of only writing the
relative URI logic once?
Jeremy
--
Hewlett-Packard Limited
registered Office: Cain Road, Bracknell, Berks RG12 1HN
Registered No: 690597 England
Received on Tuesday, 19 June 2007 13:52:41 UTC