Subject: Re: [xsl] XSLT 2.0 Quine From: Chris Maloney <voldrani@xxxxxxxxx> Date: Thu, 11 Aug 2011 22:47:46 -0400 |
You are a crazy genius, and this is a thing of beauty! I can verify that it works -- amazing! Just a note, it works as a version 1.0 stylesheet too (as long as you change "2.0" to "1.0" everywhere, of course ;-) On Thu, Aug 11, 2011 at 1:21 PM, Xmlizer <xmlizer+xsllist@xxxxxxxxx> wrote: > Dear all, > > While working on the first XProc Quine[1] , I discover that there was > only two attempts to a quine inB XSLT 1.0 [2] > > The existing two are based on > * the DOE trick > * the document('') trick > > So I was a bit disappointed > > That's why I crafted this one which is not using DOE nor document trick > > <?xml version="1.0" encoding="UTF-8"?> > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> > B <!-- (c) Innovimax 2011 - XSLT 2.0 Quine without DOE --> > B <xsl:variable name="code"> > B B <xsl:element name="xsl:stylesheet"> > B B B <xsl:attribute name="version" select="'2.0'"/> > B B B <xsl:comment> (c) Innovimax 2011 - XSLT 2.0 Quine without DOE > </xsl:comment> > B B B <xsl:element name="xsl:variable"> > B B B B <xsl:attribute name="name" select="'code'"/> > B B B B <xsl:element name="foo"/> > B B B </xsl:element> > B B B <xsl:element name="xsl:template"> > B B B B <xsl:attribute name="match" select="'/'"/> > B B B B <xsl:element name="xsl:apply-templates"> > B B B B B <xsl:attribute name="select" select="'$code'"/> > B B B B B <xsl:attribute name="mode" select="'copy'"/> > B B B B </xsl:element> > B B B </xsl:element> > B B B <xsl:element name="xsl:template"> > B B B B <xsl:attribute name="match" select="'@*|node()'"/> > B B B B <xsl:attribute name="mode" select="'copy'"/> > B B B B <xsl:element name="xsl:copy"> > B B B B B <xsl:element name="xsl:apply-templates"> > B B B B B B <xsl:attribute name="select" select="'@*|node()'"/> > B B B B B B <xsl:attribute name="mode" select="'copy'"/> > B B B B B </xsl:element> > B B B B </xsl:element> > B B B </xsl:element> > B B B <xsl:element name="xsl:template"> > B B B B <xsl:attribute name="match" select="'foo'"/> > B B B B <xsl:attribute name="mode" select="'copy'"/> > B B B B <xsl:element name="xsl:apply-templates"> > B B B B B <xsl:attribute name="select" select="'$code'"/> > B B B B B <xsl:attribute name="mode" select="'el'"/> > B B B B </xsl:element> > B B B </xsl:element> > B B B <xsl:element name="xsl:template"> > B B B B <xsl:attribute name="match" select="'*'"/> > B B B B <xsl:attribute name="mode" select="'el'"/> > B B B B <xsl:element name="xsl:element"> > B B B B B <xsl:attribute name="name" select="'xsl:element'"/> > B B B B B <xsl:element name="xsl:attribute"> > B B B B B B <xsl:attribute name="name" select="'name'"/> > B B B B B B <xsl:attribute name="select" select="'name()'"/> > B B B B B </xsl:element> > B B B B B <xsl:element name="xsl:apply-templates"> > B B B B B B <xsl:attribute name="select" select="'@*|*|text()|comment()'"/> > B B B B B B <xsl:attribute name="mode" select="'el'"/> > B B B B B </xsl:element> > B B B B </xsl:element> > B B B </xsl:element> > B B B <xsl:element name="xsl:template"> > B B B B <xsl:attribute name="match" select="'@*'"/> > B B B B <xsl:attribute name="mode" select="'el'"/> > B B B B <xsl:element name="xsl:element"> > B B B B B <xsl:attribute name="name" select="'xsl:attribute'"/> > B B B B B <xsl:element name="xsl:attribute"> > B B B B B B <xsl:attribute name="name" select="'name'"/> > B B B B B B <xsl:attribute name="select" select="'name()'"/> > B B B B B </xsl:element> > B B B B B <xsl:element name="xsl:attribute"> > B B B B B B <xsl:attribute name="name" select="'select'"/> > B B B B B B <xsl:text>'</xsl:text> > B B B B B B <xsl:element name="xsl:value-of"> > B B B B B B B <xsl:attribute name="select" select="'.'"/> > B B B B B B </xsl:element> > B B B B B B <xsl:text>'</xsl:text> > B B B B B </xsl:element> > B B B B </xsl:element> > B B B </xsl:element> > B B B <xsl:element name="xsl:template"> > B B B B <xsl:attribute name="match" select="'text()'"/> > B B B B <xsl:attribute name="mode" select="'el'"/> > B B B B <xsl:element name="xsl:element"> > B B B B B <xsl:attribute name="name" select="'xsl:text'"/> > B B B B B <xsl:element name="xsl:value-of"> > B B B B B B <xsl:attribute name="select" select="'.'"/> > B B B B B </xsl:element> > B B B B </xsl:element> > B B B </xsl:element> > B B B <xsl:element name="xsl:template"> > B B B B <xsl:attribute name="match" select="'comment()'"/> > B B B B <xsl:attribute name="mode" select="'el'"/> > B B B B <xsl:element name="xsl:element"> > B B B B B <xsl:attribute name="name" select="'xsl:comment'"/> > B B B B B <xsl:element name="xsl:value-of"> > B B B B B B <xsl:attribute name="select" select="'.'"/> > B B B B B </xsl:element> > B B B B </xsl:element> > B B B </xsl:element> > B B </xsl:element> > B </xsl:variable> > B <xsl:template match="/"> > B B <xsl:apply-templates select="$code" mode="copy"/> > B </xsl:template> > B <xsl:template match="@*|node()" mode="copy"> > B B <xsl:copy> > B B B <xsl:apply-templates select="@*|node()" mode="copy"/> > B B </xsl:copy> > B </xsl:template> > B <xsl:template match="foo" mode="copy"> > B B <xsl:apply-templates select="$code" mode="el"/> > B </xsl:template> > B <xsl:template match="*" mode="el"> > B B <xsl:element name="xsl:element"> > B B B <xsl:attribute name="name" select="name()"/> > B B B <xsl:apply-templates select="@*|*|text()|comment()" mode="el"/> > B B </xsl:element> > B </xsl:template> > B <xsl:template match="@*" mode="el"> > B B <xsl:element name="xsl:attribute"> > B B B <xsl:attribute name="name" select="name()"/> > B B B <xsl:attribute name="select">'<xsl:value-of select="."/>'</xsl:attribute> > B B </xsl:element> > B </xsl:template> > B <xsl:template match="text()" mode="el"> > B B <xsl:element name="xsl:text"> > B B B <xsl:value-of select="."/> > B B </xsl:element> > B </xsl:template> > B <xsl:template match="comment()" mode="el"> > B B <xsl:element name="xsl:comment"> > B B B <xsl:value-of select="."/> > B B </xsl:element> > B </xsl:template> > </xsl:stylesheet> > > Cheers, > > Xmlizer > > [1] http://blog.innovimax.fr/index.php/2011/08/11/38-xproc-quine > [2] http://www2.informatik.hu-berlin.de/~obecker/XSLT/#quine
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] XSLT 2.0 Quine, Xmlizer | Thread | Re: [xsl] XSLT 2.0 Quine, Wendell Piez |
Re: [xsl] Silent Auction Winners, Sam Wilmott | Date | Re: [xsl] XSLT 2.0 Quine, Wendell Piez |
Month |