<?xml version="1.0"?>

<rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
>

<channel rdf:about="http://simon.incutio.com/syndicate/xml/rss1.0">
  <title>XML</title>
  <link>http://simon.incutio.com/</link>
  <description>Simon Willison's XML cateory</description>
  <language>en-uk</language>
  <webMaster>simon@incutio.com</webMaster>
  <items>
    <rdf:Seq>
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2005/02/08/maps" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2004/05/02/stayingValid" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2004/04/13/myriadOfMarkupSystems" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2003/12/20/php5XMLHighlights" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2003/12/16/relaxNGStandard" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2003/10/26/xulSafari" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2003/10/24/microsoftsXUL" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2003/10/21/xpathRocks" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2003/10/07/unstructured" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2003/09/15/newBlog" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2003/08/27/textareaValidation" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2003/08/13/noteToSelf" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2003/08/11/MTxslt" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2003/08/06/moreLinks" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2003/07/28/phpXpath" />
    </rdf:Seq>
  </items>
</channel>

<item rdf:about="http://simon.incutio.com/archive/2005/02/08/maps">
  <title>Google Maps and XSL</title>
  <description>&lt;p id=&quot;p-0&quot;&gt;I'll probably write more on this later, but it seems that &lt;a href=&quot;http://maps.google.com/&quot;&gt;Google Maps&lt;/a&gt; is using &lt;acronym title=&quot;eXtensible Stylesheet Language&quot;&gt;XSL&lt;/acronym&gt;. I spotted it loading the following pages while sniffing its activity with &lt;a href=&quot;http://livehttpheaders.mozdev.org/&quot;&gt;LiveHTTPHeaders&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;&lt;a href=&quot;http://maps.google.com/mapfiles/homepanel.xsl&quot;&gt;homepanel.xsl&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://maps.google.com/mapfiles/localinfo.xsl&quot;&gt;localinfo.xsl&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://maps.google.com/mapfiles/localpanel.xsl&quot;&gt;localpanel.xsl&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://maps.google.com/mapfiles/geocodepanel.xsl&quot;&gt;geocodepanel.xsl&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p id=&quot;p-1&quot;&gt;This is in addition to the (now expected) XMLHttpRequest stuff. There even appears to be some of Microsoft's weird &lt;a href=&quot;http://msdn.microsoft.com/workshop/author/vml/default.asp&quot; title=&quot;Introduction to Vector Markup Language (VML)&quot;&gt;VML&lt;/a&gt;, although as I'm on a Mac I don't have access to &lt;acronym title=&quot;Internet Explorer&quot;&gt;IE&lt;/acronym&gt;/Windows to see what it's doing with it.&lt;/p&gt;

&lt;p id=&quot;p-2&quot;&gt;The bulk of the Google Maps JavaScript appears to be hidden away in &lt;a href=&quot;http://www.google.com/mapfiles/maps.1.js&quot;&gt;maps.1.js&lt;/a&gt;, which becomes a lot more readable if you feed it through &lt;a href=&quot;http://www.prettyprinter.de/&quot;&gt;PrettyPrinter.de&lt;/a&gt;&lt;/p&gt;

&lt;p id=&quot;p-3&quot;&gt;As for Google Maps itself, it's an amazing piece of work but it's a shame they didn't follow &lt;a href=&quot;http://map.search.ch/&quot;&gt;map.search.ch&lt;/a&gt;'s lead in degrading gracefully to a static version for unsupported browsers.&lt;/p&gt;

&lt;p id=&quot;p-4&quot;&gt;If anyone has any further insights in to how it all works, please post them in a comment.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2005/02/08/maps</link>
  <dc:subject>Google, XML, DHTML and Javascript</dc:subject>
  <dc:date>2005-02-08T14:19:37-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2004/05/02/stayingValid">
  <title>Staying valid</title>
  <description>&lt;p&gt;&lt;a href=&quot;http://www.designbyfire.com/000085.html&quot; title=&quot;XHTML 1.0 Strict! For five minutes at least&quot;&gt;Andrei Herasimchuk&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite=&quot;http://www.designbyfire.com/000085.html&quot;&gt;&lt;p&gt;
There seems no automatic way to keep a site valid with web standards unless you close it off to the rest of the world to contribute to it. I will not do that anytime soon.
&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;There is: I'm doing it. Next Thursday will mark the one year anniversary of &lt;a href=&quot;http://simon.incutio.com/archive/2003/05/06/knifeEdge&quot;&gt;my switching to application/xhtml+xml&lt;/a&gt; as the content-type header for this site, for user agents that support it. Using that content-type forces Gecko engine browsers to refuse to render pages if they are not well-formed &lt;acronym title=&quot;eXtensible Markup Language&quot;&gt;XML&lt;/acronym&gt;, so if a page is invalid I hear about it pretty quickly.&lt;/p&gt;

&lt;p&gt;So how do you keep a frequently updated site with data from external sources and user comments valid? There are really only two things you need to do. Firstly, ensure that everything going IN to the system (entries and comments) is valid XHTML. I do that using a &lt;a href=&quot;http://simon.incutio.com/archive/2003/02/23/safeHtmlChecker&quot; title=&quot;Safe HTML Checker&quot;&gt;simple validation system&lt;/a&gt; for comments and &lt;a href=&quot;http://www.squarefree.com/archives/000033.html&quot; title=&quot;Blogidate XML well-formedness&quot;&gt;a bookmarklet&lt;/a&gt; for my own entries. Secondly, any and all data from external sources (my blogroll from blo.gs, blogmark &lt;acronym title=&quot;Universal Republic of Love&quot;&gt;URL&lt;/acronym&gt;s added using a bookmarklet) needs to be entity-escaped before being displayed on the site. In my case, a call to &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt;'s htmlspecialchars() function is all that's needed.&lt;/p&gt;

&lt;p&gt;I'm not saying my system is ideal - the need for well formed markup in comments is a major usability issue even on a site with an audience consisting mostly of web developers. But it's certainly possible to operate a site in &lt;acronym title=&quot;eXtensible HyperText Markup Language&quot;&gt;XHTML&lt;/acronym&gt; with frequent updates and user comments while staying valid at the same time.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2004/05/02/stayingValid</link>
  <dc:subject>Web Standards, XML</dc:subject>
  <dc:date>2004-05-02T21:55:53-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2004/04/13/myriadOfMarkupSystems">
  <title>A myriad of markup systems</title>
  <description>&lt;p&gt;It's hard to avoid the legions of custom markup systems out there these days. Every Wiki has it's own syntactical quirks, while packages like &lt;a href=&quot;http://daringfireball.net/projects/markdown/&quot;&gt;Markdown&lt;/a&gt;, &lt;a href=&quot;http://www.textism.com/tools/textile/&quot;&gt;Textile&lt;/a&gt;, &lt;a href=&quot;http://pear.php.net/pepr/pepr-bbcode-help.php&quot;&gt;BBCode&lt;/a&gt; (in dozens of variants), &lt;a href=&quot;http://docutils.sourceforge.net/rst.html&quot;&gt;reStructuredText&lt;/a&gt; offer easy ways of hooking markup conversion in to existing applications. When it comes to being totally over-implemented and infuratingly inconsistent, markup systems are rapidly catching up with template packages. Never one to miss out on an opportunity to reinvent the wheel, I've worked on several of each ;)&lt;/p&gt;

&lt;p&gt;My most recent markup handling attempt has just been published as part of my &lt;a href=&quot;http://www.sitepoint.com/article/bookmarklets&quot; title=&quot;Better Living Through Bookmarklets&quot;&gt;SitePoint article on Bookmarklets&lt;/a&gt; (&lt;a href=&quot;http://www.google.com/search?q=%22better+living+through+*%22&quot;&gt;clich&amp;#233;&lt;/a&gt;). It's a structured markup language in a bookmarklet: activate the bookmarklet to convert the text in any textarea on a page to &lt;acronym title=&quot;eXtensible HyperText Markup Language&quot;&gt;XHTML&lt;/acronym&gt;. The syntax is ridiculously simple, and serves my limited needs just fine:&lt;/p&gt;

&lt;pre&gt;&lt;samp&gt;
= This is a header

Here is a paragraph.

* This is a list of items
* Another item in the list
&lt;/samp&gt;&lt;/pre&gt;

&lt;p&gt;Converts to:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;xhtml&quot;&gt;
&amp;lt;h4&amp;gt;This is a header&amp;lt;/h4&amp;gt;

&amp;lt;p&amp;gt;Here is a paragraph.&amp;lt;/p&amp;gt;

&amp;lt;ul&amp;gt;
 &amp;lt;li&amp;gt;This is a list of items&amp;lt;/li&amp;gt;
 &amp;lt;li&amp;gt;Another item in the list&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The algorithm is simple, and easily portable to any language you care to mention:&lt;/p&gt;

&lt;ol&gt;
 &lt;li&gt;Normalise newlines to \n, for cross-platform consistency.&lt;/li&gt;
 &lt;li&gt;Split the text up on double newlines, to create a list of blocks.&lt;/li&gt;
 &lt;li&gt;For each block:
 &lt;ol&gt;
  &lt;li&gt;If it starts with an equals sign, wrap it in header tags.&lt;/li&gt;
  &lt;li&gt;If it starts with an asterisk, split it in to lines, make each a list item (stripping off the asterisk at the start of the line if required) and glue them all together inside a &lt;code class=&quot;xhtml&quot;&gt;&amp;lt;ul&amp;gt;&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Otherwise, wrap it in a &lt;code class=&quot;xhtml&quot;&gt;&amp;lt;p&amp;gt;&lt;/code&gt; tag &lt;em&gt;provided it doesn't have one already&lt;/em&gt;.&lt;/li&gt;
 &lt;/ol&gt;&lt;/li&gt;
 &lt;li&gt;Glue everything back together again with a couple of newlines, to make the underlying &lt;acronym title=&quot;eXtensible HyperText Markup Language&quot;&gt;XHTML&lt;/acronym&gt; look pretty.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The bookmarklet comes in two flavours: &lt;a href=&quot;javascript:(function() { var tas = document.getElementsByTagName('textarea'); for (var i = 0; i &amp;lt; tas.length; i++) { var ta = tas[i]; var text = ta.value.replace(/(\r\n|\r|\n)/g, '\n'); var paras = text.split(/\n{2,}/); for (var i = 0; i &amp;lt; paras.length; i++) { if (/^\* /.test(paras[i])) { var lines = paras[i].split('\n'); for (var j = 0; j &amp;lt; lines.length; j++) { lines[j] = ' &amp;lt;li&amp;gt;' + lines[j].replace(/^\* /, '') + '&amp;lt;/li&amp;gt;'; } paras[i] = '&amp;lt;ul&amp;gt;\n' + lines.join('\n') + '\n&amp;lt;/ul&amp;gt;'; } if (/^= /.test(paras[i])) { paras[i] = '&amp;lt;h4&amp;gt;' + paras[i].replace(/^= /, '') + '&amp;lt;/h4&amp;gt;'; } if (!/^&amp;lt;(p|ul|li|h4)&amp;gt;/.test(paras[i])) { paras[i] = '&amp;lt;p&amp;gt;' + paras[i]; } if (!/&amp;lt;\/(p|ul|li|h4)&amp;gt;$/.test(paras[i])) { paras[i] += '&amp;lt;/p&amp;gt;'; } } ta.value = paras.join('\n\n'); } })();&quot;&gt;Expand HTML Shorthand&lt;/a&gt; (the full version) and &lt;a href=&quot;javascript:(function(){var tas=document.getElementsByTagName('textarea'),ta,t,ps,i,l,j;for(i=0;i&amp;lt;tas.length;i++){ta=tas[i];
t=ta.value.replace(/(\r\n|\r|\n)/g,'\n');ps=t.split(/\n{2,}/);for(i=0;i&amp;lt;ps.length;i++){if(/^\* /.test(ps[i])){l=ps[i].split('\n');for(j=0;j&amp;lt;l.length;j++){l[j]=' &amp;lt;li&amp;gt;'+l[j].replace(/^\* /,'')+'&amp;lt;/li&amp;gt;';}ps[i]='&amp;lt;ul&amp;gt;\n'+l.join('\n')+'\n&amp;lt;/ul&amp;gt;';}if(!/^&amp;lt;(p|ul|li|h4)&amp;gt;/.test(ps[i])){ps[i]='
&amp;lt;p&amp;gt;'+ps[i];}if(!/&amp;lt;\/(p|ul|li|h4)&amp;gt;$/.test(ps[i])){ps[i]+='&amp;lt;/p&amp;gt;';}}ta.value=ps.join('\n\n');}})();&quot;&gt;Expand HTML Shorthand IE&lt;/a&gt;, which loses header support in order to fit within &lt;acronym title=&quot;Internet Explorer&quot;&gt;IE&lt;/acronym&gt;'s rippling 508 character limit. A more capable bookmarklet could be built using the import-script-stub method &lt;a href=&quot;http://www.sitepoint.com/article/bookmarklets/2&quot;&gt;described in my article&lt;/a&gt;, but the implementation of such a thing is left as an exercise for the reader (I've &lt;em&gt;always&lt;/em&gt; wanted to say that).&lt;/p&gt;

&lt;p&gt;Incidentally, there's a very common bug in markup systems that allow inline styles that proves extremely difficult to fix: that of improperly nested tags. Say you have a system where *&lt;strong&gt;text&lt;/strong&gt;* is bold and _&lt;em&gt;text&lt;/em&gt;_ is italic; what happens when the user enters _&lt;em&gt;italic&lt;/em&gt;*&lt;strong&gt;&lt;em&gt;italic-bold&lt;/em&gt;&lt;/strong&gt;_&lt;strong&gt;bold&lt;/strong&gt;*? Most systems (and that includes Markdown, Textile and my home-rolled Python solution) use naive regular expressions for inline markup processing and will output vadly formed &lt;acronym title=&quot;eXtensible HyperText Markup Language&quot;&gt;XHTML&lt;/acronym&gt;: &lt;code class=&quot;xhtml&quot;&gt;&amp;lt;em&amp;gt;italic&amp;lt;strong&amp;gt;italic-bold&amp;lt;/em&amp;gt;bold&amp;lt;/strong&amp;gt;&lt;/code&gt;. To truly solve this problem requires a context-sensitive parser, which involves an unpleasantly large amount of effort to solve what looks like a simple bug.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2004/04/13/myriadOfMarkupSystems</link>
  <dc:subject>XML, DHTML and Javascript</dc:subject>
  <dc:date>2004-04-13T04:58:54-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2003/12/20/php5XMLHighlights">
  <title>XML highlights for PHP 5</title>
  <description>&lt;p&gt;&lt;a href=&quot;http://slides.bitflux.ch/phpconf2003/&quot;&gt;XML in PHP5: An in-depth look into advanced XML features&lt;/a&gt; (via &lt;a href=&quot;http://keithdevens.com/weblog/archive/2003/Dec/20/links&quot; title=&quot;Links&quot;&gt;Keith&lt;/a&gt;) does exactly what it says on the tin. Here are the bits that caught my eye:&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;&lt;a href=&quot;http://slides.bitflux.ch/phpconf2003/slide_22.html&quot;&gt;HTML Support in ext/xml&lt;/a&gt; - PHP 5 can load in not well-formed HTML documents and create a DOM tree from them.&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://slides.bitflux.ch/phpconf2003/slide_24.html&quot;&gt;XPath support&lt;/a&gt; - and it &lt;a href=&quot;http://slides.bitflux.ch/phpconf2003/slide_23.html&quot; title=&quot;HTML Example&quot;&gt;works with HTML&lt;/a&gt; loaded via the above.&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://slides.bitflux.ch/phpconf2003/slide_26.html&quot;&gt;XML Validation&lt;/a&gt;, including support for RelaxNG! I wonder if they'll support compact syntax.&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://slides.bitflux.ch/phpconf2003/slide_16.html&quot;&gt;Extending DOM Classes&lt;/a&gt; - this is really cool, and demonstrates how much more mature PHP 5's OOP support is.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unforuntately, my biggest criticism of &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; remains: all of the above is supported using functions built in to the default namespace! The lack of a smart namespace system (like Python's modules) really gets in the way when you start trying to write reusable code or large applications.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2003/12/20/php5XMLHighlights</link>
  <dc:subject>XML, PHP</dc:subject>
  <dc:date>2003-12-20T23:44:53-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2003/12/16/relaxNGStandard">
  <title>RELAX NG now an ISO standard</title>
  <description>&lt;p&gt;Via &lt;a href=&quot;http://www.steptwo.com.au/columntwo/archives/001029.html&quot; title=&quot;Column Two: RELAX NG now a full ISO International Standard&quot;&gt;James Robertson&lt;/a&gt;, RELAX NG (altogether too many caps) &lt;a href=&quot;http://xmlhack.com/read.php?item=2119&quot; title=&quot;RELAX NG now a full ISO International Standard&quot;&gt;has been published by ISO&lt;/a&gt; as an International Standard. RELAX NG compact syntax is will &lt;a href=&quot;http://relaxng.org/pipermail/relaxng-user/2003-December/000200.html&quot; title=&quot;[relaxng-user] Compact syntax ISO standardization&quot;&gt;hopefully join it soon&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;RELAX NG is the sane alternative to &lt;acronym title=&quot;eXtensible Markup Language&quot;&gt;XML&lt;/acronym&gt; Schema. It's a schema language which allows you to define the &quot;shape&quot; of a class of &lt;acronym title=&quot;eXtensible Markup Language&quot;&gt;XML&lt;/acronym&gt; documents - a bit like a &lt;acronym title=&quot;Document Type Definition&quot;&gt;DTD&lt;/acronym&gt; but far more flexible. The reason I like it is the &lt;a href=&quot;http://www.xml.com/pub/a/2002/06/19/rng-compact.html&quot; title=&quot;XML.com: RELAX NG's Compact Syntax&quot;&gt;compact syntax&lt;/a&gt;, which lets you define schemas using a non-&lt;acronym title=&quot;eXtensible Markup Language&quot;&gt;XML&lt;/acronym&gt; syntax similar in some ways to &lt;acronym title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/acronym&gt;. This makes defining new types of &lt;acronym title=&quot;eXtensible Markup Language&quot;&gt;XML&lt;/acronym&gt; document far less unpleasant.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2003/12/16/relaxNGStandard</link>
  <dc:subject>XML</dc:subject>
  <dc:date>2003-12-16T03:41:03-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2003/10/26/xulSafari">
  <title>XUL in Safari</title>
  <description>&lt;p&gt;Safari 1.1 is included with the new release of Mac OS X, Panther. From Dave Hyatt's list of &lt;a href=&quot;http://weblogs.mozillazine.org/hyatt/archives/2003_10.html#004249&quot; title=&quot;Safari 1.1&quot;&gt;Safari 1.1 features&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite=&quot;http://weblogs.mozillazine.org/hyatt/archives/2003_10.html#004249&quot;&gt;&lt;p&gt;A complete implementation of the XUL box model. Safari on Panther supports the complete XUL box model, including horizontal and vertical boxes, the ability to flex, and the ability to reorder content and reverse content. If you're building canned content that you control using WebKit, you'll find a whole new range of layout possibilities at your disposal. Need to create dynamically sized headers and footers and flexible center content? The XUL box model can do that. Need to center an object within the viewport? The XUL box model can do that too.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;With Microsoft's alternative to &lt;acronym title=&quot;XML User interface Language&quot;&gt;XUL&lt;/acronym&gt; seemingly &lt;a href=&quot;http://simon.incutio.com/archive/2003/10/24/microsoftsXUL&quot; title=&quot;Microsoft's XUL&quot;&gt;a few years away&lt;/a&gt;, are Apple looking to beat them to it with an implementation that's compatible with Mozilla?&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2003/10/26/xulSafari</link>
  <dc:subject>XML, Browsers</dc:subject>
  <dc:date>2003-10-26T01:20:57-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2003/10/24/microsoftsXUL">
  <title>Microsoft's XUL</title>
  <description>&lt;p&gt;According to &lt;a href=&quot;http://longhornblogs.com/rdawson/posts/496.aspx&quot; title=&quot;Why there hasn't been development of IE&quot;&gt;this Microsoft blogger&lt;/a&gt; the reason IE development has seemed quiet of late is that they've been working hard on &lt;acronym title=&quot;XML Application Markup Language&quot;&gt;XAML&lt;/acronym&gt;, an &lt;acronym title=&quot;eXtensible Markup Language&quot;&gt;XML&lt;/acronym&gt; Application Markup Language which &lt;q cite=&quot;http://longhornblogs.com/rdawson/posts/496.aspx&quot;&gt;is a way to create applications in the browser (or out for that matter) [...] It is basically an XML structure with CSS and JavaScript.  The CSS defines the appearance and the JavaScript dictates behavior.&lt;/q&gt;&lt;/p&gt;

&lt;p&gt;Sound familiar? It should do - that's exactly what &lt;acronym title=&quot;XML User interface Language&quot;&gt;XUL&lt;/acronym&gt; does. On the plus side, this completely validates the grossly under-appreciated importance of Mozilla's biggest secret. On the negative side, this looks set to represent the &lt;em&gt;ultimate&lt;/em&gt; browser lock-in - in a few years time when &lt;acronym title=&quot;Internet Explorer&quot;&gt;IE&lt;/acronym&gt; 7 comes as standard on new &lt;acronym title=&quot;Personal Computer&quot;&gt;PC&lt;/acronym&gt;s I wouldn't be surprised to see the corporate software development world moving almost exclusively to this technology - after all, it's going to be extremely easy both to develop and to distribute and it will have all of the benefits of a web application without the downside of the restricted &lt;acronym title=&quot;Graphical User Interface&quot;&gt;GUI&lt;/acronym&gt;s offered by &lt;acronym title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/acronym&gt;.&lt;/p&gt;

&lt;p&gt;Of course, Microsoft might make it an open standard. But then I might win the lottery next week.&lt;/p&gt;

&lt;p&gt;I wonder if it will be possible to transform &lt;acronym title=&quot;XML Application Markup Language&quot;&gt;XAML&lt;/acronym&gt; in to &lt;acronym title=&quot;XML User interface Language&quot;&gt;XUL&lt;/acronym&gt; using &lt;acronym title=&quot;XML Stylesheet Language Transformations&quot;&gt;XSLT&lt;/acronym&gt;?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; It has been pointed out that the author of the above blog entry is not a Microsoft employee.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2003/10/24/microsoftsXUL</link>
  <dc:subject>Mozilla, XML</dc:subject>
  <dc:date>2003-10-24T15:59:41-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2003/10/21/xpathRocks">
  <title>Using XPath to mine XHTML</title>
  <description>&lt;p&gt;This morning, I finally decided to &lt;a href=&quot;http://users.skynet.be/sbi/libxml-python/&quot; title=&quot;Libxml and Libxslt Python Bindings for Windows&quot;&gt;install libxml2&lt;/a&gt; and see what &lt;a href=&quot;http://www.xmldatabases.org/WK/blog/607?t=item&quot; title=&quot;Givin libxml2 some love&quot;&gt;all the fuss&lt;/a&gt; was about, in particular with respect to XPath. What followed is best described as an enlightening experience.&lt;/p&gt;

&lt;p&gt;XPath is a beautifully elegant way of adressing &quot;nodes&quot; within an &lt;acronym title=&quot;eXtensible Markup Language&quot;&gt;XML&lt;/acronym&gt; document. XPath expressions look a little like file paths, for example:&lt;/p&gt;

&lt;dl&gt;
 &lt;dt&gt;&lt;code class=&quot;xpath&quot;&gt;/first/second&lt;/code&gt;&lt;/dt&gt;
 &lt;dd&gt;Match any &lt;code class=&quot;xml&quot;&gt;&amp;lt;second&amp;gt;&lt;/code&gt; elements that occur inside a &lt;code class=&quot;xml&quot;&gt;&amp;lt;first&amp;gt;&lt;/code&gt; element that is the root element of the document&lt;/dd&gt;
 &lt;dt&gt;&lt;code class=&quot;xpath&quot;&gt;//second&lt;/code&gt;&lt;/dt&gt;
 &lt;dd&gt;Match all &lt;code class=&quot;xml&quot;&gt;&amp;lt;second&amp;gt;&lt;/code&gt; elements irrespective of their place in the document&lt;/dd&gt;
 &lt;dt&gt;&lt;code class=&quot;xpath&quot;&gt;//second[@hi]&lt;/code&gt;&lt;/dt&gt;
 &lt;dd&gt;Match all &lt;code class=&quot;xml&quot;&gt;&amp;lt;second&amp;gt;&lt;/code&gt; elements with a 'hi' attribute&lt;/dd&gt;
 &lt;dt&gt;&lt;code class=&quot;xpath&quot;&gt;//second[@hi=&quot;there&quot;]&lt;/code&gt;&lt;/dt&gt;
 &lt;dd&gt;Match all &lt;code class=&quot;xml&quot;&gt;&amp;lt;second&amp;gt;&lt;/code&gt; elements with a 'hi' attribute that equals &quot;there&quot;&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;A full &lt;a href=&quot;http://www.zvon.org/xxl/XPathTutorial/General/examples.html&quot;&gt;XPath tutorial&lt;/a&gt; is available.&lt;/p&gt;

&lt;p&gt;The Python libxml2 bindings make running XPath expressions incredibly simple. Here's some code that extracts the titles of all of the entries on my Kansas blog from the site's &lt;acronym title=&quot;Really Simply Syndication&quot;&gt;RSS&lt;/acronym&gt; feed:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;python&quot;&gt;&amp;gt;&amp;gt;&amp;gt; import libxml2
&amp;gt;&amp;gt;&amp;gt; import urllib
&amp;gt;&amp;gt;&amp;gt; rss = libxml2.parseDoc(
      urllib.urlopen('http://www.a-year-in-kansas.com/syndicate/').read())
&amp;gt;&amp;gt;&amp;gt; rss.xpathEval('//item/title')
[&amp;lt;xmlNode (title) object at 0xb4b260&amp;gt;, &amp;lt;xmlNode (title) object at 0xa99968&amp;gt;, 
&amp;lt;xmlNode (title) object at 0x10dce68&amp;gt;]
&amp;gt;&amp;gt;&amp;gt; [node.content for node in rss.xpathEval('//item/title')]
['Music and Brunch', 'House hunting', 'Arrival']
&amp;gt;&amp;gt;&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Why is this so exciting? I've been &lt;a href=&quot;http://simon.incutio.com/archive/2002/06/16/myFirstXhtmlMindBomb&quot; title=&quot;My first XHTML mind bomb&quot;&gt;saying&lt;/a&gt; &lt;a href=&quot;http://simon.incutio.com/archive/2002/08/11/benefitsOfXhtml&quot; title=&quot;Benefits of XHTML&quot;&gt;for&lt;/a&gt; &lt;a href=&quot;http://simon.incutio.com/archive/2003/01/06/xhtmlIsJustFine&quot; title=&quot;XHTML is just fine&quot;&gt;over&lt;/a&gt; &lt;a href=&quot;http://simon.incutio.com/archive/2003/01/08/xhtmlIsStillGreatForContent&quot; title=&quot;XHTML is still great for content&quot;&gt;a&lt;/a&gt; &lt;a href=&quot;http://simon.incutio.com/archive/2003/08/03/futureProotContent&quot; title=&quot;XHTML for future-proof content&quot;&gt;year&lt;/a&gt; that &lt;acronym title=&quot;eXtensible HyperText Markup Language&quot;&gt;XHTML&lt;/acronym&gt; is an ideal format for storing pieces of content in a database or content management system. Serving content to browsers as &lt;acronym title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/acronym&gt; 4 makes perfect sense, but storing your actual content as &lt;acronym title=&quot;eXtensible Markup Language&quot;&gt;XML&lt;/acronym&gt; gives you the ability to process that content in the future using &lt;acronym title=&quot;eXtensible Markup Language&quot;&gt;XML&lt;/acronym&gt; tools.&lt;/p&gt;

&lt;p&gt;So far, the best example of a powerful tool for manipulating this stored &lt;acronym title=&quot;eXtensible Markup Language&quot;&gt;XML&lt;/acronym&gt; has been &lt;acronym title=&quot;eXtensible Stylesheet Language Transformations&quot;&gt;XSLT&lt;/acronym&gt;. &lt;acronym title=&quot;eXtensible Stylesheet Language Transformations&quot;&gt;XSLT&lt;/acronym&gt; has its fans, but is also often criticised as being unintuitive and having a steep learning curve. XPath is a far better example of a powerful, easy to use tool that can be brought to bare on &lt;acronym title=&quot;eXtensible HyperText Markup Language&quot;&gt;XHTML&lt;/acronym&gt; content.&lt;/p&gt;

&lt;p&gt;Enough talk, here's an example of what I mean. The following code snippet creates a Python dictionary of all of the acronyms currently visible on the front page of my blog, mapping their shortened version to the expanded text (extracted from the title attribute):&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;python&quot;&gt;
&amp;gt;&amp;gt;&amp;gt; blog = libxml2.parseDoc(
    urllib.urlopen('http://simon.incutio.com/').read())
&amp;gt;&amp;gt;&amp;gt; ctxt = blog.xpathNewContext()
&amp;gt;&amp;gt;&amp;gt; ctxt.xpathRegisterNs('xhtml', 'http://www.w3.org/1999/xhtml')
0
&amp;gt;&amp;gt;&amp;gt; acronyms = dict([(a.content, a.prop('title')) 
    for a in ctxt.xpathEval('//xhtml:acronym')])
&amp;gt;&amp;gt;&amp;gt; for acronym, fulltext in acronyms.items():
	print acronym, ':', fulltext


DHTML : Dynamic HyperText Markup Language
URL : Universal Republic of Love
HTML : HyperText Markup Language
SIG : Special Interest Group
PHP : PHP: Hypertext Preprocessor
CSS : Cascading Style Sheets
&amp;gt;&amp;gt;&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The above code is slightly more complicated than the first example, as using XPath with a document that uses &lt;acronym title=&quot;eXtensible Markup Language&quot;&gt;XML&lt;/acronym&gt; namespaces requires some extra work to register the namespace with the XPath parser. Still, it's a pretty short piece of code considering what it does.&lt;/p&gt;

&lt;p&gt;For an example of how powerful XPath can be on a much larger scale, take a look at Sam Ruby's &lt;a href=&quot;http://www.intertwingly.net/blog/1601.html&quot;&gt;XPath enabled blog search feature&lt;/a&gt;.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2003/10/21/xpathRocks</link>
  <dc:subject>XML, [X]HTML and CSS, Python</dc:subject>
  <dc:date>2003-10-21T05:31:23-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2003/10/07/unstructured">
  <title>Unstructured linkage</title>
  <description>&lt;ul&gt;
 &lt;li&gt;Tom Gilder: &lt;a href=&quot;http://blog.tom.me.uk/2003/10/07/absolutely_fucking_nuts.php&quot;&gt;Absolutely fucking nuts&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://whatdoiknow.org/archives/001254.shtml&quot;&gt;Get ready for IE changes&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://wolfram.org/writing/howto/3.html&quot;&gt;Score Higher in Google Search Engine (and why Google is saving the web)&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://www.myelin.co.nz/post/2003/10/7/#200310072&quot;&gt;High performance XML-RPC&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://lcamtuf.coredump.cx/juggling_with_packets.txt&quot;&gt;Juggling with packets: floating data storage&lt;/a&gt; (via &lt;a href=&quot;http://www.nedbatchelder.com/blog/200310.html#e20031007T063004&quot; title=&quot;Juggling with packets&quot;&gt;Ned&lt;/a&gt;)&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://www.xml.com/pub/a/2003/10/01/deviant.html&quot;&gt;Taking the Pulse of XML Editing&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://www.javaworld.com/javaworld/jw-10-2003/jw-1003-generics.html?&quot;&gt;Beware the dangers of generic Exceptions&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://a.wholelottanothing.org/features.blah/entry/007472&quot;&gt;Blogging for Dollars&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://www.agcs.com/supportv2/techpapers/patterns/papers/respat.htm&quot;&gt;Resign Patterns: Ailments of Unsuitable Project-Disoriented Software&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://www.patchdayreview.com/&quot;&gt;PatchDayReview.com&lt;/a&gt; - Explaining Microsoft's Weekly Patches in Non-Technical Terms&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://xao-php.sourceforge.net/&quot;&gt;XML Application Objects&lt;/a&gt; (via the &lt;a href=&quot;http://www.sitepointforums.com/showthread.php?postid=953326&quot; title=&quot;NEW: XML Application Objects&quot;&gt;SitePoint Forums&lt;/a&gt;)&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://www.ibiblio.org/xml/books/bible2/chapters/ch17.html&quot;&gt;Chapter 17 of the  XML Bible: XSL Transformations&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://www.eastbayexpress.com/issues/2003-09-17/music.html/1/index.html&quot;&gt;Radiohead, as drawn by 5th graders&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://www.tpsonline.org.uk/&quot;&gt;Telephone Preference Service&lt;/a&gt;, the UK Do Not Call list&lt;/li&gt;
&lt;/ul&gt;</description>
  <link>http://simon.incutio.com/archive/2003/10/07/unstructured</link>
  <dc:subject>XML, Programming, Online Issues</dc:subject>
  <dc:date>2003-10-07T16:09:57-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2003/09/15/newBlog">
  <title>New content management blog</title>
  <description>&lt;p&gt;&lt;a href=&quot;http://www.nmpub.com/blog/&quot;&gt;Ideas in Technology and Publishing&lt;/a&gt; is a great new blog covering content management, &lt;acronym title=&quot;eXtensible Markup Language&quot;&gt;XML&lt;/acronym&gt; and other publishing related technologies. It's less than a month old so it's still possible to read through the archives in full, which I've just done and recommend to anyone with an interest in content management.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2003/09/15/newBlog</link>
  <dc:subject>XML, Content Management</dc:subject>
  <dc:date>2003-09-15T11:06:25-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2003/08/27/textareaValidation">
  <title>XML textarea validation bookmarklet</title>
  <description>&lt;p&gt;Jesse Ruderman's &lt;a href=&quot;http://www.squarefree.com/archives/000031.html&quot;&gt;Blogidate bookmarklets&lt;/a&gt; cycle through all of the textareas on the current page and submit their contents for validation. I suggested an alternative approach, and to my great delight has has followed it up with the essential &lt;a href=&quot;http://www.squarefree.com/archives/000033.html&quot;&gt;Blogidate XML well-formedness&lt;/a&gt;. One click, and each textarea on the page will be checked to see if it contains valid &lt;acronym title=&quot;eXtensible HyperText Markup Language&quot;&gt;XHTML&lt;/acronym&gt;. If it does, the background goes green - if not, it goes red. Hopefully I'll never post another invalid entry (my &lt;a href=&quot;http://simon.incutio.com/archive/2002/11/07/javascriptXmlParser&quot; title=&quot;Javascript XML parser&quot;&gt;previous solution&lt;/a&gt; broke when I switched to &lt;code&gt;application/xml+xhtml&lt;/code&gt;).&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2003/08/27/textareaValidation</link>
  <dc:subject>XML, [X]HTML and CSS, DHTML and Javascript</dc:subject>
  <dc:date>2003-08-27T07:27:31-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2003/08/13/noteToSelf">
  <title>Note to self</title>
  <description>&lt;p&gt;When writing an &lt;acronym title=&quot;eXtensible Markup Language&quot;&gt;XML&lt;/acronym&gt; parsing class in &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt;, don't forget the ampersands in the following code snippet:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;php&quot;&gt;xml_set_element_handler($parser, array(&amp;amp;$this, '_tagOpen'), array(&amp;amp;$this, '_tagClose'));
xml_set_character_data_handler($parser, array(&amp;amp;$this, '_cdata'));
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Failure to include them can lead to two days of debugging, frustration and hair loss. Solution found thanks to &lt;a href=&quot;http://www.keithdevens.com/weblog/archive/2003/Aug/13/HATE-PHP&quot; title=&quot;I hate PHP&quot;&gt;Keith's PHP rant&lt;/a&gt; (which itself reads like the result of several days of hell). Roll on &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; 5, where objects are passed by reference by default.&lt;/p&gt;
</description>
  <link>http://simon.incutio.com/archive/2003/08/13/noteToSelf</link>
  <dc:subject>XML, PHP</dc:subject>
  <dc:date>2003-08-13T17:20:27-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2003/08/11/MTxslt">
  <title>Moveably Type with XSLT</title>
  <description>&lt;p&gt;Kevin Davis has set up an &lt;a href=&quot;http://alazanto.org/weblog/mt_carbon/a_small_demonstration.php&quot; title=&quot;A Small Demonstration&quot;&gt;impressive demonstration&lt;/a&gt; of the power of Moveable Type templates when combined with browser-side &lt;acronym title=&quot;Extensible Stylesheet Language Transformations&quot;&gt;XSLT&lt;/acronym&gt; transformations. He's set up &lt;acronym title=&quot;Moveable Type&quot;&gt;MT&lt;/acronym&gt; to output an &lt;acronym title=&quot;eXtensible Markup Language&quot;&gt;XML&lt;/acronym&gt; document containing just his entries (similar to an &lt;acronym title=&quot;Really Simple Syndication&quot;&gt;RSS&lt;/acronym&gt; feed), along with a link to an &lt;acronym title=&quot;Extensible Stylesheet Language Transformations&quot;&gt;XSLT&lt;/acronym&gt; stylesheet that causes Mozilla and &lt;acronym title=&quot;Internet Explorer&quot;&gt;IE&lt;/acronym&gt; 6 to transform the entry and render it as &lt;acronym title=&quot;eXtensible HyperText Markup Language&quot;&gt;XHTML&lt;/acronym&gt;.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2003/08/11/MTxslt</link>
  <dc:subject>XML</dc:subject>
  <dc:date>2003-08-11T19:13:35-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2003/08/06/moreLinks">
  <title>More links</title>
  <description>&lt;p&gt;Clearing out another several days worth of tabs. Some day I'm gonna get me a link-roll.&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;&lt;a href=&quot;http://www.happycog.com/lectures/dwws/&quot;&gt;Zeldman's presentation on web standards&lt;/a&gt;, including a &lt;a href=&quot;http://www.happycog.com/lectures/dwws/24.html&quot;&gt;gallery of commercial sites&lt;/a&gt; designed with &lt;acronym title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/acronym&gt;.&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://www.mezzoblue.com/cgi-bin/mt/mezzo/archives/000207.asp&quot; title=&quot;Writing Assignments, FIR&quot;&gt;mezzoblue is now in CSS&lt;/a&gt;, accompanied by great news of a revivial of the excellent glasshaus web development book series.&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://uche.ogbuji.net/uche.ogbuji.net/tech/4Suite/anobind/&quot;&gt;Anobind&lt;/a&gt;, a Pythonic &lt;acronym title=&quot;eXtensible Markup Language&quot;&gt;XML&lt;/acronym&gt; &lt;acronym title=&quot;Application Programming Interface&quot;&gt;API&lt;/acronym&gt;.&lt;/li&gt;
 &lt;li&gt;Pseudo Design's Bridgeport design journal: &lt;a href=&quot;http://www.itnextgen.net/pseudo/archives/design_journal/bridgeport_day_1_intro.php&quot;&gt;Day 1: Intro&lt;/a&gt; and &lt;a href=&quot;http://www.itnextgen.net/pseudo/archives/design_journal/bridgeport_day_2_technology_choice.php&quot;&gt;Day 2: Technology Choice&lt;/a&gt;.&lt;/li&gt;
 &lt;li&gt;Dive Into Python: &lt;a href=&quot;http://diveintopython.org/apihelper_andor.html&quot;&gt;The peculiar nature of and and or&lt;/a&gt; (who says Python doesn't have a tertiary statement?)&lt;/li&gt;
 &lt;li&gt;Doug Bowman &lt;a href=&quot;http://www.stopdesign.com/log/2003/08/05/see_also.html&quot; title=&quot;See Also&quot;&gt;adds his own special flair&lt;/a&gt; to the link-blog concept.&lt;/li&gt;
 &lt;li&gt;Max Design: &lt;a href=&quot;http://www.maxdesign.com.au/presentation/em/&quot;&gt;Ideal line length for content&lt;/a&gt; using ems.&lt;/li&gt;
 &lt;li&gt;Python Cookbook: &lt;a href=&quot;http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/171463&quot;&gt;MySQL and accessing database results by field&lt;/a&gt;. Further Python database documentation on &lt;a href=&quot;http://www.devshed.com/Server_Side/Python/PythonMySQL/&quot; title=&quot;MySQL Connectivity With Python&quot;&gt;DevShed (MySQL)&lt;/a&gt; and &lt;a href=&quot;http://www.amk.ca/python/writing/DB-API.html&quot; title=&quot;The Python DB-API interface&quot;&gt;amk.ca (DB_API)&lt;/a&gt;.&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://f14web.com.ar/inkel/2003/07/30/comment_preview_with_js_and_dom.html&quot;&gt;Comment preview with JavaScript and DOM&lt;/a&gt; - comment previews without POSTing to the server.&lt;/li&gt;
 &lt;li&gt;Dorothea is &lt;a href=&quot;http://www.yarinareth.net/caveatlector/archive/week_2003_08_03.html#e001997&quot; title=&quot;Syndication Guide&quot;&gt;planning a new weblog&lt;/a&gt; to cover Echo/Pie/Whatever, with a focus on non-technical people. Drop her a line if you think you can help.&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://www.throwingbeans.org/tech/postgresql_and_xml.html&quot;&gt;Adding built in XPath support to PostrgreSQL&lt;/a&gt;.&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://google.blogspace.com/archives/001018&quot;&gt;New Google Operator&lt;/a&gt; (~, for finding keyword synonyms) and &lt;a href=&quot;http://www.waxy.org/archive/2003/08/04/fun_with.shtml&quot;&gt;tips on understanding what it does&lt;/a&gt;.&lt;/li&gt;
 &lt;li&gt;Ben Hammersley explains &lt;a href=&quot;http://www.benhammersley.com/dparchives/004235.html&quot; title=&quot;XML, metaphorically speaking&quot;&gt;how XML namespaces add context&lt;/a&gt;, compares them to poetry(!)&lt;/li&gt;
&lt;/ul&gt;
 </description>
  <link>http://simon.incutio.com/archive/2003/08/06/moreLinks</link>
  <dc:subject>Google, XML, Python</dc:subject>
  <dc:date>2003-08-06T10:06:07-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2003/07/28/phpXpath">
  <title>PHP XPath Implementation</title>
  <description>&lt;p&gt;This looks like it could be &lt;em&gt;really&lt;/em&gt; useful: an &lt;a href=&quot;http://www.carrubbers.org/scripts/php/xpath/&quot;&gt;XPath implementation in pure PHP&lt;/a&gt; (no extra modules required), via &lt;a href=&quot;http://www.whump.com/moreLikeThis/link/03560&quot; title=&quot;XPath Class for PHP&quot;&gt;More Like This&lt;/a&gt;.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2003/07/28/phpXpath</link>
  <dc:subject>XML, PHP</dc:subject>
  <dc:date>2003-07-28T23:59:35-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>

</rdf:RDF>