- From: Henry S. Thompson <ht@inf.ed.ac.uk>
- Date: Thu, 12 Aug 2010 17:04:47 +0100
- To: public-xml-processing-model-wg@w3.org
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
I keep writing lots of little steps to build and insert fragments or
to restructure things. I think I want the equivalent of a single
template + copy-all template stylesheet, something like
<p:template match="...">
[XML goes here, with {} interpreted in both attr vals and text content,
and something like <c:copy select="..."/> recognised]
</p:template>
This would allow the following simplifications (drawn from real
examples):
Replace
<p:insert position="first-child">
<p:input port="insertion">
<p:inline><Timestamp><here/></Timestamp></p:inline>
</p:input>
</p:insert>
<p:string-replace match="mt:Timestamp/mt:here">
<p:with-option name="replace" select="concat('"',$stamp,'"')"/>
</p:string-replace>
with
<p:template match="/top">
<top>
<c:copy select="@*"/>
<Timestamp>{$stamp}</Timestamp>
<c:copy select="node()"/>
</top>
</p:template>
Replace
<p:add-attribute match="c:request" attribute-name="href">
<p:with-option name="attribute-value" select="*/@uri"/>
<p:input port="source">
<p:inline>
<c:request method="GET">
<c:header name="Accept" value="application/rdf+xml"/>
</c:request>
</p:inline>
</p:input>
</p:add-attribute>
with
<p:template match="/*">
<c:request method="GET" href="{@uri}">
<c:header name="Accept" value="application/rdf+xml"/>
</c:request>
<p:template>
Replace
<p:add-attribute match="/*" attribute-name="set">
<p:with-option name="attribute-value" select="$set"/>
</p:add-attribute>
<p:add-attribute match="/*" attribute-name="group">
<p:with-option name="attribute-value" select="$group"/>
</p:add-attribute>
<p:add-attribute match="/*" attribute-name="test">
<p:with-option name="attribute-value" select="$test"/>
</p:add-attribute>
<p:add-attribute match="/*" attribute-name="validity">
<p:with-option name="attribute-value" select="$validity"/>
</p:add-attribute>
<p:add-attribute match="/*" attribute-name="x:outcome" xmlns:x="x">
<p:with-option name="attribute-value"
select="if ($validity=$expected) then 'win' else 'lose'"/>
</p:add-attribute>
with
<p:template match="/top" xmlns:x="x">
<top set="{$set}" group="{$group}" test="{$test}" validity="{$validity}"
x:outcome="{if ($validity=$expected) then 'win' else 'lose'}">
<c:copy select="@*|node()"/>
</top>
</p:template>
A richer and simpler approach would be to follow Richard Tobin's lead
in one of our Edinburgh XML tools, and interpret the contents more
along the following lines:
[interpreted as if] an XSLT template which is used to
construct the replacement for matched nodes.
In the stylesheet, the prefix xsl is bound to the XSL namespace.
A low-priority template rule is included that provides an
identity transform for nodes not matched by the template. For
convenience, a number of entities are defined for use in the
template:
&this; Copies the current node and recursively processes its
attributes and children. Equivalent to
<xsl:copy><xsl:apply-templates select=?@*|node()?/></xsl:copy>.
&attrs;
Processes the attributes of the current node. Equivalent
to <xsl:apply-templates select=?@*?/>
&children;
Processes the children of the current node. Equivalent to
<xsl:apply-templates select=?node()?/>.
&text; Copies the text of the current node. Equivalent to
<xsl:value-of select=?.?/>.
&space;
Inserts a space character. Equivalent to <xsl:text>
</xsl:text>.
&newline;
Inserts a newline character. Equivalent to
<xsl:text> </xsl:text>.
This would give
<p:template match="/top">
<top>
&attrs;
<Timestamp>{$stamp}</Timestamp>
&children;
</top>
</p:template>
instead, or, if we took the above literally and didn't mess with {},
<p:template match="/top">
<top>
&attrs;
<Timestamp><xsl:value-of select="$stamp"/></Timestamp>
&children;
</top>
</p:template>
and so on.
Either approach would obviously be even more useful if/when we allow
node-valued variables.
ht
- --
Henry S. Thompson, School of Informatics, University of Edinburgh
10 Crichton Street, Edinburgh EH8 9AB, SCOTLAND -- (44) 131 650-4440
Fax: (44) 131 651-1426, e-mail: ht@inf.ed.ac.uk
URL: http://www.ltg.ed.ac.uk/~ht/
[mail from me _always_ has a .sig like this -- mail without it is forged spam]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.6 (GNU/Linux)
iD8DBQFMZBufkjnJixAXWBoRAulEAJ48QTA79US7u+rUhBF1eAUpLpjrbACfS3om
/qTJGnZVd2506cZJHVbE4CE=
=7I1P
-----END PGP SIGNATURE-----
Received on Thursday, 12 August 2010 16:05:18 UTC