<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Reinventing XSLT in pure Javascript</title>
	<atom:link href="http://blog.silkapp.com/2009/12/reinventing-xslt-in-pure-javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.silkapp.com/2009/12/reinventing-xslt-in-pure-javascript/</link>
	<description>Silk Blog</description>
	<lastBuildDate>Thu, 05 Aug 2010 23:24:45 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<item>
		<title>By: Sebas</title>
		<link>http://blog.silkapp.com/2009/12/reinventing-xslt-in-pure-javascript/comment-page-1/#comment-557</link>
		<dc:creator>Sebas</dc:creator>
		<pubDate>Fri, 11 Jun 2010 09:29:20 +0000</pubDate>
		<guid isPermaLink="false">http://blog.typlab.com/?p=188#comment-557</guid>
		<description>Hey Jan Willem!

The ultimate reason we do not use XSL is that we need lightweight, incremental transformations. Unfortunately, that is something the in-browser XSLT implementations do not give us.

Furthermore, I think it is fair to say we use these combinators not for templating, but rather for reactive transformations. The syntax may look sub-optimal (which it certainly is), but the fact that it is pure javascript makes it really expressive.</description>
		<content:encoded><![CDATA[<p>Hey Jan Willem!</p>
<p>The ultimate reason we do not use XSL is that we need lightweight, incremental transformations. Unfortunately, that is something the in-browser XSLT implementations do not give us.</p>
<p>Furthermore, I think it is fair to say we use these combinators not for templating, but rather for reactive transformations. The syntax may look sub-optimal (which it certainly is), but the fact that it is pure javascript makes it really expressive.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Brikkelt</title>
		<link>http://blog.silkapp.com/2009/12/reinventing-xslt-in-pure-javascript/comment-page-1/#comment-556</link>
		<dc:creator>Brikkelt</dc:creator>
		<pubDate>Fri, 11 Jun 2010 08:59:56 +0000</pubDate>
		<guid isPermaLink="false">http://blog.typlab.com/?p=188#comment-556</guid>
		<description>Sadly - but perhaps understandably - you&#039;re sparing us the reactive implementation ;-)

Also, are you saying you&#039;ve dropped XSL as a template language altogether and moved forward/backward to writing HTML using the above functions? That would seem like a step backward to me: I can still sense the bad taste in my mouth of my first Perl scripts and the sweetness when I &#039;invented&#039; templating (and later when Lon introduced me to XML/XSL).

Nicely written article. Thanks for the inspiration.</description>
		<content:encoded><![CDATA[<p>Sadly &#8211; but perhaps understandably &#8211; you&#8217;re sparing us the reactive implementation ;-)</p>
<p>Also, are you saying you&#8217;ve dropped XSL as a template language altogether and moved forward/backward to writing HTML using the above functions? That would seem like a step backward to me: I can still sense the bad taste in my mouth of my first Perl scripts and the sweetness when I &#8216;invented&#8217; templating (and later when Lon introduced me to XML/XSL).</p>
<p>Nicely written article. Thanks for the inspiration.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: veged</title>
		<link>http://blog.silkapp.com/2009/12/reinventing-xslt-in-pure-javascript/comment-page-1/#comment-231</link>
		<dc:creator>veged</dc:creator>
		<pubDate>Sun, 28 Feb 2010 16:00:19 +0000</pubDate>
		<guid isPermaLink="false">http://blog.typlab.com/?p=188#comment-231</guid>
		<description>and one more typo:
var toc = mkElem(“ul”)(seq(deep(seq(isHeader, mkElem(“li”))(self)))); -- first `seq’ has only one arg, and look like unnecessary</description>
		<content:encoded><![CDATA[<p>and one more typo:<br />
var toc = mkElem(“ul”)(seq(deep(seq(isHeader, mkElem(“li”))(self)))); &#8212; first `seq’ has only one arg, and look like unnecessary</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: veged</title>
		<link>http://blog.silkapp.com/2009/12/reinventing-xslt-in-pure-javascript/comment-page-1/#comment-228</link>
		<dc:creator>veged</dc:creator>
		<pubDate>Thu, 25 Feb 2010 20:12:44 +0000</pubDate>
		<guid isPermaLink="false">http://blog.typlab.com/?p=188#comment-228</guid>
		<description>thanks for good post!
waiting commits at http://github.com/typLAB ;-)</description>
		<content:encoded><![CDATA[<p>thanks for good post!<br />
waiting commits at <a href="http://github.com/typLAB" rel="nofollow">http://github.com/typLAB</a> ;-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sebas</title>
		<link>http://blog.silkapp.com/2009/12/reinventing-xslt-in-pure-javascript/comment-page-1/#comment-221</link>
		<dc:creator>Sebas</dc:creator>
		<pubDate>Tue, 23 Feb 2010 15:36:49 +0000</pubDate>
		<guid isPermaLink="false">http://blog.typlab.com/?p=188#comment-221</guid>
		<description>Hello veged.

Very sharp, this is indeed a typo! Thanks for this notification. In this example the `deep&#039; combinator can only take one argument. 

Another way to write it down is to put an additional seq inside the `deep&#039;:
var toc = mkElem(“ul”)(seq(deep(seq(isHeader, mkElem(“li”))(self))));</description>
		<content:encoded><![CDATA[<p>Hello veged.</p>
<p>Very sharp, this is indeed a typo! Thanks for this notification. In this example the `deep&#8217; combinator can only take one argument. </p>
<p>Another way to write it down is to put an additional seq inside the `deep&#8217;:<br />
var toc = mkElem(“ul”)(seq(deep(seq(isHeader, mkElem(“li”))(self))));</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: veged</title>
		<link>http://blog.silkapp.com/2009/12/reinventing-xslt-in-pure-javascript/comment-page-1/#comment-214</link>
		<dc:creator>veged</dc:creator>
		<pubDate>Thu, 18 Feb 2010 09:42:48 +0000</pubDate>
		<guid isPermaLink="false">http://blog.typlab.com/?p=188#comment-214</guid>
		<description>Perhaps here is typo
  var toc = mkElem(&quot;ul&quot;)(seq(deep(isHeader, mkElem(&quot;li&quot;)(self))));

seems to be
  var toc = mkElem(&quot;ul&quot;)(seq(deep(isHeader), mkElem(&quot;li&quot;)(self)));</description>
		<content:encoded><![CDATA[<p>Perhaps here is typo<br />
  var toc = mkElem(&#8220;ul&#8221;)(seq(deep(isHeader, mkElem(&#8220;li&#8221;)(self))));</p>
<p>seems to be<br />
  var toc = mkElem(&#8220;ul&#8221;)(seq(deep(isHeader), mkElem(&#8220;li&#8221;)(self)));</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sebas</title>
		<link>http://blog.silkapp.com/2009/12/reinventing-xslt-in-pure-javascript/comment-page-1/#comment-97</link>
		<dc:creator>Sebas</dc:creator>
		<pubDate>Mon, 21 Dec 2009 09:36:54 +0000</pubDate>
		<guid isPermaLink="false">http://blog.typlab.com/?p=188#comment-97</guid>
		<description>Michael Kay wrote: &quot;It seems to me that all you have done is to strip off the syntactic sugar offered by the XPath syntax and expose the underlying functional semantics.&quot;

Yes, this is exactly what we have done! Because the underlying semantics are very clean rebuilding it was very easy. These combinators for themselves have no big advantage over XPath of course, but now that we have our own implementation in JavaScript extending (in multiple dimensions) becomes very easy. 

The reason for this post was showing other programmers that looking at the semantics of an existing system can change it from some black box magic into something simple and understandable. There was never an intention to present something that on itself could ever supersede XPath/XSLT.

Thanks for keeping XSLT functional!</description>
		<content:encoded><![CDATA[<p>Michael Kay wrote: &#8220;It seems to me that all you have done is to strip off the syntactic sugar offered by the XPath syntax and expose the underlying functional semantics.&#8221;</p>
<p>Yes, this is exactly what we have done! Because the underlying semantics are very clean rebuilding it was very easy. These combinators for themselves have no big advantage over XPath of course, but now that we have our own implementation in JavaScript extending (in multiple dimensions) becomes very easy. </p>
<p>The reason for this post was showing other programmers that looking at the semantics of an existing system can change it from some black box magic into something simple and understandable. There was never an intention to present something that on itself could ever supersede XPath/XSLT.</p>
<p>Thanks for keeping XSLT functional!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael Kay</title>
		<link>http://blog.silkapp.com/2009/12/reinventing-xslt-in-pure-javascript/comment-page-1/#comment-95</link>
		<dc:creator>Michael Kay</dc:creator>
		<pubDate>Sun, 20 Dec 2009 23:55:03 +0000</pubDate>
		<guid isPermaLink="false">http://blog.typlab.com/?p=188#comment-95</guid>
		<description>&quot;This enables us to incrementally rebuild the output of a transformation when only small parts of the input document change.&quot; 

This of course was always one of the major justifications for making XSLT/XPath a functional language.

It seems to me that all you have done is to strip off the syntactic sugar offered by the XPath syntax and expose the underlying functional semantics.</description>
		<content:encoded><![CDATA[<p>&#8220;This enables us to incrementally rebuild the output of a transformation when only small parts of the input document change.&#8221; </p>
<p>This of course was always one of the major justifications for making XSLT/XPath a functional language.</p>
<p>It seems to me that all you have done is to strip off the syntactic sugar offered by the XPath syntax and expose the underlying functional semantics.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Fabrice</title>
		<link>http://blog.silkapp.com/2009/12/reinventing-xslt-in-pure-javascript/comment-page-1/#comment-88</link>
		<dc:creator>Fabrice</dc:creator>
		<pubDate>Mon, 14 Dec 2009 10:29:36 +0000</pubDate>
		<guid isPermaLink="false">http://blog.typlab.com/?p=188#comment-88</guid>
		<description>I fail to see how replacing /p[@href]/em by seq(seq(isElem(&quot;p&quot;), hasAttr(&quot;href&quot;))
, seq(getChildren, isElem(&quot;em&quot;))) can be seen as simple or elegant...</description>
		<content:encoded><![CDATA[<p>I fail to see how replacing /p[@href]/em by seq(seq(isElem(&#8220;p&#8221;), hasAttr(&#8220;href&#8221;))<br />
, seq(getChildren, isElem(&#8220;em&#8221;))) can be seen as simple or elegant&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Martijn</title>
		<link>http://blog.silkapp.com/2009/12/reinventing-xslt-in-pure-javascript/comment-page-1/#comment-87</link>
		<dc:creator>Martijn</dc:creator>
		<pubDate>Mon, 14 Dec 2009 10:01:43 +0000</pubDate>
		<guid isPermaLink="false">http://blog.typlab.com/?p=188#comment-87</guid>
		<description>Nice! I especially like the type of seq.</description>
		<content:encoded><![CDATA[<p>Nice! I especially like the type of seq.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
