<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8029070</id><updated>2012-01-19T11:34:08.372Z</updated><category term='windows live'/><category term='xaml'/><category term='yowl'/><category term='media futures'/><category term='social graph api'/><category term='soa'/><category term='dial'/><category term='selenium'/><category term='open source'/><category term='w'/><category term='hackdaylondon'/><category term='microblogging'/><category term='sidewinder viewer'/><category term='gov 2.0'/><category term='firefox'/><category term='accessibility'/><category term='xml database'/><category term='gdata'/><category term='servlet'/><category term='app'/><category term='xhtml'/><category term='safari'/><category term='google maps'/><category term='backplane'/><category term='webdav'/><category term='semantic web'/><category term='sourceforge'/><category term='rdfa'/><category term='chemistry'/><category term='role'/><category term='flex'/><category term='information resources'/><category term='rest'/><category term='microformats'/><category term='semanticweb'/><category term='dojo'/><category term='svg'/><category term='google code'/><category term='xpointer'/><category term='html'/><category term='gdocs'/><category term='atom'/><category term='msoxml'/><category term='ria'/><category term='testing'/><category term='blogging'/><category term='w3c'/><category term='webapps'/><category term='device indepence'/><category term='json'/><category term='prototype'/><category term='popfly'/><category term='yui'/><category term='adobe apollo'/><category term='yahoo'/><category term='operator'/><category term='yahoo pipes'/><category term='javascript'/><category term='ebay'/><category term='linked data'/><category term='xforms'/><category term='perl'/><category term='chtml'/><category term='xhtml2'/><category term='adobe air'/><category term='skimming'/><category term='rdf'/><category term='xquery'/><category term='sidewinder'/><category term='python'/><category term='amazon'/><category term='formsplayer'/><category term='bill gates'/><category term='microsoft agent'/><category term='physics'/><category term='gcal'/><category term='open standards'/><category term='apollo'/><category term='rdfj'/><category term='growl'/><category term='foaf'/><category term='knowledge'/><category term='internet explorer'/><category term='exist'/><category term='silverlight'/><category term='php'/><category term='ajax'/><category term='marie curie'/><category term='xtech'/><category term='tech talk'/><category term='programming'/><category term='declarative programming'/><category term='google gears'/><category term='odf'/><category term='semweb'/><category term='web2.0'/><category term='wpf'/><category term='standards'/><category term='open gov'/><category term='metadata'/><category term='joost'/><title type='text'>XForms and Internet Applications</title><subtitle type='html'>Stuff to do with producing a new generation of Internet Applications...biased towards XForms!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default?start-index=101&amp;max-results=100'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>134</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8029070.post-6285957080031438386</id><published>2009-11-20T12:28:00.002Z</published><updated>2009-11-20T12:31:26.123Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='gov 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='linked data'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='open gov'/><title type='text'>Linked Data and RDFa in US and UK government web-sites</title><content type='html'>&lt;blockquote&gt;And finally, I find this announcement exciting because the guidelines document uses the term 'Linked Data' throughout. This reflects an extremely deep understanding of the implications of what COI are doing with RDFa; the COI do not simply explain to people how to publish vacancies and consultations to the web -- they are describing how to publish that data to the Linked Data cloud.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Read more in &lt;a href="http://webbackplane.com/mark-birbeck/blog/2009/11/20/linked-data-and-rdfa-in-us-and-uk-government-web-sites"&gt;Linked Data and RDFa in US and UK government web-sites&lt;/a&gt;, at my webBackplane blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-6285957080031438386?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/6285957080031438386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=6285957080031438386' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/6285957080031438386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/6285957080031438386'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2009/11/linked-data-and-rdfa-in-us-and-uk.html' title='Linked Data and RDFa in US and UK government web-sites'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-3955011027067619864</id><published>2009-09-23T12:04:00.003Z</published><updated>2009-09-23T12:06:27.203Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='ria'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>Understanding the XForms dependency engine</title><content type='html'>&lt;blockquote&gt;A key component of any XForms processor is the dependency-engine. The idea is pretty straightforward, and will be familiar to anyone who has used a spreadsheet; if some item has its value set by a calculated expression that contains references to other items, then when any of those items change, the first item must be recalculated.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Read more in my introductory article on the XForms Developer Zone site, &lt;a href="http://xformsdz.org/article/2009/09/dependency-engine"&gt;Understanding the XForms dependency-engine&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-3955011027067619864?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/3955011027067619864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=3955011027067619864' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3955011027067619864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3955011027067619864'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2009/09/understanding-xforms-dependency-engine.html' title='Understanding the XForms dependency engine'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-8307170146854052991</id><published>2009-09-21T11:41:00.002Z</published><updated>2009-09-21T11:45:03.801Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='rdf'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='open standards'/><title type='text'>RDFa Tech Talk, at Google, 2009</title><content type='html'>&lt;blockquote&gt;Although my talk &lt;em&gt;Beyond Web 2.0 -- How RDFa Can Help to Democratise Data on the Web&lt;/em&gt;, took place back in June, it's only just now been made available online, due to technical problems.&lt;br /&gt;&lt;br /&gt;(I should say too, that those same technical problems also mean that the video is in 50's style black and white; maybe it gives it a bit more authority.)&lt;br /&gt;&lt;br /&gt;I really enjoyed the session, and you'll hear at one point near the end I get to put some questions to Othar Hansson and Kavi Goel, and the rest of the Rich Snippets team, about how they'll be using RDFa going forwards.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Read more at &lt;a href="http://webbackplane.com/mark-birbeck/blog/2009/09/rdfa-tech-talk-now-online"&gt;RDFa Tech Talk, at Google, 2009&lt;/a&gt; on my webBackplane blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-8307170146854052991?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/8307170146854052991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=8307170146854052991' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8307170146854052991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8307170146854052991'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2009/09/rdfa-tech-talk-at-google-2009.html' title='RDFa Tech Talk, at Google, 2009'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-8484651146492216137</id><published>2009-09-16T12:00:00.000Z</published><updated>2009-09-21T12:03:19.137Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='ria'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='open standards'/><title type='text'>XForms Developer Zone and User Group launched</title><content type='html'>&lt;blockquote&gt;We're pleased to be launching two new initiatives to help people who are interested in XForms.&lt;br /&gt;&lt;br /&gt;The first is the all new XForms Developer Zone web-site -- or &lt;a href="http://xformsdz.org"&gt;xformsdz&lt;/a&gt;, as we're calling it.&lt;br /&gt;&lt;br /&gt;Whilst the Developer Zone will be unashamedly biased towards XForms, within that, we'll have discussions, articles, code snippets, and tutorials about any XForms processor we can find, and any application framework in which it's used.&lt;br /&gt;&lt;br /&gt;To accompany the web-site, we're also launching a regular newsletter, and a London XForms User Group.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Read more at &lt;a href="http://webbackplane.com/mark-birbeck/blog/2009/09/xforms-ceveloper-zone-user-group-launched"&gt;XForms Developer Zone and User Group launched&lt;/a&gt; on my webBackplane blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-8484651146492216137?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/8484651146492216137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=8484651146492216137' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8484651146492216137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8484651146492216137'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2009/09/xforms-developer-zone-and-user-group.html' title='XForms Developer Zone and User Group launched'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-1924269283705108379</id><published>2009-04-30T13:21:00.004Z</published><updated>2009-04-30T13:25:30.869Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='foaf'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='rdf'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='open standards'/><title type='text'>Tokenising the semantic web</title><content type='html'>&lt;blockquote&gt;To summarise the argument; first, we know that we need to be able to tokenise URIs, because they tend to be long and unwieldy. However, whilst the current use of prefixes to abbreviate URIs is useful, it only allows us to tokenise URIs that are used to identify vocabularies, and not full URIs. It's also not ideal that these prefixes are being expressed using a document architecture mechanism -- &lt;code&gt;@xmlns&lt;/code&gt;.&lt;/blockquote&gt;&lt;blockquote&gt;By adding a new attribute -- &lt;code&gt;@token&lt;/code&gt; -- to the &lt;em&gt;CURIE processing&lt;/em&gt; rules, we can tokenise full URIs, which gives authors the same level of simplicity that Microformats has. The key difference though, is that this tokenisation is completely scaleable, and so overcomes one of the major drawbacks of Microformats.&lt;/blockquote&gt;&lt;br /&gt;Read more at &lt;a href="http://webbackplane.com/mark-birbeck/blog/2009/04/30/tokenising-the-semantic-web"&gt;Tokenising the semantic web&lt;/a&gt; on my webBackplane blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-1924269283705108379?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/1924269283705108379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=1924269283705108379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/1924269283705108379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/1924269283705108379'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2009/04/tokenising-semantic-web.html' title='Tokenising the semantic web'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-3328776842516340759</id><published>2009-04-23T12:41:00.007Z</published><updated>2009-04-30T13:26:57.639Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='foaf'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='rdf'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='open standards'/><title type='text'>More RDFa goodness from UK government web-sites</title><content type='html'>&lt;blockquote&gt;With my semweb consultantancy hat on, I've been working for a few months now on a number of RDFa projects with the UK's &lt;a href="http://www.coi.gov.uk/"&gt;Central Office of Information&lt;/a&gt;. These projects have generally followed the same pattern:&lt;ul&gt;&lt;li&gt;define a vocabulary for some specific area of interest, such as job vacancies or government consultations;&lt;/li&gt;&lt;li&gt;use that vocabulary in HTML pages, via RDFa;&lt;/li&gt;&lt;li&gt;get my colleagues at webBackplane to build a prototype application using Drupal and ARC2, that both publishes and consumes pages in the right format;&lt;/li&gt;&lt;li&gt;add an application to Yahoo!'s SearchMonkey to process the RDFa pages.&lt;/li&gt;&lt;/ul&gt;A couple of days ago the UK Civil Service web-site was updated with a new look, and some exciting new features, some of which stem from the projects I've been involved in. There is still some more testing to do, so there haven't been any firm announcements yet, but I'm allowed to talk about one particular feature that is very exciting, the presence of RDFa in each of the job vacancies.&lt;/blockquote&gt;&lt;br /&gt;Read more at &lt;a href="http://webbackplane.com/mark-birbeck/blog/2009/04/23/more-rdfa-goodness-from-uk-government-web-sites"&gt;More RDFa goodness from UK government web-sites&lt;/a&gt; on my webBackplane blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-3328776842516340759?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/3328776842516340759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=3328776842516340759' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3328776842516340759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3328776842516340759'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2009/04/more-rdfa-goodness-from-uk-government.html' title='More RDFa goodness from UK government web-sites'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-6132703455618837727</id><published>2009-04-20T10:30:00.005Z</published><updated>2009-04-20T10:40:23.922Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='rdf'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfj'/><title type='text'>RDFj: Semantic objects in JSON</title><content type='html'>&lt;blockquote&gt;"Essentially, what we've done with RDFj is to map JSON to RDF -- with a few extra tweaks thrown in -- rather than simply mapping RDF to JSON. (RDFa took the same approach, starting with HTML, and then working out what RDF various patterns might represent.)&lt;br /&gt;&lt;br /&gt;"There are of course many uses for the straightforward serialisation approach, taken by RDF/JSON. But we're finding that as our applications increasingly use &lt;em&gt;both&lt;/em&gt; JavaScript and RDF, it's very useful to blur the lines between the two. RDFj takes us an important step towards that."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Read more at &lt;a href="http://webbackplane.com/mark-birbeck/blog/2009/04/20/rdfj-semantic-objects-in-json"&gt;RDFj: Semantic objects in JSON&lt;/a&gt; on my webBackplane blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-6132703455618837727?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/6132703455618837727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=6132703455618837727' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/6132703455618837727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/6132703455618837727'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2009/04/essentially-what-weve-done-with-rdfj-is.html' title='RDFj: Semantic objects in JSON'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-744242509413482227</id><published>2009-04-18T14:43:00.002Z</published><updated>2009-04-18T14:48:42.679Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='rdf'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml2'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='open standards'/><title type='text'>Update to 'Getting started with RDFa: Creating a basic FOAF profile'</title><content type='html'>Just over a year ago I wrote a blog post that showed how to create a FOAF profile on a web page, using RDFa. The idea was not only to show how easy it was to do in terms of the markup, but also to illustrate that once you are able to publish RDF via a web page, you need nothing more than a blog page to join the semantic web.&lt;br /&gt;&lt;br /&gt;This blog post updates that &lt;a href="http://internet-apps.blogspot.com/2008/02/first-steps-in-rdfa-creating-foaf.html"&gt;old post&lt;/a&gt;, by first adding some guidance on how to check your document (using the Ubiquity RDFa parser), and then proceeding to add more features to your blog page.&lt;br /&gt;&lt;br /&gt;Read more at &lt;a href="http://webbackplane.com/mark-birbeck/blog/2009/04/getting-started-with-rdfa"&gt;Getting started with RDFa: Creating a basic FOAF profile&lt;/a&gt;, on my webBackplane.com blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-744242509413482227?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/744242509413482227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=744242509413482227' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/744242509413482227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/744242509413482227'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2009/04/update-to-getting-started-with-rdfa.html' title='Update to &apos;Getting started with RDFa: Creating a basic FOAF profile&apos;'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-2802501107106867808</id><published>2009-03-20T09:55:00.002Z</published><updated>2009-03-20T09:58:31.179Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Customising initial instance data in an xform</title><content type='html'>One of our customers recently asked:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"I have a question on how we can open an XForms page from a non-XForms page. We are trying to have a summary page which is a non-XForm page and we would like to try to open an already existing XForms page by populating data on to it dynamically, by clicking on a component in the summary page. More like a summary-to-detail functionality....&lt;br /&gt;&lt;br /&gt;We are trying to find the best way to do this."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;It's an interesting question, and although we have worked out a couple of ways of looking at this on the client side, I thought the best answer for now was to user the server.&lt;br /&gt;&lt;br /&gt;Read more in &lt;a href="http://webbackplane.com/mark-birbeck/blog/2009/03/customising-initial-instance-data-in-an-xform"&gt;Customising initial instance data in an xform&lt;/a&gt;, on &lt;a href="http://webbackplane.com/blog/2"&gt;my webBackplane blog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-2802501107106867808?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/2802501107106867808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=2802501107106867808' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/2802501107106867808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/2802501107106867808'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2009/03/customising-initial-instance-data-in.html' title='Customising initial instance data in an xform'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-8180064296203090674</id><published>2009-02-03T12:41:00.003Z</published><updated>2009-02-03T12:44:36.828Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml2'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='role'/><title type='text'>Duck-typing and XForms</title><content type='html'>In a recent code review on the &lt;a href="http://ubiquity-xforms.googlecode.com/"&gt;Ubiquity XForms&lt;/a&gt; project, the question of whether to test for an element by name or properties came up. In this post we look at the benefits that can be had from using duck-typing as a way to manage objects' functionality, rather than the more usual hierarchical solutions.&lt;br /&gt;&lt;br /&gt;Read more in &lt;a href="http://webbackplane.com/mark-birbeck/blog/2009/01/duck-typing-and-xforms"&gt;Duck-typing and XForms&lt;/a&gt;, on &lt;a href="http://webbackplane.com/blog/2"&gt;my webBackplane blog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-8180064296203090674?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/8180064296203090674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=8180064296203090674' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8180064296203090674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8180064296203090674'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2009/02/duck-typing-and-xforms.html' title='Duck-typing and XForms'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-6233770577823269140</id><published>2008-11-07T14:40:00.002Z</published><updated>2008-11-07T14:46:26.702Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='microblogging'/><category scheme='http://www.blogger.com/atom/ns#' term='chtml'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>Compact HTML: A mark-up language for micro-blogging</title><content type='html'>This post also appears on &lt;a href="http://webbackplane.com/blog/2"&gt;Mark Birbeck's webBackplane blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;When sending small comments via services such as Twitter, it's pretty straightforward to add links to other documents. The general pattern is to abbreviate the link using an online service, and then paste the shortened link into your post. Software that displays your posts can then replace any string that begins with &lt;code&gt;http:&lt;/code&gt; with a real link.&lt;br /&gt;&lt;br /&gt;However, there are many occasions where a link is just not good enough. Sometimes you'd like to embed an image, or even a video. But if we start trying to add HTML mark-up, we'll pretty soon hit the character limit imposed by micro-blogging platforms.&lt;br /&gt;&lt;br /&gt;Enter compact HTML, or CHTML...for short.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Compact HTML&lt;/h2&gt;The simple idea of CHTML is that we use keywords to indicate the mark-up. For example, to add an image you would ordinarily write:&lt;pre&gt;&amp;lt;img src="http://www.fineart.ac.uk/images/works/Dundee/90/du0008.jpg" /&amp;gt;&lt;/pre&gt;Which would give you this:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.fineart.ac.uk/images/works/Dundee/90/du0008.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Of course, we can shorten the fragment by using a URL service:&lt;pre&gt;&amp;lt;img src="http://snurl.com/252rj" /&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;But we can go further if we make the mark-up compact:&lt;pre&gt;img=http://snurl.com/252rj&lt;/pre&gt;That's a pretty efficient way to transmit an image in a post.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Why HTML?&lt;/h2&gt;You could ask how this relates to HTML?&lt;br /&gt;&lt;br /&gt;The idea is that all elements and attributes from HTML can be used in a generic way. So the full version of the image we just saw, would actually be:&lt;pre&gt;img(src=http://snurl.com/252rj)&lt;/pre&gt;We could also write:&lt;pre&gt;img(src=http://snurl.com/252rj,alt=A picture of Stooky Bill)&lt;/pre&gt;&lt;br /&gt;Each element would have a 'default attribute' that anonymous values would set. In the case of &lt;code&gt;img&lt;/code&gt; it would obviously be &lt;code&gt;@src&lt;/code&gt;, so:&lt;pre&gt;img=http://snurl.com/252rj&lt;/pre&gt;is equivalent to:&lt;pre&gt;img(src=http://snurl.com/252rj)&lt;/pre&gt;&lt;br /&gt;&lt;h2&gt;Other tokens&lt;/h2&gt;&lt;br /&gt;Since all we're really doing is looking for patterns of the form:&lt;pre&gt;&lt;em&gt;token&lt;/em&gt;=&lt;em&gt;value&lt;/em&gt;&lt;/pre&gt;then we needn't limit ourselves to HTML in our compact mark-up.&lt;br /&gt;&lt;br /&gt;For example, we could express a YouTube video like this:&lt;pre&gt;tube=http://snurl.com/25300&lt;/pre&gt;&lt;br /&gt;&lt;h1&gt;An example&lt;/h1&gt;To see this in action, take a look at the &lt;a href="http://ubiquity-rdfa.googlecode.com/svn/tags/0.7.2/_samples/compact-html.html"&gt;Compact HTML Twitter sample&lt;/a&gt; from the &lt;a href="http://ubiquity-rdfa.googlecode.com/"&gt;Ubiquity RDFa library&lt;/a&gt;. Note how two tweets from Stooky Bill are shown, one containing an image, and one containing a video. As you can see from &lt;a href="http://twitter.com/stookybill"&gt;Stooky's Twitter page&lt;/a&gt;, the actual tweets contain simple Compact HTML.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-6233770577823269140?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/6233770577823269140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=6233770577823269140' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/6233770577823269140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/6233770577823269140'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2008/11/compact-html-mark-up-language-for-micro.html' title='Compact HTML: A mark-up language for micro-blogging'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-735080541775427069</id><published>2008-06-24T10:56:00.008Z</published><updated>2010-02-03T10:02:28.578Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='accessibility'/><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>Microformats and RDFa are not as far apart as people think</title><content type='html'>&lt;blockquote&gt;The BBC have caused a bit of a storm recently by announcing that they won't be using the hCalendar Microformat on their pages. The reason is the well-known problems with accessibility. One of the proposed solutions is to look at RDFa.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Read more in &lt;a href="http://webbackplane.com/mark-birbeck/blog/2008/06/24/microformats-and-rdfa-are-not-as-far-apart-as-people-think"&gt;Microformats and RDFa are not as far apart as people think&lt;/a&gt;, at my webBackplane blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-735080541775427069?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/735080541775427069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=735080541775427069' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/735080541775427069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/735080541775427069'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2008/06/microformats-and-rdfa-are-not-as-far.html' title='Microformats and RDFa are not as far apart as people think'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-4781325408201846877</id><published>2008-06-21T14:22:00.003Z</published><updated>2008-06-21T14:25:55.369Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='media futures'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='open standards'/><title type='text'>Openness and Innovation Presentation at Media Futures 2008</title><content type='html'>Yesterday I had a lot of fun at the &lt;a href=""&gt;Media Futures 2008&lt;/a&gt; conference at Alexandra Palace. The panel I was on was called Openness and Innovation, and included Robert Cailliau, Ian Forrester, Matt Webb and myself. The chair was Bill Thompson.&lt;br /&gt;&lt;br /&gt;My slides are here:&lt;br /&gt;&lt;br /&gt;    &lt;div&gt;&lt;br /&gt;     &lt;div style="width:425px;text-align:left" id="__ss_478638"&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=opennessinnovation-1214055189295006-9"/&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=opennessinnovation-1214055189295006-9" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;&lt;a href="http://www.slideshare.net/?src=embed"&gt;&lt;img src="http://static.slideshare.net/swf/logo_embd.png" style="border:0px none;margin-bottom:-5px" alt="SlideShare"/&gt;&lt;/a&gt; | &lt;a href="http://www.slideshare.net/mark.birbeck/openness-and-innovation?src=embed" title="View Openness and Innovation on SlideShare"&gt;View&lt;/a&gt; | &lt;a href="http://www.slideshare.net/upload?src=embed"&gt;Upload your own&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;     &lt;a href="http://www.slideshare.net/mark.birbeck/openness-and-innovation"&gt;SlideShare Link&lt;/a&gt;&lt;br /&gt;    &lt;/div&gt;&lt;br /&gt;   &lt;img style="visibility:hidden;width:0px;height:0px;" border=0 width=0 height=0 src="http://counters.gigya.com/wildfire/CIMP/bHQ9MTIxNDA1NzgzNjc1OSZwdD*xMjE*MDU3ODcxMzk5JnA9MTAxOTEmZD*mbj1ibG9nZ2VyJmc9MQ==.jpg" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-4781325408201846877?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/4781325408201846877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=4781325408201846877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/4781325408201846877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/4781325408201846877'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2008/06/openness-and-innovation-presentation-at.html' title='Openness and Innovation Presentation at Media Futures 2008'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-381357810836195782</id><published>2008-05-17T19:12:00.003Z</published><updated>2008-05-17T19:16:53.141Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='svg'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='rdf'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml2'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='role'/><title type='text'>@role values for SVG</title><content type='html'>Something which was part of the early design concepts from the &lt;a href="http://webBackplane.com/standard/xhtml-role"&gt;XHTML Role Attribute Module&lt;/a&gt;, which has got a little lost, is that &lt;em&gt;elements&lt;/em&gt; from any language can provide a handy source of role values too.&lt;br /&gt;&lt;br /&gt;To reconstruct the logic:&lt;br /&gt;&lt;br /&gt;A role value is simply a URI, or resource. The reason for this is so that the extensibility hook that we're creating puts us straight into the world of RDF.&lt;br /&gt;&lt;br /&gt;Now, some values of &lt;code&gt;@role&lt;/code&gt; will need to be invented. This might be because they simply don't exist, or because we want the values to be 'cross-cutting', and apply to many different mark-up languages.&lt;br /&gt;&lt;br /&gt;But there are many values that already exist, that are suitable for use in a variety of situations. For example, XForms has a &lt;code&gt;hint&lt;/code&gt; element, that can apply to its form controls:&lt;pre&gt;&amp;lt;xf:input ref="surname"&amp;gt;&lt;br /&gt;  &amp;lt;xf:label&amp;gt;Surname:&amp;lt;/xf:label&amp;gt;&lt;br /&gt;  &amp;lt;xf:hint&amp;gt;Please enter your surname or family name&amp;lt;/xf:hint&amp;gt;&lt;br /&gt;&amp;lt;/xf:input&amp;gt;&lt;/pre&gt;The semantics of 'XForms hint' and pretty well defined, so it should be straightforward to apply them to other situations. For example, an Ajax library could pick up a hint and do something with it in an (X)HTML document, even without XForms:&lt;pre&gt;&amp;lt;input name="surname" /&amp;gt;&lt;br /&gt;&amp;lt;div role="xf:hint"&amp;gt;&lt;br /&gt;  Please enter your name&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;h2&gt;SVG&lt;/h2&gt;This whole topic came up recently because someone asked whether it would be possible to add some new values for role which would identify paragraphs, sections, headers, and so on, and that could e used in languages like SVG; but the answer is that if we use the XHTML &lt;code&gt;p&lt;/code&gt;, &lt;code&gt;section&lt;/code&gt;, &lt;code&gt;h1&lt;/code&gt;, &lt;code&gt;h2&lt;/code&gt;, etc., values then we don't need to invent new roles:&lt;pre&gt;&amp;lt;svg:text role="xh:h1"&amp;gt;Metadata&amp;lt;/svg:text&amp;gt;&lt;br /&gt;&amp;lt;svg:text role="xh:p"&amp;gt;&lt;br /&gt;  Metadata is data about data...which is also data...kind of&lt;br /&gt;  turtles all the way down...&lt;br /&gt;&amp;lt;/svg:text&amp;gt;&lt;/pre&gt;As you can see, a role-aware voice system would be able to provide feedback to a user in &lt;em&gt;any&lt;/em&gt; mark-up language, simply by knowing XHTML role values.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-381357810836195782?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/381357810836195782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=381357810836195782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/381357810836195782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/381357810836195782'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2008/05/something-which-was-part-of-early.html' title='@role values for SVG'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-5197845086166916327</id><published>2008-05-01T12:50:00.009Z</published><updated>2008-05-01T13:50:59.067Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='xquery'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='skimming'/><category scheme='http://www.blogger.com/atom/ns#' term='gdata'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='formsplayer'/><category scheme='http://www.blogger.com/atom/ns#' term='xtech'/><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='ebay'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='rdf'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml2'/><category scheme='http://www.blogger.com/atom/ns#' term='yahoo'/><category scheme='http://www.blogger.com/atom/ns#' term='xaml'/><category scheme='http://www.blogger.com/atom/ns#' term='tech talk'/><title type='text'>Upcoming talks on RDF, RDFa and XForms</title><content type='html'>May is going to be pretty busy with talks about XForms, RDF and RDFa coming up.&lt;br /&gt;&lt;br /&gt;First up is my talk &lt;a href="http://2008.xtech.org/public/schedule/detail/605"&gt;XForms, REST, XQuery...and skimming&lt;/a&gt; at XTech 2008. The talk embraces themes I've been pursuing for a couple of years now; that as we put more functionality into the client, and servers get 'cleverer', it becomes much easier to build sophisticated web applications. Of course server technologies are moving so fast now that this whole approach is making more and more sense, so I'm looking forward to taking in recent developments in my talk. For example, both Amazon and Google effectively have 'databases in the cloud' that can be used to store data and query it, via APIs, with literally no configuration. &lt;br /&gt;&lt;br /&gt;A few weeks later I'm going to be giving &lt;a href="http://www.semantic-conference.com/session/698/"&gt;a tutorial on RDF at SemTech&lt;/a&gt;. This is an interesting development for me, because RDF and the semantic web were always my first interests--before XForms and before XHTML 2. (As well as writing RDF parsers, and designing applications, I also contributed chapters on RDF and RDFS to a couple of books on metadata and XML.)&lt;br /&gt;&lt;br /&gt;But one problem I always had when trying to build semantic-web applications was that defining the user interface was pretty hairy. This was partly because RDF Schema is tricky to process, but also because HTML was insufficiently powerful in its core feature-set, so the translation from RDF to HTML involved a lot of work.&lt;br /&gt;&lt;br /&gt;The need for a user interface language that was much richer than HTML was therefore why I got involved in the XForms standard (and worked with a team of people to produce &lt;a href="http://www.formsPlayer.com/"&gt;the first fully conforming XForms processor, formsPlayer&lt;/a&gt;). So although it may not seem directly connected to the semantic web, I believe that in the coming period XForms will start to become a key part of the semantic web's architecture.&lt;br /&gt;&lt;br /&gt;Another problem I kept coming up against whilst developing for the semantic web was the difficulty in actually &lt;em&gt;publishing&lt;/em&gt; metadata. In particular I always found it frustrating that there was a lot of really useful metadata just sitting in ordinary web pages, and no-one could get at it. Attempting to resolve this problem gave rise to RDFa, and I'm excited that the &lt;a href="http://www.w3.org/TR/rdfa-syntax/"&gt;RDFa in XHTML working draft&lt;/a&gt; is extremely close to becoming a stable recommendation. And as interest in RDFa grows, I'm pleased to say that some of my other presentations in May will be 'tech talks' on RDFa at Yahoo!, eBay and Google. (I'm really excited that I might be getting to meet some of the guys behind &lt;a href="http://developer.yahoo.com/searchmonkey/"&gt;Yahoo!'s SearchMonkey&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;My final talk of the month will be at the excitingly-named &lt;a href="http://www.kingsofcode.nl/"&gt;Kings of Code&lt;/a&gt;, and I'm looking forward to talking about XHTML, XHTML 2, HTML 5, XAML, and anything else I can think of in relation to web languages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-5197845086166916327?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/5197845086166916327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=5197845086166916327' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/5197845086166916327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/5197845086166916327'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2008/05/upcoming-talks-on-rdf-rdfa-and-xforms.html' title='Upcoming talks on RDF, RDFa and XForms'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-3968002300179557252</id><published>2008-03-21T15:03:00.005Z</published><updated>2008-03-21T16:20:08.847Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml2'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>So how about using RDFa in Microformats?</title><content type='html'>Yes, I know...everyone seems to think that RDFa and Microformats are at war. And maybe some would prefer it to be that way. But whatever way you look at it, the work of the Microformats community has been key in getting people fired up about what they might do with metadata that is placed in HTML and XHTML pages. And RDFa is benefiting from the vibrant atmosphere which they have created.&lt;br /&gt;&lt;br /&gt;That doesn't mean I'm saying we can ignore the problems and limitations that Microformats have, such as the difficulty in mixing different formats in one document, the work involved in creating new formats (often wastefully duplicating work that has already been done, since specialist formats invariably already exist), or perhaps most significantly, the inability to refer to things that are not 'the current document'.&lt;br /&gt;&lt;br /&gt;So I have a suggestion.&lt;br /&gt;&lt;br /&gt;Why don't we emphasise the 'micro' in Microformats?&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Emphasise the 'micro'&lt;/h2&gt;One of the original motivations for Microformats was that they were small, self-contained sets of rules that authors could apply to their documents, which would give the author some kind of benefit. Nothing in that broad definition says 'so therefore steer clear of all other formats or you'll catch the plague'.&lt;br /&gt;&lt;br /&gt;So why not use RDFa features within microformats, as appropriate? But Microformats could still retain the compactness of a particular format.&lt;br /&gt;&lt;br /&gt;I'll use &lt;code&gt;rel-license&lt;/code&gt; as an example.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;rel-license&lt;/h2&gt;The &lt;code&gt;&lt;a href="http://microformats.org/wiki/rel-license"&gt;rel-license&lt;/a&gt;&lt;/code&gt; microformat is simply the use of the value "license" in the &lt;code&gt;@rel&lt;/code&gt; attribute, in some mark-up. For example, if we want to say that the current document is licensed under one of the Creative Commons licenses, we might use the following mark-up in our document:&lt;pre&gt;&amp;lt;a rel="license" href="http://creativecommons.org/licenses/by/2.0/"&amp;gt;cc by 2.0&amp;lt;/a&amp;gt;&lt;/pre&gt;&lt;br /&gt;However, what if we have a search page that returns lots of images or videos? What if each image or video is available under a different license to other images or videos on the page, or to the license for the page itself? Trying to solve this problem within the framework set by Microformats is proving quite difficult (see the open issues on the &lt;a href="http://microformats.org/wiki/rel-license-issues#Issues"&gt;&lt;code&gt;rel-license&lt;/code&gt; issues page&lt;/a&gt;), so at some point we need something more than &lt;code&gt;rel-license&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Reusing @src attribute&lt;/h2&gt;The mark-up we gave earlier to indicate that 'this document' is available under a certain license, amounts to two attributes, &lt;code&gt;@rel&lt;/code&gt; and &lt;code&gt;href&lt;/code&gt;:&lt;pre&gt;&amp;lt;a &lt;span style="color: red;"&gt;rel="license" href="http://creativecommons.org/licenses/by/2.0/"&lt;/span&gt;&amp;gt;cc by 2.0&amp;lt;/a&amp;gt;&lt;/pre&gt;RDFa lets us take that little 'package' (or 'microformat') and use it anywhere that we can set a 'subject'. Of course normally the subject is the current document, which is why the &lt;code&gt;rel-license&lt;/code&gt; microformat looks just the same to an RDFa parser as it does to a Microformats parser. But RDFa allows this 'package' to be used with the &lt;code&gt;@src&lt;/code&gt; attribute, giving us the following possibilities:&lt;pre&gt;&amp;lt;img src="my-picture.png" &lt;span style="color: red;"&gt;rel="license" href="http://creativecommons.org/licenses/by/2.0/"&lt;/span&gt; /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;object src="my-video.mov" &lt;span style="color: red;"&gt;rel="license" href="http://creativecommons.org/licenses/by/2.0/"&lt;/span&gt; /&amp;gt;&amp;lt;/object&amp;gt;&lt;/pre&gt;&lt;br /&gt;As you can see, this straightforwardly solves the problem that &lt;code&gt;rel-license&lt;/code&gt; is presenting to those who want to put many items in a page, so all that would be required to take this solution into the Microformats world would be to slightly extend the &lt;code&gt;rel-license&lt;/code&gt; microformat to allow the &lt;code&gt;src&lt;/code&gt; attribute as a subject.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;RDFa or Microformats?&lt;/h2&gt;This example illustrates that if we see RDFa and Microformats as playing slightly different roles, then there is no need to take an 'either/or' approach to the two techniques.&lt;br /&gt;&lt;br /&gt;Since RDFa is a general-purpose syntax that is capable of supporting &lt;em&gt;any&lt;/em&gt; vocabulary that anyone comes up with, now or in the future, then we are often tempted to talk about the general rules. But for new users who are looking to achieve a specific goal, seeing documentation about a specific usage pattern (such as the one I've shown here with licensing), will almost certainly be more useful to begin with.&lt;br /&gt;&lt;br /&gt;But that is what Microformats is all about--documenting common usage patterns in such a way that people can re-use them in their own mark-up.  So what would be wrong with enhancing &lt;code&gt;rel-license&lt;/code&gt; to allow the use of &lt;code&gt;@src&lt;/code&gt;?&lt;br /&gt;&lt;br /&gt;Note that people wanting to parse this microformat could either create a specific parser in the way that they need to do now for other microformats, or they could use a general-purpose RDFa parser.&lt;br /&gt;&lt;br /&gt;The key thing is that the mark-up is exactly the same, whether you arrived at the use of &lt;code&gt;@rel="license"&lt;/code&gt; via the Microformats page, or an RDFa page.&lt;br /&gt;&lt;br /&gt;And that seems to me to be a good result all round, for the authors, for the programmers, for the search engines, and especially for those of us who want to see a more dynamic, usable, and semantic, web.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-3968002300179557252?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/3968002300179557252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=3968002300179557252' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3968002300179557252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3968002300179557252'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2008/03/so-how-about-using-rdfa-in-microformats.html' title='So how about using RDFa in Microformats?'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-9082711743765219509</id><published>2008-03-03T13:47:00.007Z</published><updated>2009-05-14T10:20:17.809Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='foaf'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml2'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>First steps in RDFa: Creating a FOAF profile</title><content type='html'>Please note that this article has been updated to &lt;a href="http://webbackplane.com/mark-birbeck/blog/2009/04/getting-started-with-rdfa"&gt;Getting started with RDFa: Creating a basic FOAF profile&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;Now that the &lt;a href="/2008/02/rdfa-is-now-in-last-call.html"&gt;RDFa syntax document is in last call&lt;/a&gt;, and people like &lt;a href="http://rdfa.info/2008/02/23/yahoo-microsearch-supports-rdfa/"&gt;Yahoo! are starting to index the data&lt;/a&gt;, it's worth putting more of your own data into your web-pages, using RDFa. A simple place to start is to modify your home-page or blog profile so that it includes FOAF information.&lt;h2&gt;FOAF&lt;/h2&gt;If you're not familiar with &lt;a href="http://www.foaf-project.org/"&gt;FOAF&lt;/a&gt;, or Friend-of-a-friend, it's a set of terms that can be used to describe people, organisations, and their relationships to each other. For example, we can mark up our names, point to our home-pages, indicate the companies and projects we work on (and point to &lt;em&gt;their&lt;/em&gt; home-pages), and so on.&lt;br /&gt;&lt;br /&gt;Since this vocabulary is gaining in popularity, and since RDFa allows us to use any vocabulary we like without having to re-write it (or ask anyone), we'll use FOAF via RDFa to mark up our pages. We won't use every part the vocabulary, so if you want to find further properties, or more detail on the properties used below, look at the &lt;a href="http://xmlns.com/foaf/spec/"&gt;full FOAF specification&lt;/a&gt;.&lt;h2&gt;Creating a person&lt;/h2&gt;The first thing we need to do is to create a person object that will hold our information. This is done using the RDFa &lt;code&gt;typeof&lt;/code&gt; attribute, which is much like &lt;code&gt;@class&lt;/code&gt; in HTML. The type of the object we want to add is a &lt;code&gt;Person&lt;/code&gt; and since 'person' comes from the FOAF vocabulary, we write it like this:&lt;pre&gt;&amp;lt;html &lt;span style="color: red;"&gt;xmlns:foaf="http://xmlns.com/foaf/0.1/"&lt;/span&gt;&amp;gt;&lt;br /&gt;  &amp;lt;head&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;Mark Birbeck's profile&amp;lt;/title&amp;gt;&lt;br /&gt;  &amp;lt;/head&amp;gt;&lt;br /&gt;  &amp;lt;body&amp;gt;&lt;br /&gt;    &amp;lt;div &lt;span style="color: red;"&gt;typeof="foaf:Person"&lt;/span&gt;&amp;gt;&lt;br /&gt;      ...&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;Now we're ready to add our personal information to this block.&lt;h2&gt;Adding personal information&lt;/h2&gt;The FOAF vocabulary is packed with useful properties that we can set, so let's start with some basics such as our name and the URL for our blog.&lt;br /&gt;&lt;br /&gt;We can add our name using the &lt;code&gt;foaf:name&lt;/code&gt; property, which is set via the new RDFa &lt;code&gt;property&lt;/code&gt; attribute:&lt;pre&gt;    &amp;lt;div typeof="foaf:Person"&amp;gt;&lt;br /&gt;      &lt;span style="color: red;"&gt;&amp;lt;span property="foaf:name"&gt;Mark Birbeck&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;/pre&gt;Our blog is indicated using the &lt;code&gt;foaf:weblog&lt;/code&gt; property. However, unlike &lt;code&gt;foaf:name&lt;/code&gt; which is simply a string of text, the item we're going to refer to is a URL, so we must use the HTML &lt;code&gt;rel&lt;/code&gt; attribute instead of &lt;code&gt;@property&lt;/code&gt;:&lt;pre&gt;    &amp;lt;div typeof="foaf:Person"&amp;gt;&lt;br /&gt;      &amp;lt;span property="foaf:name"&gt;Mark Birbeck&amp;lt;/span&amp;gt;&lt;br /&gt;      &lt;span style="color: red;"&gt;&amp;lt;a rel="foaf:weblog" href="http://internet-apps.blogspot.com/"&gt;XForms and Internet Applications&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;h2&gt;Creating a profile&lt;/h2&gt;We now have a person with some properties about them, but in FOAF terms that's slightly different to having a profile about the person. If that seems a little subtle, it is, but what it amounts to is that the document that contains information &lt;em&gt;about&lt;/em&gt; me, is not &lt;em&gt;actually&lt;/em&gt; me. In many situations it won't appear to make any difference, but unfortunately it can cause a lot of problems. For example, if the document is used to represent both my profile &lt;em&gt;and&lt;/em&gt; me at the same time, what would be the result of adding some information about when the document was created? How do we know whether the information is indicating when &lt;em&gt;I&lt;/em&gt; was born, or when the &lt;em&gt;document&lt;/em&gt; was?&lt;br /&gt;&lt;br /&gt;FOAF allows us to prise these two things apart with the &lt;code&gt;foaf:primaryTopic&lt;/code&gt; property, so we're going to use this to say that the main subject-matter of our profile (a web document) is me (a person):&lt;pre&gt;&amp;lt;html xmlns:foaf="http://xmlns.com/foaf/0.1/"&amp;gt;&lt;br /&gt;  &amp;lt;head&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;Mark Birbeck's profile&amp;lt;/title&amp;gt;&lt;br /&gt;    &lt;span style="color: red;"&gt;&amp;lt;link rel="foaf:primaryTopic" href="#me" /&amp;gt;&lt;/span&gt;&lt;br /&gt;  &amp;lt;/head&amp;gt;&lt;br /&gt;  &amp;lt;body&amp;gt;&lt;br /&gt;    &amp;lt;div &lt;span style="color: red;"&gt;about="#me"&lt;/span&gt; typeof="foaf:Person"&amp;gt;&lt;br /&gt;      &amp;lt;span property="foaf:name"&amp;gt;Mark Birbeck&amp;lt;/span&amp;gt;&lt;br /&gt;      &amp;lt;a rel="foaf:weblog" href="http://internet-apps.blogspot.com/"&gt;XForms and Internet Applications&amp;lt;/a&amp;gt;&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;Whilst we're here, it might be useful to use the &lt;code&gt;foaf:maker&lt;/code&gt; property to indicate who created the profile; in this case it's the same as the subject of the profile (i.e., the person who the profile is about), so it's easily set as follows:&lt;pre&gt;&amp;lt;html xmlns:foaf="http://xmlns.com/foaf/0.1/"&amp;gt;&lt;br /&gt;  &amp;lt;head&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;Mark Birbeck's profile&amp;lt;/title&amp;gt;&lt;br /&gt;    &amp;lt;link rel="foaf:primaryTopic &lt;span style="color: red;"&gt;foaf:maker&lt;/span&gt;" href="#me" /&amp;gt;    &lt;br /&gt;  &amp;lt;/head&amp;gt;&lt;br /&gt;  &amp;lt;body&amp;gt;&lt;br /&gt;    &amp;lt;div about="#me" typeof="foaf:Person"&amp;gt;&lt;br /&gt;      &amp;lt;span property="foaf:name"&amp;gt;Mark Birbeck&amp;lt;/span&amp;gt;&lt;br /&gt;      &amp;lt;a rel="foaf:weblog" href="http://internet-apps.blogspot.com/"&gt;XForms and Internet Applications&amp;lt;/a&amp;gt;&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;Now we can read this whole thing as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;we have a person that is identified as &lt;code&gt;#me&lt;/code&gt;;&lt;/li&gt;&lt;li&gt;this person has a name of "Mark Birbeck";&lt;/li&gt;&lt;li&gt;this person has a blog at &amp;lt;http://internet-apps.blogspot.com/&amp;gt;;&lt;/li&gt;&lt;li&gt;this person is the creator of the current document;&lt;/li&gt;&lt;li&gt;this person is the main subject of the current document.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Adding friends and colleagues&lt;/h2&gt;Now that we have our basic framework in place, it's pretty easy to drop more and more FOAF properties in. Perhaps the most commonly used is &lt;code&gt;foaf:knows&lt;/code&gt; which is used to indicate the people that you know. Since the target of this property is once again a URL, we'll need to use the HTML &lt;code&gt;rel&lt;/code&gt; attribute again:&lt;pre&gt;    &amp;lt;div about="#me" typeof="foaf:Person"&amp;gt;&lt;br /&gt;      &amp;lt;span property="foaf:name"&amp;gt;Mark Birbeck&amp;lt;/span&amp;gt;&lt;br /&gt;      &amp;lt;a rel="foaf:weblog" href="http://internet-apps.blogspot.com/"&gt;XForms and Internet Applications&amp;lt;/a&amp;gt;&lt;br /&gt;      &lt;span style="color: red;"&gt;&amp;lt;a rel="foaf:knows" href="http://www.w3.org/People/Ivan/#me"&gt;Ivan Herman&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;h2&gt;Adding a picture&lt;/h2&gt;The FOAF vocabulary also allows us to indicate pictures that we appear in, and pictures that we might want others to use to represent us. To set a picture of yourself that other software might use to represent you, use the &lt;code&gt;foaf:img&lt;/code&gt; property:&lt;pre&gt;    &amp;lt;div about="#me" typeof="foaf:Person"&amp;gt;&lt;br /&gt;      &amp;lt;span property="foaf:name"&amp;gt;Mark Birbeck&amp;lt;/span&amp;gt;&lt;br /&gt;      &amp;lt;a rel="foaf:weblog" href="http://internet-apps.blogspot.com/"&gt;XForms and Internet Applications&amp;lt;/a&amp;gt;&lt;br /&gt;      &amp;lt;a rel="foaf:knows" href="http://www.w3.org/People/Ivan/#me"&gt;Ivan Herman&amp;lt;/a&amp;gt;&lt;br /&gt;      &lt;span style="color: red;"&gt;&amp;lt;span rel="foaf:img"&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: red;"&gt;&amp;lt;img src="http://www.formsplayer.com/files/pictures/picture-11.jpg" alt="Picture of Mark Birbeck" /&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: red;"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;h2&gt;Linking to a Twitter account&lt;/h2&gt;The final illustration we'll show is how to use the FOAF vocabulary to point to your Twitter account, which will make it easy to build tools that will allow people to follow you with one click. The first thing to do is create a relationship called &lt;code&gt;foaf:holdsAccount&lt;/code&gt;, which will connect our 'person object' with an online account object. To connect two objects we use the HTML &lt;code&gt;rel&lt;/code&gt; attribute again:&lt;pre&gt;    &amp;lt;div about="#me" typeof="foaf:Person"&amp;gt;&lt;br /&gt;      &amp;lt;span property="foaf:name"&amp;gt;Mark Birbeck&amp;lt;/span&amp;gt;&lt;br /&gt;      &amp;lt;a rel="foaf:weblog" href="http://internet-apps.blogspot.com/"&gt;XForms and Internet Applications&amp;lt;/a&amp;gt;&lt;br /&gt;      &amp;lt;a rel="foaf:knows" href="http://www.w3.org/People/Ivan/#me"&gt;Ivan Herman&amp;lt;/a&amp;gt;&lt;br /&gt;      &amp;lt;span rel="foaf:img"&amp;gt;&lt;br /&gt;        &amp;lt;img src="http://www.formsplayer.com/files/pictures/picture-11.jpg" alt="Picture of Mark Birbeck" /&amp;gt;&lt;br /&gt;      &amp;lt;/span&amp;gt;&lt;br /&gt;      &lt;span style="color: red;"&gt;&amp;lt;span rel="foaf:holdsAccount"&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: red;"&gt;...&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: red;"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;/pre&gt;Next we create an object of type &lt;code&gt;foaf:OnlineAccount&lt;/code&gt;, in exactly the same way that we did when creating a &lt;em&gt;person&lt;/em&gt; earlier:&lt;pre&gt;      &amp;lt;span rel="foaf:holdsAccount"&amp;gt;&lt;br /&gt;        &lt;span style="color: red;"&gt;&amp;lt;span typeof="foaf:OnlineAccount"&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: red;"&gt;...&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: red;"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;br /&gt;      &amp;lt;/span&amp;gt;&lt;/pre&gt;Finally, we indicate that the particular type of account we're dealing with is a Twitter account (using &lt;code&gt;foaf:accountServiceHomepage&lt;/code&gt;), and also provide our account name (using &lt;code&gt;foaf:accountName&lt;/code&gt;):&lt;pre&gt;      &amp;lt;span rel="foaf:holdsAccount"&amp;gt;&lt;br /&gt;        &lt;span style="color: red;"&gt;&amp;lt;span typeof="foaf:OnlineAccount"&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: red;"&gt;&amp;lt;a rel="foaf:accountServiceHomepage" href="http://twitter.com/"&amp;gt;Twitter&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: red;"&gt;&amp;lt;span property="foaf:accountName"&amp;gt;markbirbeck&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: red;"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;br /&gt;      &amp;lt;/span&amp;gt;&lt;/pre&gt;&lt;h2&gt;Human and machine-readable&lt;/h2&gt;Everything we've marked up so far is human and machine readable, but the layout is not great for a human. Although the links to the blog will work, and the text will show names and accounts correctly, there is no context information. However, additional mark-up can be placed in the document, and as long as it is outside of the scope of the RDFa attributes it won't be classed as metadata. For example:&lt;pre&gt;&amp;lt;html xmlns:foaf="http://xmlns.com/foaf/0.1/"&amp;gt;&lt;br /&gt;  &amp;lt;head&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;&lt;span style="color: red;"&gt;Mark Birbeck&lt;/span&gt;'s profile&amp;lt;/title&amp;gt;&lt;br /&gt;    &amp;lt;link rel="foaf:primaryTopic foaf:maker" href="#me" /&amp;gt;    &lt;br /&gt;  &amp;lt;/head&amp;gt;&lt;br /&gt;  &amp;lt;body&amp;gt;&lt;br /&gt;    &amp;lt;div about="#me" typeof="foaf:Person"&amp;gt;&lt;br /&gt;      &amp;lt;span property="foaf:name"&amp;gt;Mark Birbeck&amp;lt;/span&amp;gt; &lt;span style="color: red;"&gt;writes a blog called&lt;/span&gt;&lt;br /&gt;      &amp;lt;a rel="foaf:weblog" href="http://internet-apps.blogspot.com/"&gt;XForms and Internet Applications&amp;lt;/a&amp;gt;&lt;span style="color: red;"&gt;.&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: red;"&gt;He knows&lt;/span&gt;&lt;br /&gt;      &amp;lt;a rel="foaf:knows" href="http://www.w3.org/People/Ivan/#me"&gt;Ivan Herman&amp;lt;/a&amp;gt;&lt;span style="color: red;"&gt;.&lt;/span&gt;&lt;br /&gt;      &amp;lt;span rel="foaf:img"&amp;gt;&lt;br /&gt;        &amp;lt;img src="http://www.formsplayer.com/files/pictures/picture-11.jpg" alt="Picture of Mark Birbeck" /&amp;gt;&lt;br /&gt;      &amp;lt;/span&amp;gt;&lt;br /&gt;&lt;br /&gt;      &lt;span style="color: red;"&gt;His inane comments are available on his&lt;/span&gt;&lt;br /&gt;      &amp;lt;span rel="foaf:holdsAccount"&amp;gt;&lt;br /&gt;        &amp;lt;span typeof="foaf:OnlineAccount"&amp;gt;&lt;br /&gt;          &amp;lt;a rel="foaf:accountServiceHomepage" href="http://twitter.com/"&amp;gt;Twitter&amp;lt;/a&amp;gt;&lt;br /&gt;          &lt;span style="color: red;"&gt;account. His ID is '&lt;/span&gt;&lt;br /&gt;          &amp;lt;span property="foaf:accountName"&amp;gt;markbirbeck&amp;lt;/span&amp;gt;&lt;span style="color: red;"&gt;'.&lt;/span&gt;&lt;br /&gt;        &amp;lt;/span&amp;gt;&lt;br /&gt;      &amp;lt;/span&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;h2&gt;The whole shebang&lt;/h2&gt;If you want to use the mark-up as a template, then here is everything that we've seen, above. Just replace the values in red with your own details, add any human-readable text you want around it, and you are off and running:&lt;pre&gt;&amp;lt;html xmlns:foaf="http://xmlns.com/foaf/0.1/"&amp;gt;&lt;br /&gt;  &amp;lt;head&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;&lt;span style="color: red;"&gt;Mark Birbeck&lt;/span&gt;'s profile&amp;lt;/title&amp;gt;&lt;br /&gt;    &amp;lt;link rel="foaf:primaryTopic foaf:maker" href="#me" /&amp;gt;    &lt;br /&gt;  &amp;lt;/head&amp;gt;&lt;br /&gt;  &amp;lt;body&amp;gt;&lt;br /&gt;    &amp;lt;div about="#me" typeof="foaf:Person"&amp;gt;&lt;br /&gt;      &amp;lt;span property="foaf:name"&amp;gt;&lt;span style="color: red;"&gt;Mark Birbeck&lt;/span&gt;&amp;lt;/span&amp;gt;&lt;br /&gt;      &amp;lt;a rel="foaf:weblog" href="&lt;span style="color: red;"&gt;http://internet-apps.blogspot.com/&lt;/span&gt;"&gt;&lt;span style="color: red;"&gt;XForms and Internet Applications&lt;/span&gt;&amp;lt;/a&amp;gt;&lt;br /&gt;      &amp;lt;a rel="foaf:knows" href="&lt;span style="color: red;"&gt;http://www.w3.org/People/Ivan/#me&lt;/span&gt;"&gt;&lt;span style="color: red;"&gt;Ivan Herman&lt;/span&gt;&amp;lt;/a&amp;gt;&lt;br /&gt;      &amp;lt;span rel="foaf:img"&amp;gt;&lt;br /&gt;        &amp;lt;img src="&lt;span style="color: red;"&gt;http://www.formsplayer.com/files/pictures/picture-11.jpg&lt;/span&gt;" alt="Picture of &lt;span style="color: red;"&gt;Mark Birbeck&lt;/span&gt;" /&amp;gt;&lt;br /&gt;      &amp;lt;/span&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;span rel="foaf:holdsAccount"&amp;gt;&lt;br /&gt;        &amp;lt;span typeof="foaf:OnlineAccount"&amp;gt;&lt;br /&gt;          &amp;lt;a rel="foaf:accountServiceHomepage" href="http://twitter.com/"&amp;gt;Twitter&amp;lt;/a&amp;gt;&lt;br /&gt;          &amp;lt;span property="foaf:accountName"&amp;gt;&lt;span style="color: red;"&gt;markbirbeck&lt;/span&gt;&amp;lt;/span&amp;gt;&lt;br /&gt;        &amp;lt;/span&amp;gt;&lt;br /&gt;      &amp;lt;/span&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;h2&gt;Publishing your FOAF page&lt;/h2&gt;Since our FOAF page is embedded into an HTML page, then you can publish your FOAF profile pretty much anywhere that you are able to publish HTML or XHTML. Unfortunately, I was not able to update my Blogger profile to include RDFa, so instead I've created a new blog page, which &lt;a href="/2008/03/my-profile.html"&gt;contains my profile&lt;/a&gt;. You'll see a few minor changes to the structure described above, to take into account that we're not creating the entire page, but essentially it's the same.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-9082711743765219509?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/9082711743765219509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=9082711743765219509' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/9082711743765219509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/9082711743765219509'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2008/02/first-steps-in-rdfa-creating-foaf.html' title='First steps in RDFa: Creating a FOAF profile'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-3783065599418964885</id><published>2008-03-03T13:46:00.000Z</published><updated>2008-03-03T14:05:14.283Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='foaf'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml2'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>My Profile</title><content type='html'>The following is a sample profile, created using the techniques described in the post &lt;a href="/2008/02/first-steps-in-rdfa-creating-foaf.html"&gt;First steps in RDFa: Creating a FOAF profile&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;div xmlns:foaf="http://xmlns.com/foaf/0.1/" rev="foaf:made foaf:weblog"&gt;&lt;div about="#me" instanceof="foaf:Person"&gt;&lt;span property="foaf:name"&gt;Mark Birbeck&lt;/span&gt; has spent the last 7 years designing, building and thinking about a framework that enables dynamic user interfaces, driven by data content. Such a framework can dramatically increase programming productivity, and open up the world of application-building to many more people. Since he believes that the framework should be built on open standards, Mark is heavily involved in the W3C, as an invited expert with the XForms and XHTML 2 Working Groups, and also as the designer of RDFa.&lt;br /&gt;&lt;br /&gt;His companies created the formsPlayer XForms processor, and Sidewinder, an open source, next-generation semantic web browser.&lt;br /&gt;&lt;br /&gt;His blog focuses on building a new generation of internet applications, and a number of entries relate to Ajax, XForms, the semantic web, and the use of declarative mark-up. You can find him on &lt;span rel="foaf:holdsAccount"&gt;&lt;span instanceof="foaf:OnlineAccount"&gt;&lt;a rel="foaf:accountServiceHomepage" href="http://twitter.com/"&gt;Twitter&lt;/a&gt;,  where his ID is &lt;a property="foaf:accountName" href="http://twitter.com/markbirbeck"&gt;markbirbeck&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-3783065599418964885?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/3783065599418964885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=3783065599418964885' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3783065599418964885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3783065599418964885'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2008/03/my-profile.html' title='My Profile'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-1135032752754595690</id><published>2008-02-21T22:28:00.003Z</published><updated>2008-02-21T22:47:58.875Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml2'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><title type='text'>RDFa is now in last call</title><content type='html'>After a great deal of effort by some very dedicated people, the &lt;a href="http://www.w3.org/TR/rdfa-syntax/"&gt;RDFa in XHTML: Syntax and Processing&lt;/a&gt; document has entered last call. The full story is on the front-page of the &lt;a href="http://www.w3.org/"&gt;W3C&lt;/a&gt; site, or at this &lt;a href="http://www.w3.org/News/2008#item26"&gt;permalink&lt;/a&gt;. The status of 'last call' means that as far as the people who have been involved in creating the spec are concerned, any technical problems that might have existed have been resolved. Now it's the turn of the wider community to make comments about the document, and even try to implement RDFa processors.&lt;br /&gt;&lt;br /&gt;If you want to read more about RDFa, I've &lt;a href="/search/label/rdfa"&gt;blogged a lot about RDFa&lt;/a&gt;, written an &lt;a href="http://www.swcube.com/rdfa"&gt;Introduction to RDFa&lt;/a&gt;, and &lt;a href="http://2007.xmlconference.org/public/schedule/detail/463"&gt;presented on it&lt;/a&gt;. &lt;a href="http://www.xml.com/pub/a/2007/02/14/introducing-rdfa.html"&gt;Bob DuCharme's Introducing RDFa&lt;/a&gt; is, as we'd expect from him, a great introduction, and Manu Sporny uses his vocal and artistic talents to provide &lt;a href="http://www.youtube.com/watch?v=ldl0m-5zLz4"&gt;RDFa Basics&lt;/a&gt; in video form.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-1135032752754595690?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/1135032752754595690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=1135032752754595690' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/1135032752754595690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/1135032752754595690'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2008/02/rdfa-is-now-in-last-call.html' title='RDFa is now in last call'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-1716578955753969976</id><published>2008-02-13T10:30:00.007Z</published><updated>2008-02-13T16:11:47.446Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='social graph api'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Google's Social Graph API, RDFa and the future of web search</title><content type='html'>One of the main goals of RDFa (&lt;a href="http://www.w3.org/TR/rdfa-syntax/"&gt;syntax&lt;/a&gt; and &lt;a href="http://www.w3.org/2006/07/SWD/RDFa/primer/"&gt;primer&lt;/a&gt;), and its precursors, is to provide richer semantic information for search engines. In &lt;a href="http://www.w3.org/MarkUp/2004/02/xhtml-rdf.html"&gt;one of my early drafts&lt;/a&gt; I gave the example of a news story that referred to the British Prime Minister:&lt;pre&gt;Yesterday in Parliament the Prime Minister said that we will fight them on the beaches.&lt;/pre&gt;Such an article would be easily understood on the day of its publication, and even years later, someone reading this would probably know who the Prime Minister in question was, and possibly even be able to decipher 'yesterday'.&lt;br /&gt;&lt;br /&gt;But what about trying to find this article? If I search in Google for articles about Prime Ministers I'll retrieve articles about the Australian and Malaysian PMs, both of whom are in the news this week, as well as links to the 10 Downing Street web-site, stories about Gordon Brown, and so on. And if I search for "Winston Churchill" the article we're using as an example won't appear, since his name does not occur in the text.&lt;br /&gt;&lt;br /&gt;So the original proposals for RDF in XHTML--now called RDFa--suggested that one way to solve this problem would be to allow metadata about &lt;em&gt;anything&lt;/em&gt; to be added to HTML and XHTML documents. The example given above was extended as follows:&lt;pre&gt;Yesterday in Parliament the &lt;span style="color: red;"&gt;&amp;lt;span resource="p:WinstonChurchill"&amp;gt;&lt;/span&gt;Prime Minister&lt;span style="color: red;"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt; said that we will fight them on the beaches.&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The identifier &lt;code&gt;p:WinstonChurchill&lt;/code&gt; was a made up placeholder, indicating simply that we need a unique identifier that tells us that this particular person is Winston Churchill, but since writing that early draft, &lt;a href="http://dbpedia.org"&gt;DBPedia&lt;/a&gt; has come along, which means that assigning a unique identifier for &lt;em&gt;the person Winston Churchill&lt;/em&gt; is easy.&lt;br /&gt;&lt;br /&gt;So if we have the identifier, and we have a way of adding the mark-up, all we need now is to get the data into the search engines, so that we can use them to find the article.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;And &lt;a href="http://code.google.com/apis/socialgraph/"&gt;Google's Social Graph API&lt;/a&gt; shows that this is already possible.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Google have released an API that allows us to search for people and their relationships to each other. The data is gathered during the normal indexing process, as long as it is provided to the indexer using the &lt;a href="http://gmpg.org/xfn/"&gt;XFN microformat&lt;/a&gt; or via an external link to a &lt;a href="http://www.foaf-project.org/"&gt;FOAF&lt;/a&gt; document. This shows some interesting developments; first, that the Google indexing process is flexible enough to pick up different sorts of information and tie it back to a URL, and second that the search process is flexible enough to allow users to search for these different types of information in different contexts.&lt;br /&gt;&lt;br /&gt;So the logical next step is to add an RDFa processor to the Google indexing pipeline. Since RDFa is a generic language, able to express not just FOAF, but &lt;em&gt;any&lt;/em&gt; RDF vocabulary, then Google will only ever need to add one RDFa processor to their system, and that processor will allow them to index all current and future RDFa, even if documents use vocabularies that hadn't even been invented at the time the processor was installed.&lt;br /&gt;&lt;br /&gt;This is a very different approach to the Microformats technique, since with Microformats, each format is unique and has its own parsing rules, which would mean that Google would have to add a different processor for each format. Not only that, it's very difficult to make multiple Microformats in the same document play together, and since each Microformat has to be centrally approved, there is no great momentum being built towards formats for disciplines such as engineering or chemistry.&lt;br /&gt;&lt;br /&gt;None of which is to belittle the fact that getting XFN indexed by Google is a great start. But whilst I've given examples here that use people, since that is what the Social Graph API does, my point is that everything is in place for something far broader; imagine that chemists could search for any document about a particular compound or molecule (see &lt;a href="http://internet-apps.blogspot.com/2006/12/rdfa-chemistry-and-sharing-of-knowledge.html"&gt;RDFa, chemistry and the sharing of knowledge&lt;/a&gt;), or that doctors were able to find all references to a certain disease. In any number of different specialisms, experts have already created the vocabularies that are relevant to their communities, and RDFa has finally made it possible for these vocabularies to be used directly in news stories, peer-reviewed papers, blogs posts and more, via HTML and XHTML. (RDFa is in the final stages of becoming a W3C-approved specification, but is already in use in many different environments.)&lt;br /&gt;&lt;br /&gt;To complete the triangle, we now need the search engines to start indexing this data, and Google's Social Graph API initiative shows that this is finally a technical possibility.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-1716578955753969976?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/1716578955753969976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=1716578955753969976' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/1716578955753969976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/1716578955753969976'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2008/02/googles-social-graph-api-rdfa-and.html' title='Google&apos;s Social Graph API, RDFa and the future of web search'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-6212214162429783100</id><published>2008-01-22T22:57:00.001Z</published><updated>2008-02-03T14:34:52.930Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='sidewinder viewer'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='popfly'/><category scheme='http://www.blogger.com/atom/ns#' term='adobe apollo'/><category scheme='http://www.blogger.com/atom/ns#' term='adobe air'/><title type='text'>Creating desktop applications with Popfly and the Sidewinder Viewer</title><content type='html'>I've seen a lot of impressive Silverlight and Popfly applications, but one of the limitations I see is that they always have to be run through the web browser. So I've posted a set of video tutorials to YouTube that show how to use a Popfly mashup as a desktop application, using the Sidewinder Web Applications Viewer. The &lt;a href="http://www.swcube.com/howto/popfly-facebook"&gt;complete collection is available as a tutorial&lt;/a&gt; on the Sidewinder Viewer site.&lt;br /&gt;&lt;br /&gt;The first tutorial creates a Popfly mashup that shows Facebook friends in a rotating carousel, to be used in the later tutorials. (So if you are comfortable with Popfly, or you already have a mashup that you would like to use as a desktop gadget, you can safely skip to the second tutorial.)&lt;br /&gt;&lt;br /&gt;The second tutorial makes use of the mashup created in the first tutorial, to show different ways that it can be run as a gadget on the desktop, simply by altering the URL that is used by the Sidewinder Viewer to load the mashup. No manifest files are needed to control an application on the destop -- we can control size, position, chrome, opacity, transparency, docking and autohide behaviour through the URL that is passed to the Sidewinder Viewer -- so all you need is the URL of a Popfly mashup to get started.&lt;br /&gt;&lt;br /&gt;The final tutorial first shows how to make the carousel float on top of all other applications on the desktop, with no chrome or background. It then goes on to describe how to write an event handler in JavaScript that will control how new windows are created; clicking on a friend in the image carousel causes a new window to open showing the friend's Facebook profile, and thanks to the event handler, this new window will be docked to the side of the screen, and set to automatically hide when it loses focus.&lt;br /&gt;&lt;br /&gt;It's also possible to pass events between the windows that are created, which creates all sorts of possibilities for one Popfly gadget to communicate with another. I'm planning to create further tutorials to illustrate what can be done thing, but I'm also interested to hear what applications people are thinking of building, so I look forward to any comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-6212214162429783100?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/6212214162429783100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=6212214162429783100' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/6212214162429783100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/6212214162429783100'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2008/01/creating-desktop-applications-with.html' title='Creating desktop applications with Popfly and the Sidewinder Viewer'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-8776636796611895542</id><published>2008-01-20T11:05:00.000Z</published><updated>2008-01-20T11:43:10.165Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><title type='text'>Welcome to Planet XForms</title><content type='html'>I quite like the 'planet' format of community web-site. It essentially consists of an automated site that reads RSS feeds from blogs and news servers on a particular topic -- MySQL, Gnome, Linux, microformats, etc. It's quite an important service within any community, since not only does it provide a useful place to keep up with what's happening, it's also a way for anyone new to get a 'view from 50,000 feet'. (Or metres.)&lt;br /&gt;&lt;br /&gt;So I decided to set one up for XForms, motivated partly by the simple need for such a service myself (Google News Alerts doesn't always catch items on source such as Flickr or SlideShare), and partly by the belief that when &lt;a href="http://internet-apps.blogspot.com/2008/01/yahoo-uses-xforms-for-write-once-run.html"&gt;a company like Yahoo! mentions XForms&lt;/a&gt;, people are going to start looking for more information about it, and we need to ensure that it's available.&lt;br /&gt;&lt;br /&gt;After much configuring, tweaking and cursing, the site is live, and called &lt;a href="http://planetxforms.org"&gt;Planet XForms&lt;/a&gt;. It aggregates a number of XForms-related blogs, as well as various XForms-tagged resources, such as images from Flickr, presentations from SlideShare, videos from YouTube, events from Upcoming, links from Magnolia and del.icio.us, and news from Google. It also provides a Feedburner feed if you want to get the whole lot in your RSS reader.&lt;br /&gt;&lt;br /&gt;The idea is that Planet XForms is completely automated, and not tied to any particular company or processor. This means that if you have a product screenshot you want the world to see, you don't need anyone's permission to get it onto the site; just place it on Flickr, tag it with 'xforms', and it will soon show up on Planet XForms. Have a useful tutorial? Just make a YouTube video, or upload your slides to SlideShare, and as long as you don't forget the 'xforms' tag it will quickly be available to the whole XForms community.&lt;br /&gt;&lt;br /&gt;If I've missed any sources of data (I'm holding out on Twitter...), or you'd like your blog included, then please do let me know. And I hope that what we have so far proves to be of use to the growing XForms community.&lt;br /&gt;&lt;br /&gt;(One last thing is that I must acknowledge the excellent &lt;a href="http://www.planetmicroformats.com"&gt;Planet Microformats&lt;/a&gt; site, which has a very different feel to it, than the more 'old-fashioned' style used on most of the planet sites that I came across whilst looking for inspiration. Excellent work by Brian Suda.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-8776636796611895542?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/8776636796611895542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=8776636796611895542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8776636796611895542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8776636796611895542'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2008/01/welcome-to-planet-xforms.html' title='Welcome to Planet XForms'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-3626399389104284820</id><published>2008-01-08T15:44:00.000Z</published><updated>2008-01-11T09:17:40.775Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='google code'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='device indepence'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='yahoo'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='backplane'/><title type='text'>Yahoo! uses XForms for 'write once, run anywhere' mobile applications</title><content type='html'>&lt;a href="http://yhoo.client.shareholder.com/press/releasedetail.cfm?ReleaseID=284835"&gt;Yahoo! recently announced their entry into the mobile web applications space&lt;/a&gt;, with a service that allows applications to be built and hosted using &lt;a href="http://us.beta.mobile.yahoo.com/developers"&gt;Blueprint, a purpose-built mark-up language&lt;/a&gt; based on XForms.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://us.beta.mobile.yahoo.com/developers/roadmap"&gt;Blueprint roadmap&lt;/a&gt; describes the underlying philosophy:&lt;blockquote&gt;Much of Blueprint's philosophy and syntax comes from XForms. We opted for a full declarative language because it was the only way we could effectively run on the wide range of devices out there, some of which have no scripting at all. By using declarative syntax, we can encapsulate and hide the scripting specifics. In some cases, the code could run on the phone, in other case, such as XHTML, we can put the logic on our servers. It's the perfect way to deal with the various environments and their capabilities.&lt;/blockquote&gt;At the moment Blueprint is simply converted to XHTML plus JavaScript for delivery to devices, but the mention of XForms gives a clear indication of where they are heading. And given that Google did something similar with the launch of its &lt;a href="http://code.google.com/gme/index.html"&gt;Google Mashup Language&lt;/a&gt;, it all bodes well for a new wave of web applications that won't be built using JavaScript (or even Java and GWT) but will use straightforward, device-independent, mark-up.&lt;br /&gt;&lt;br /&gt;Write once, run anywhere, anybody?&lt;br /&gt;&lt;br /&gt;For more on why XForms is Ajax on steroids, see:&lt;ul&gt;&lt;li&gt;&lt;a href="http://internet-apps.blogspot.com/2006/07/declarative-ajaxnow-were-talking.html"&gt;Declarative Ajax...Now we're talking!&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://internet-apps.blogspot.com/2006/02/xforms-and-ajax-languages.html"&gt;XForms and Ajax Languages&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://internet-apps.blogspot.com/2006/10/is-it-ajax-ajaxor-xforms.html"&gt;Is it AJAX, Ajax...or XForms?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://internet-apps.blogspot.com/2005/04/ajax-hard-facts-brass-tacks-and-bad.html"&gt;Ajax, Hard Facts, Brass Tacks ... and Bad Slacks&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-3626399389104284820?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/3626399389104284820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=3626399389104284820' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3626399389104284820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3626399389104284820'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2008/01/yahoo-uses-xforms-for-write-once-run.html' title='Yahoo! uses XForms for &apos;write once, run anywhere&apos; mobile applications'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-3370513851471545495</id><published>2007-12-14T16:51:00.000Z</published><updated>2007-12-14T17:57:50.769Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xquery'/><category scheme='http://www.blogger.com/atom/ns#' term='xml database'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='app'/><category scheme='http://www.blogger.com/atom/ns#' term='skimming'/><category scheme='http://www.blogger.com/atom/ns#' term='gdata'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='formsplayer'/><category scheme='http://www.blogger.com/atom/ns#' term='atom'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='exist'/><title type='text'>skimming at XML 2007 (and The Cloud's Silver Lining)</title><content type='html'>I've not yet had a chance to write up my experiences at &lt;a href="http://2007.xmlconference.org/"&gt;XML 2007&lt;/a&gt; in Boston last week, but an announcement today by Amazon prompts me to at least summarise one of the talks I did, called &lt;a href="http://2007.xmlconference.org/public/schedule/detail/400"&gt;XForms, REST, XQuery...skimming&lt;/a&gt;. (&lt;a href="http://svn.x-port.net/svn/public/presentations/XML2007/skimming.html"&gt;Slides&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;It's a theme &lt;a href="/2007/05/skimming-and-open-source-project-for.html"&gt;I've touched on a little in this blog&lt;/a&gt;, and have spoken on before (&lt;a href="http://internet-apps.blogspot.com/2006/09/xforms-rest-xqueryand-skimming.html"&gt;at an XML UK meeting, last year&lt;/a&gt;, and &lt;a href="http://2007.xtech.org/public/schedule/detail/114"&gt;at XTECH 2007, this year&lt;/a&gt;), and the idea goes something like this; building web applications by dynamically generating user interfaces that contain data, is awkward, and difficult to maintain. Web services (which includes REST and APP) removes some of the dependency on databases by hiding the data behind a simple abstraction layer--a kind of 'ODBC for the web'--and XQuery takes this further by giving us a standard language to get at the data.&lt;br /&gt;&lt;br /&gt;But XForms is the icing on the cake, since it gives us a rich-client language that can be deployed like traditional web applications, yet is one that ensures a clean separation of the data and the user interface.&lt;br /&gt;&lt;br /&gt;During the course of the presentation I showed how incredibly easy it is to create an application with XForms, since forms can be first created on the desktop--loading and saving their data from local XML files--before being deployed to any type of web server. By creating static forms that load their own data, rather than the more common model of dynamically generating static files that &lt;em&gt;contain&lt;/em&gt; data, we end up with files that are completely agnostic about where they are delivered from. My demonstrations took them from the desktop, to a simple web server, to eXist (an XML database).&lt;br /&gt;&lt;br /&gt;But these applications could even run in 'the cloud', with no web-server. That may sound odd, but I could store any of these XForms applications in SVN or Amazon's S3 and they would work as well as if they were in IIS or Apache. This is the ultimate in simple maintenance and future-proofing, since you are no longer reliant on any particular operating system or server-side language...the forms just 'are'.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;GData&lt;/h2&gt;The final step of my presentation was to take this a little further and show &lt;a href="http://code.google.com/p/gdata-xforms-client/wiki/SpreadsheetAddRow"&gt;an XForm that interacts with Google's GData&lt;/a&gt;; the form is simple, and accepts a longitude, latitude  and comment which is then inserted as a row into a Google Spreadsheet, using Atom Publishing Protocol (APP). Another form is then used to retrieve the entire spreadsheet, and each row is used to create a pin on a map.&lt;br /&gt;&lt;br /&gt;The great thing about this demonstration is that it shows that not only are our forms now agnostic about where they run--desktop, server-side, S3, etc.--but now the data becomes agnostic; we don't care how the data is stored, all we are concerned about is the protocol used to interact with it.&lt;br /&gt;&lt;br /&gt;And crucailly, XForms' ability to get at this data shows that it really is the missing link when it comes to building a new kind of web application.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;SimpleDB&lt;/h2&gt;But this generalisation about data just took another leap with the announcement today by Amazon of a closed beta called SimpleDB. This will allow programmers to store and query for data in a manner similar to the way that GData works.&lt;br /&gt;&lt;br /&gt;By putting data into the cloud, and then using an easily deployed, declarative rich-client language like XForms, it is possible for the architecture of web applications to be altered in a quite fundamental way, in a direction that is completely different to what we're used to.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-3370513851471545495?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/3370513851471545495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=3370513851471545495' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3370513851471545495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3370513851471545495'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/12/skimming-at-xml-2007-and-clouds-silver.html' title='skimming at XML 2007 (and The Cloud&apos;s Silver Lining)'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-1401968481470703539</id><published>2007-12-10T11:16:00.000Z</published><updated>2007-12-10T14:24:15.479Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml2'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>RDFa, @profile, and following your nose</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt; &lt;a href="http://www.flickr.com/photos/incandenzafied/216216398/" title="photo sharing"&gt;&lt;img src="http://farm1.static.flickr.com/84/216216398_f47cc857c6_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt; &lt;br /&gt; &lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;  &lt;a href="http://www.flickr.com/photos/incandenzafied/216216398/"&gt;a monument to Gogol's &amp;quot;Nose&amp;quot;&lt;/a&gt;  &lt;br /&gt;  Originally uploaded by &lt;a href="http://www.flickr.com/people/incandenzafied/"&gt;Incandenzafied&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;One of the issues that people continually return to in relation to metadata in HTML (and with RDFa in particular), is how to know when it is safe to interpret some mark-up as 'additional' metadata. This often gets termed 'following your nose', since the idea is that you should be able to obtain from the document you are processing the information you need to add an extra layer of interpretation to the mark-up.&lt;br /&gt;&lt;br /&gt;(This shouldn't be confused with the other form of 'following your nose', practised by Gogol's Major Kovalyov, which is an altogether more fraught experience.)&lt;br /&gt;&lt;br /&gt;For example, if we were processing an HTML document that contained the &lt;a href="http://microformats.org/wiki/hcard"&gt;hCard microformat&lt;/a&gt;, we might have:&lt;pre&gt;&lt;br /&gt;&amp;lt;span class="fn"&amp;gt;Mark Birbeck&amp;lt;/span&amp;gt;&lt;br /&gt;&lt;/pre&gt;The nose-related question being posed is, how do we know that it is legitimate to interpret the value called out by "fn" as a full-name? Is it not possible that on some occasions an author has simply created a &lt;code&gt;@class&lt;/code&gt; value of "fn" to help their CSS?&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;@profile&lt;/h2&gt;One way this question is answered in the world of microformats is to use the &lt;code&gt;profile&lt;/code&gt; attribute to 'scope' these values; if the author has added the following, to the top of their document:&lt;pre&gt;&lt;br /&gt;&amp;lt;head profile="http://www.w3.org/2006/03/hcard"&amp;gt;&lt;br /&gt;&lt;/pre&gt;then it is pretty clear that they want "fn" values to be interpreted as a 'full name', and it would be quite legitimate for a parser to extract this value and do something with it. The complete mark-up might look like this:&lt;pre&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt; &amp;lt;head profile="http://www.w3.org/2006/03/hcard"&amp;gt;&lt;br /&gt;  .&lt;br /&gt;  .&lt;br /&gt;  .&lt;br /&gt; &amp;lt;/head&amp;gt;&lt;br /&gt; &amp;lt;body&amp;gt;&lt;br /&gt;   &amp;lt;span class="fn"&amp;gt;Mark Birbeck&amp;lt;/span&amp;gt;&lt;br /&gt; &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;This is a good solution for microformats, since there are quite a few of them. Each microformat has different rules for parsing, so indicating the presence of one or more microformats in the &lt;code&gt;profile&lt;/code&gt; attribute works well, and is very much in the spirit of the original meaning of &lt;code&gt;@profile&lt;/code&gt; in HTML.&lt;br /&gt;&lt;br /&gt;But what of a generic solution like RDFa? Does the same situation arise?&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;RDFa is unambiguous&lt;/h2&gt;RDFa uses new attributes, as well as full identifiers for properties and values, so the problem of ambiguity does not arise. To make use of the FOAF value &lt;code&gt;name&lt;/code&gt; an author would declare a namespace prefix, and then use any values that are enabled by that prefix, as follows:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;html xmlns:foaf="http://xmlns.com/foaf/0.1/"&amp;gt;&lt;br /&gt; .&lt;br /&gt; .&lt;br /&gt; .&lt;br /&gt; &amp;lt;body&amp;gt;&lt;br /&gt;   &amp;lt;span property="foaf:name"&amp;gt;Mark Birbeck&amp;lt;/span&amp;gt;&lt;br /&gt; &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;This is about as good as it gets, since it makes use of existing, well understood XML techniques to define properties unambiguously. And since it is using the new &lt;code&gt;property&lt;/code&gt; attribute, it is nigh on impossible that we would happen upon this mark-up in a situation where the author intended some non-RDFa meaning. In other words, RDFa provides a far &lt;em&gt;better&lt;/em&gt; solution than the usual 'follow your nose' approach, which would have us load some kind of profile (as practised by microformats and GRDDL), since it requires no other indications in the document to help discern meaning, other than a few simple, generic, rules.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Indicating the presence of metadata&lt;/h2&gt;However, there is a separate problem that is often raised in conjunction with RDFa, which is how to know whether to actually parse the document or not; if an author has not included any RDFa, why spend time processing it?&lt;br /&gt;&lt;br /&gt;This is not a problem unique to RDFa, being constantly raised in relation to all sorts of document types, since there are of course many situations where it would be preferable to know something about the content of a document before opening it and processing it.&lt;br /&gt;&lt;br /&gt;But that should flag up to us that just because it would be desirable in some situations to avoid the extra processing, it does not mean that a flag to indicate the presence of RDFa should be hard-coded into the syntax and made mandatory, as many are suggesting. In fact, some argue that without such an indicator, the whole structure of RDFa will collapse, which is simply not the case. Since RDFa is unambiguous, detecting its presence is merely about saving on processing time, and is therefore best seen as a use-case...and as a use-case it is no more or less important than other use-cases, such as those that might involve the processing of every single HTML document.&lt;br /&gt;&lt;br /&gt;The confusion that has arisen around the use of &lt;code&gt;@profile&lt;/code&gt; in RDFa is caused by the merging the two--distinct--issues, that of ambiguity of meaning, and that of 'detecting' the presence of RDFa.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Confusion&lt;/h2&gt;When using microformats, the question of ambiguity and the 'presence' of microformats are one and the same. This is necessarily the case because microformats make use of existing HTML attributes, such as &lt;code&gt;class&lt;/code&gt; and &lt;code&gt;abbr&lt;/code&gt;, but populates them with values that are indistinguishable from the ordinary use of such attributes. It is therefore &lt;em&gt;imperative&lt;/em&gt; that a microformat parser (or indeed a GRDDL processor) does not process the values unless it is given some indicator that it is safe to do so.&lt;br /&gt;&lt;br /&gt;RDFa on the other hand uses new attributes, so the presence or otherwise of RDFa is clear. And in the cases where existing HTML attributes are used (namely &lt;code&gt;@rel&lt;/code&gt; and &lt;code&gt;@rev&lt;/code&gt;), RDFa values are 'scoped' anyway, so the ambiguity question does not arise.&lt;br /&gt;&lt;br /&gt;This means that if an RDFa processor were to process every document it found, it would be extremely unlikely to come to any 'conclusions' that were invalid. That doesn't mean that every processor should parse every document, but it does show that the question of 'presence' relates to optimisation rather than being a fundamental issue.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;RDFa does not have the same problem as microformats in relation to ambiguity. So whilst the use of &lt;code&gt;@profile&lt;/code&gt; in microformats is a good way to resolve the ambiguity problem in that context, it is simply irrelevant for RDFa. That doesn't mean we might not wish to indicate when it is worth parsing a document for RDFa, and one way to do this may be to use &lt;code&gt;@profile&lt;/code&gt;. But we have to be clear that ambiguity of terms and detecting the presence of content, are two separate problems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-1401968481470703539?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/1401968481470703539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=1401968481470703539' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/1401968481470703539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/1401968481470703539'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/12/rdfa-profile-and-following-your-nose.html' title='RDFa, @profile, and following your nose'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/84/216216398_f47cc857c6_t.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-5159846275084503838</id><published>2007-12-02T15:40:00.000Z</published><updated>2007-12-02T15:56:29.082Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>Embedding OWL-RDFS syntax in XHTML with RDFa</title><content type='html'>David Decraene is looking for feedback on his article &lt;a href="http://ontologyonline.blogspot.com/2007/11/embedding-owl-rdfs-syntax-in-xhtml-with.html"&gt;Embedding OWL-RDFS syntax in XHTML with RDFa&lt;/a&gt;, which is a "Short introduction to RDFa, OWL and Microformats", and aims to come up with:&lt;blockquote&gt;a solution that reconciles the ease of use of Microformats with the expressivity of a language like OWL. Some problems hindering OWL adoptation will be highlighted, and a first experiment with the use of RDFa mark-up to embed OWL data directly into an XHTML page will be demonstrated, a solution that can be considered as a step higher than Microformats on the evolutionary ladder of the web.&lt;/blockquote&gt;He argues that OWL has a poor presence on the web, attributing this mainly to the fact that no-one has explored approaches to "align / integrate OWL with current web content":&lt;blockquote&gt;For ontological data to truly be useful, you need to somehow tie current web content with semantic classes and instances. OWL has failed miserably in this respect so far. It is much like a far away island of Eden, and a man without a canoe. All the important data could be there but no-one knows how to reach it. Granted, OWL does define a standard format for data interchange between applications, but this limited scope cannot be what the semantic vision is about.&lt;/blockquote&gt;Interestingly enough, if you replaced the word 'OWL' with the word 'RDF', you'd have pretty much the main motivations that spurred the development of RDFa in the first place. David goes on to give an example:&lt;blockquote&gt;What we need is semantic annotation. You need to be able to tag sections of your content with explicit ontology classes and even relations, without it hindering the display of your content. If you wrote a piece on a certain bordeaux for example, you could mark up the section as being about an instance of wine, perhaps even with some properties defined (or even more amazing, just by knowing it is about wine properties can be extracted automatically, a mention of red is bound to be about the wine color).&lt;/blockquote&gt;Whilst there is no doubt that the kind of complex RDFa David uses in his post is not for the everyday user of RDFa, the fact that RDFa &lt;em&gt;can&lt;/em&gt; be used for these kinds of complex examples shows that the architecture is solid.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-5159846275084503838?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/5159846275084503838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=5159846275084503838' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/5159846275084503838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/5159846275084503838'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/12/embedding-owl-rdfs-syntax-in-xhtml-with.html' title='Embedding OWL-RDFS syntax in XHTML with RDFa'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-3081361754897443897</id><published>2007-11-21T21:41:00.000Z</published><updated>2007-11-21T22:39:45.475Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml2'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>Once more on information resources and RDFa</title><content type='html'>Benjamin Nowack has a &lt;a href="http://bnode.org/blog/2007/11/21/moving-out-of-the-shadow-with-rdfa"&gt;great explanation of how RDFa deals with the very tricky issue of information resources&lt;/a&gt;, and indeed, offers a unique solution to the problem. (His post is in response to Ian Davis's post, &lt;a href="http://iandavis.com/blog/2007/11/is-the-semantic-web-destined-to-be-a-shadow"&gt;Is the Semantic Web Destined to be a Shadow?&lt;/a&gt;.) I agree with all of Benjamin's post, and in particular it's very impressive that he draws attention to some very subtle issues, such as why it was important not to include &lt;code&gt;@id&lt;/code&gt; processing in RDFa.&lt;br /&gt;&lt;br /&gt;However, there is one point where I think I would be more positive than Benjamin--or perhaps a better word would be 'optimistic'. Either way, he says towards the end of his post:&lt;blockquote&gt;One practical issue remains, though: Current browsers don't (natively) support navigating to RDF identifiers encoded in RDFa-, microformats-, or GRDDL-enabled HTML pages.&lt;/blockquote&gt;That is true, but given the points that Benjamin has made earlier in the post about how we should be careful when using URIs with fragment identifiers, this navigation question might be a non-issue. After all, if we want to navigate to some point in another document, then by definition we are dealing with an &lt;em&gt;information resource&lt;/em&gt; anyway, and so it's legitimate to use an &lt;code&gt;@id&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;RDFa cleanly copes with the difference between resources that you might want to navigate to, and those that you might only want to refer to, by supporting the use of two different attributes--&lt;code&gt;@href&lt;/code&gt; and &lt;code&gt;@resource&lt;/code&gt;. In terms of the triples generated there is no distinction between the two, but there is a big difference in terms of their &lt;em&gt;behaviour&lt;/em&gt;--only &lt;code&gt;@href&lt;/code&gt; yields a clickable link, in the normal HTML manner.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Illustration&lt;/h2&gt;To illustrate, let's say that in my profile I indicate an identifier for me, as well as my name:&lt;pre&gt;&amp;lt;div about="#mark" instanceof="foaf:Person"&amp;gt;&lt;br /&gt;  &amp;lt;span property="foaf:name"&amp;gt;Mark Birbeck&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;This means that anyone can now refer to my 'identifier', perhaps to indicate that they know me. But it would be wrong to create a clickable link to that identifier, since as Benjamin is correctly implying--and this lies at the heart of the debate about information resources and ordinary resources--I am a &lt;em&gt;person&lt;/em&gt; and not a web-page. (If you are interested in this topic, I wrote a longer post about some of these issues back in May last year, called &lt;a href="/2006/05/information-resource-debate-and-rdfa.html"&gt;The Information Resource Debate, and RDFa&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;However, whilst it would not be a good idea to create a clickable link that points at my identifier (or 'me', to all intents and purposes), there would be nothing wrong with creating a clickable link that refers to my &lt;em&gt;home-page&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;So, to illustrate all of this, let's say that Benjamin used the following mark-up in his web-page, to both indicate that he knows me, and to link to my home-page:&lt;pre&gt;&amp;lt;div about="#benjamin" instanceof="foaf:Person"&amp;gt;&lt;br /&gt;  &amp;lt;span property="foaf:name"&amp;gt;Benjamin Nowack&amp;lt;/span&amp;gt;&lt;br /&gt;  knows &lt;br /&gt;  &amp;lt;div rel="foaf:knows" &lt;span style="color: red;"&gt;resource="http://some.profiles.com/mb#mark"&lt;/span&gt;&amp;gt;&lt;br /&gt;    &amp;lt;span property="foaf:name"&amp;gt;Mark Birbeck&amp;lt;/span&amp;gt;&lt;br /&gt;    (&amp;lt;a rel="foaf:homepage" &lt;span style="color: red;"&gt;href="http://internet-apps.blogspot.com"&lt;/span&gt;&amp;gt;home page&amp;lt;/a&amp;gt;)&lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;As you can see, the distinction has been made between a link to a resource that is another web-page (known as an &lt;em&gt;information resource&lt;/em&gt;) and a link to a resource that is a person--one uses &lt;code&gt;@href&lt;/code&gt; and the other uses &lt;code&gt;@resource&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Intelligent links&lt;/h2&gt;In the future I see this being optimised in a very interesting way, as follows.&lt;br /&gt;&lt;br /&gt;I already have a client-side RDFa parser that whilst parsing will load many of the external documents it comes across, in the hope of finding even more triples. Once parsing is complete, the document being viewed in the browser is 'augmented' with some of the additional information that was found in the triples.&lt;br /&gt;&lt;br /&gt;With this behaviour, it means that in mark-up someone only needs to indicate that they 'know' me, and the RDFa parser does the rest, providing other information gathered from my profile. For example, continuing with the above example, Benjamin could change his mark-up to this:&lt;pre&gt;&amp;lt;div about="#benjamin" instanceof="foaf:Person"&amp;gt;&lt;br /&gt;  &amp;lt;span property="foaf:name"&amp;gt;Benjamin Nowack&amp;lt;/span&amp;gt;&lt;br /&gt;  knows &lt;br /&gt;  &amp;lt;div rel="foaf:knows" resource="http://some.profiles.com/mb#mark"&amp;gt;&lt;br /&gt;    &amp;lt;span property="foaf:name"&amp;gt;Mark Birbeck&amp;lt;/span&amp;gt;&lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;The parser would see the reference to my profile and load it, looking for more triples, and one of the triples that would be gained would be the URL for my home-page:&lt;pre&gt;&amp;lt;div about="#mark" instanceof="foaf:Person"&amp;gt;&lt;br /&gt;  &amp;lt;span property="foaf:name"&amp;gt;Mark Birbeck&amp;lt;/span&amp;gt;&lt;br /&gt;  &amp;lt;a rel="foaf:homepage" href="http://internet-apps.blogspot.com"&amp;gt;home page&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;The final step is for the parser to add a navigable link to the &lt;code&gt;div&lt;/code&gt; or &lt;code&gt;span&lt;/code&gt; associated with me in the document being parsed, using of course the URL of my home-page. And what's really neat is that if I were to change my home-page and re-publish my profile, anyone using the reference to my profile wouldn't need to do a thing to get the updated link to my home-page.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;In my view this kind of functionality shows the benefit of keeping the world of resources and information resources apart; in the latter examples you can see that what the author is marking up is in many ways more 'correct', since they are expressing a relationship between people (i.e., that they know each other) rather than the merely technical notion of 'here is someone's web-page'.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-3081361754897443897?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/3081361754897443897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=3081361754897443897' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3081361754897443897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3081361754897443897'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/11/once-more-on-information-resources-and.html' title='Once more on information resources and RDFa'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-6264429980058153814</id><published>2007-11-20T21:28:00.000Z</published><updated>2007-11-20T22:42:34.600Z</updated><title type='text'>Using URLs to pass parameters to web applications, widgets and gadgets</title><content type='html'>The Sidewinder Viewer contains a growing number of innovative features, and one I'd like to highlight here is the ability to pass run-time parameters for a web application, via a URL.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;&lt;code&gt;meta&lt;/code&gt; and &lt;code&gt;link&lt;/code&gt; values&lt;/h2&gt;You'll probably already know that &lt;a href="http://www.swcube.com/node/175"&gt;Sidewinder can make use of values in the HTML &lt;code&gt;meta&lt;/code&gt; element&lt;/a&gt; to set things like its initial position, the size and width of the initial window, opacity and transparency, and so on. The ability to place important information like this into the document itself is a simple but powerful technique, since it means that you don't need to create manifests containing configuration information, giving you one less file to maintain and deploy.&lt;br /&gt;&lt;br /&gt;However, whilst this technique is simple and straightforward when you are building your own application, what happens when you want to run someone else's web application on your desktop? Or what should you do if you want to take the map display you've created and re-use it as a large desktop application one minute and a small gadget the next? Surely we don't have to create two documents that are exactly the same except for the height and width?&lt;br /&gt;&lt;br /&gt;The answer to both of these question is to move some (or all) of the run-time parameters that are in the head of the document, out to the end of the URL. To do this we use the &lt;code&gt;meta&lt;/code&gt; and &lt;code&gt;link&lt;/code&gt; XPointer schemes.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Google Reader&lt;/h2&gt;For example, let's say that you wanted to load Google Reader into a window that was 900 by 500, positioned at the top of the display, and that would autohide when you moved the mouse away; this is easily achieved by slightly modifying the URL used to open Google Reader in Sidewinder, as follows:&lt;pre&gt;swviewer2 http://www.google.com/reader#meta(width=900,height=500,autohide,position=top)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The result would be something like this:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.swcube.com/files/google-reader-larger.png" alt="Screenshoot of Google Reader running in Sidewinder" width="500"/&gt;&lt;br /&gt;&lt;br /&gt;Similarly, what if you wanted to run the Facebook iPhone application as a gadget on your desktop, with no chrome, docked to the side, and using the same dimensions as an iPhone? As before, take the base URL of the iPhone application, and then add the relevant &lt;code&gt;meta&lt;/code&gt; parameters before passing the whole thing to Sidewinder:&lt;pre&gt;swviewer2 http://iphone.facebook.com#meta(width=320,height=480,chrome=false,autohide,position=right-top)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The result would be something like this:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.swcube.com/files/iphone-facebook-news.png" alt="Screenshot of Facebook iPhone application running in Sidewinder" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Command-line parameters&lt;/h2&gt;Putting parameters into the URL like this essentially places the command-line parameters that one would ordinarily expect to use when running an application--such as &lt;code&gt;blah.exe -height=500 -width=900&lt;/code&gt;--into the URL. This in turn has the important effect of 'factoring out' the application that &lt;em&gt;acts on&lt;/em&gt; the URL, by which I mean that the application is now transparent to the whole process of running our web application.&lt;br /&gt;&lt;br /&gt;That might seem a little obtuse, but the point I'm making is that by using XPointer frameworks like this, we have leveraged perhaps &lt;a href="http://xml-applications.blogspot.com/2007/11/2w-second-coming-of-web.html"&gt;the most important invention of the web, the URI&lt;/a&gt;. And just as URIs are often used as a universal document identifier, independent of any browser used to view that document, so we use URIs as a 'universal command-line', independent of any web applications processor that might process that command-line.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;User control&lt;/h2&gt;But this only tells half the story. For me there is something even more exciting, which is that this technique puts control over the use of an application into the hands of the people running it. For example, we just saw how the size and position of the Google Reader web application can be set in the URL with the &lt;code&gt;meta&lt;/code&gt; XPointer framework, but we could go further than that and use the &lt;code&gt;link&lt;/code&gt; XPointer framework so that when we run the application we use a different stylesheet. We could even refer to a script, some RDFa, and so on.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Next steps&lt;/h2&gt;The next step with this work is to start to formalise the concept, so that it can be used in many different circumstances. For example, although we've seen here how the technique can be used when running web applications with the Sidewinder Viewer, it would also be possible to use run-time parameters when loading widgets into frameworks such as iGoogle, passing in parameters such as preferred colour-scheme, nearest city, and so on. By having some kind of specification it will also make it possible for others to comment and provide input on how to take this work forward.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Further reading&lt;/h2&gt;There are more examples of how the XPointer frameworks can be used, in &lt;a href="http://www.swcube.com/swviewer/intro"&gt;The 10 minute guide to Sidewinder (or 'How to turn a web app into a desktop app without programming')&lt;/a&gt;. For a more in-depth look at running Sidewinder as a web applications viewer, see &lt;a href="http://www.swcube.com/node/516"&gt;Sidewinder as a web applications viewer&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-6264429980058153814?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/6264429980058153814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=6264429980058153814' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/6264429980058153814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/6264429980058153814'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/11/using-urls-to-pass-parameters-to-web.html' title='Using URLs to pass parameters to web applications, widgets and gadgets'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-8200861578458968763</id><published>2007-11-15T20:59:00.000Z</published><updated>2007-11-15T21:47:11.348Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='google code'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='sidewinder'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='sourceforge'/><title type='text'>Sidewinder is open source and gets a new home</title><content type='html'>The transition of Sidewinder, our semantic web applications viewer, to an open source project is now complete. It took quite a lot of work in a number of different areas, but we're convinced that this will now help us realise the full potential of the framework.&lt;br /&gt;&lt;br /&gt;The first thing that had to be done was of course to ready the code. &lt;a href="http://www.ohloh.net/accounts/10639"&gt;Phil Booth&lt;/a&gt;, the lead developer on the viewer, put a lot of work into general tidying up, reordering components for Subversion, and so on. He also did some important work that takes us in a cross-platform direction, such as removing our dependency on MFC, and putting the platform on top of wxWidgets.&lt;br /&gt;&lt;br /&gt;Alongside this work, we also had to spend time looking at the best way to host the code, how to support bug-tracking, where to put discussion forums, and so on. We looked initially at the environments like SourceForge and Google Code that do everything for you, but in the end we liked the look of Trac so much that we felt that was the way to go. And since there seemed to be a number of advantages to hosting our own SVN repositories, we ended up with the following arrangement:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;an Amazon EC2 instance running:&lt;ul&gt;&lt;li&gt;Drupal for the &lt;a href="http://www.swcube.com/"&gt;main Sidewinder Viewer site&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;Trac for the &lt;a href="http://sw.swcube.com/"&gt;Sidewinder Viewer developer site&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;and SVN for the &lt;a href="http://sw.swcube.com/svn/"&gt;Sidewinder Viewer source repository&lt;/a&gt;;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;a &lt;a href="http://sourceforge.net/projects/sidewinder/"&gt;SourceForge project&lt;/a&gt; to host the downloads;&lt;/li&gt;&lt;li&gt;two Google Groups for discussions--one for &lt;a href="http://groups.google.com/group/sidewinder-users/topics"&gt;developers that &lt;em&gt;use&lt;/em&gt; Sidewinder&lt;/a&gt;, and one for &lt;a href="http://groups.google.com/group/sidewinder-dev/topics"&gt;developers who are working on Sidewinder&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;So far this arrangement is working pretty well, and in particular Trac and SVN are a fantastic match.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Getting started with Sidewinder&lt;/h2&gt;The fastest way to get started with Sidewinder is to look at the post &lt;a href="http://www.swcube.com/swviewer/intro"&gt;The 10 minute guide to Sidewinder (or 'How to turn a web app into a desktop app without programming')&lt;/a&gt; on the swcube site. Not only does it show how to run a web application like Google Reader in its own window, docked to the side of the screen, and set to auto-hide, but it also shows how to turn an iPhone application into a desktop gadget.&lt;br /&gt;&lt;br /&gt;Sidewinder can also run embedded in the browser, execute JavaScript applications from the command line, and more, but its ability to run web applications as standalone applications is such a useful feature that it's an excellent place to start.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-8200861578458968763?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/8200861578458968763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=8200861578458968763' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8200861578458968763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8200861578458968763'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/11/sidewinder-is-open-source-and-gets-new.html' title='Sidewinder is open source and gets a new home'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-8681524659291042071</id><published>2007-10-25T08:56:00.000Z</published><updated>2007-10-25T09:04:47.743Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='accessibility'/><category scheme='http://www.blogger.com/atom/ns#' term='device indepence'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>Converting HTML to RDF</title><content type='html'>An interesting discussion came up recently on the 'RDF in XHTML' taskforce mailing-list. The question was asked:&lt;blockquote&gt;I was wondering whether anyone has tried to transform HTML into RDF.&lt;/blockquote&gt;The obvious answer was to describe how the &lt;em&gt;content&lt;/em&gt; of the HTML document could be extracted, using RDFa, for example, or XSLT as used by GRDDL and the guys at SIMILE. But it seemed to me that the question had a slightly deeper meaning.&lt;br /&gt;&lt;br /&gt;To convert HTML to RDF would not simply be to take out the content, but to actually convert the document's &lt;em&gt;structure&lt;/em&gt; to RDF. For example, at the moment if an RDFa parser sees this mark-up:&lt;pre&gt;&lt;br /&gt; &amp;lt;img src="http://...holiday.png" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;it will not generate anything. If it sees this:&lt;pre&gt;&lt;br /&gt; &amp;lt;img rel="foaf:depiction" src="http://...holiday.png" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;then it will generate a triple that establishes are relationship between some object and a resource, stating that the resource is a 'depiction' of the object:&lt;pre&gt;&lt;br /&gt; &amp;lt;&amp;gt; foaf:depiction &amp;lt;http://...holiday.png&amp;gt; .&lt;br /&gt;&lt;/pre&gt;However, you could not round-trip the document from this information. I.e., you could not take the triples and reconstruct the HTML document, or construct some other document in a different language (say Docbook) based on the higher level metadata you've stored. For that you would need to store triples that relate to the elements in the mark-up. In other words, even the first example, with no @rel value, would need to generate some triples, even if it's as simple as:&lt;pre&gt;&lt;br /&gt; &amp;lt;&amp;gt; xh:img &amp;lt;http://...holiday.png&amp;gt; .&lt;br /&gt;&lt;/pre&gt;Obviously this is a discussion for the future, but I believe this to be an important scenario for the 'next generation web'. This is because, by storing the 'intent' of your mark-up rather than the mark-up itself then you would be insulated from changes to rendering language, it would be much easier to be device-independent, you could deliver different versions of a document to different audiences, and so on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-8681524659291042071?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/8681524659291042071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=8681524659291042071' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8681524659291042071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8681524659291042071'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/10/converting-html-to-rdf.html' title='Converting HTML to RDF'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-8297505265603513907</id><published>2007-09-22T10:34:00.000Z</published><updated>2007-09-22T10:37:44.818Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='accessibility'/><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='w'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml2'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>One step closer to bridging the clickable and semantic webs</title><content type='html'>We've reached a point where new editors' drafts of the &lt;a href="http://www.w3.org/MarkUp/2007/ED-rdfa-syntax-20070921/"&gt;syntax and processing&lt;/a&gt; document, and an &lt;a href="http://www.w3.org/2006/07/SWD/RDFa/primer/20070918/"&gt;introductory primer&lt;/a&gt; are available, ready to be reviewed by the W3C's Semantic Web Deployment Group at their next face-to-face meeting.&lt;br /&gt;&lt;br /&gt;Take a look. RDFa is pretty close to completion...and now the fun can really begin.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-8297505265603513907?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/8297505265603513907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=8297505265603513907' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8297505265603513907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8297505265603513907'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/09/one-step-closer-to-bridging-clickable.html' title='One step closer to bridging the clickable and semantic webs'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-6424659657377957414</id><published>2007-08-28T19:23:00.000Z</published><updated>2007-08-28T20:46:34.861Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='device indepence'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='sidewinder'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='backplane'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>Sidewinder and the need for a semantic web applications framework</title><content type='html'>A couple of recent discussions in the RDFa and microformat communities concern areas of particular interest to those of us working on &lt;a href="http://www.formsplayer.com/about-sidewinder"&gt;Sidewinder, a semantic web applications framework&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The initial discussion is taking place on the microformats lists, and &lt;a href="http://microformats.org/discuss/mail/microformats-discuss/2007-August/010526.html"&gt;concerns how to allow authors to indicate what actions are available to be performed on items appearing in a document&lt;/a&gt;. The second discussion is taking place on the 'RDF in XHTML Task Force' list; &lt;a href="http://lists.w3.org/Archives/Public/public-rdf-in-xhtml-tf/2007Aug/0185.html"&gt;this post&lt;/a&gt; provides a good summary of some of the issues.&lt;br /&gt;&lt;br /&gt;All in all I find these very exciting discussions, because they concern exactly the types of use-case that prompted me to get involved with the XHTML work at the W3C a number of years ago.&lt;br /&gt;&lt;br /&gt;This was because I'd been trying to create the kind of flexible user interface that these threads are describing--no doubt just as lots of other people had--and in my own endeavours I ran up against a number of very serious problems that made me conclude that it was pretty much impossible with the technologies available at the time. And since I still haven't seen a convincing solution to the problem of creating extremely flexible user interfaces, I've concluded that the issues I ran up against are of quite a fundamental nature.&lt;br /&gt;&lt;br /&gt;Some of the problems that seem to me to be absolutely necessary to solve are:&lt;ul&gt;&lt;li&gt;an HTML page contains insufficient metadata about what its content 'means', making it difficult to work out what kind of UI constructs to render;&lt;/li&gt;&lt;li&gt;even were you &lt;em&gt;are&lt;/em&gt; able to work out what the data means, HTML is not itself powerful enough to express the kinds of complex user interfaces that you would want to 'bind' to this underlying data;&lt;/li&gt;&lt;li&gt;and even if you work out what the data means and define complex UI components, you &lt;em&gt;still&lt;/em&gt; can't define binding rules that indicate what widget to use with what data;&lt;/li&gt;&lt;li&gt;the browser offers only one 'paradigm' for interacting with information of interest, whilst we often want to create &lt;em&gt;applications&lt;/em&gt; that can make use of the same rich features.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h2&gt;For every problem...&lt;/h2&gt;The first problem--that HTML is not 'rich' enough--is now largely solved by RDFa. It has taken quite a long time to get here, but I think the effort that has gone into getting RDFa right is going to be worth it. The key thing that RDFa does is to get RDF into HTML--once you've got that, all sorts of possibilities open up.&lt;br /&gt;&lt;br /&gt;The second problem--that it's difficult to define rich user interfaces with only HTML--is largely solved by XForms. That XForms is a solution is currently not obvious to most people so XForms remains peripheral in application development at the moment. Of course it is possible to define widgets using script but it quickly gets very messy. There is also an enormous problem of re-use, in the recursive sense; most Ajax libraries are works of art, but very few can support the kind of complexity we need. Take the example shown here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/mark-birbeck/60528583/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/33/60528583_08cba2b9ab.jpg" width="500" height="324" alt="Metabar showing metadata for a BBC news story" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here we have widgets that are made up of other widgets to an arbitrary depth, but the key thing is that the binding mechanism is based on abstractions; it could be the run-time data type or an abstract widget type, and in both cases it means that at any point in the hierarchy a different widget could be swapped in without disturbing anything above or below. This kind of complexity is extremely difficult to achieve with procedural languages. (See also &lt;a href="http://www.formsplayer.com/node/379"&gt;Introduction to custom controls&lt;/a&gt; and &lt;a href="http://www.formsplayer.com/node/888"&gt;Understanding the MVC separation&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;The third problem--the use of binding rules to indicate which widget should be connected to what data--is still a little in the air. One part of it we've solved by &lt;a href="http://www.formsplayer.com/node/884"&gt;specifying binding 'rules' using XPath selectors that are data type aware&lt;/a&gt;. This means that we can indicate that data of type 'geo location' should have one set of behaviour bound to it, whilst data of type 'time' can have a different type. These are essentially binding stylesheets and I think this is where we can answer the question posed on the RDFa list as to whether it is the author, the end-user or the browser vendor that should be in control of the widgets--the answer is all of them! By allowing users to express binding rules that override those from authors, we can achieve the best of both worlds.&lt;br /&gt;&lt;br /&gt;Finally, the problem that the only paradigm we have for interacting with web-based data is 'browsing' is what we are trying to solve with Sidewinder. The ultimate goal is to have a framework that can be used to build &lt;em&gt;any&lt;/em&gt; type of internet-facing application, whether web or desktop based. By allowing all applications to make use of the same semantic functionality and the same binding rules we can allow the users themselves to get control of &lt;em&gt;their&lt;/em&gt; data and &lt;em&gt;their&lt;/em&gt; applications. (See also &lt;a href="/2006/01/web-20-copernicus-and-spartacus-moving.html"&gt;Web 2.0, Copernicus and Sparticus: Moving the centre of the web&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/mark-birbeck/521945943/" title="Photo Sharing" style="float: left;"&gt;&lt;img src="http://farm1.static.flickr.com/192/521945943_0900de30cb_m.jpg" width="240" height="131" alt="Silverlight clock as a custom control in XForms/formsPlayer" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Once you have this kind of 'platform' (see &lt;a href="/2005/11/platform-20.html"&gt;Platform 2.0&lt;/a&gt;) then things really start to open up. I could build &lt;a href="/2007/05/xforms-custom-controls-using-xaml-and.html"&gt;a clock widget using Silverlight&lt;/a&gt;, perhaps, and have that appear anywhere that the time data type is used--whether in my messaging client, my email client, my Twitter gadget, my Facebook desktop notification system, and so on. But &lt;em&gt;you&lt;/em&gt; might choose a clock built using SVG, whilst someone else might decide to have a clock that speaks. But any of us could swap one of these behaviours for another at will, for a component we have created or one that we have downloaded from elsewhere--the ultimate, flexible, programming platform.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-6424659657377957414?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/6424659657377957414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=6424659657377957414' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/6424659657377957414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/6424659657377957414'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/08/sidewinder-and-need-for-semantic-web.html' title='Sidewinder and the need for a semantic web applications framework'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/33/60528583_08cba2b9ab_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-4373797349948334178</id><published>2007-08-22T08:42:00.000Z</published><updated>2007-08-22T09:14:07.142Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='accessibility'/><category scheme='http://www.blogger.com/atom/ns#' term='yui'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml2'/><category scheme='http://www.blogger.com/atom/ns#' term='prototype'/><category scheme='http://www.blogger.com/atom/ns#' term='backplane'/><category scheme='http://www.blogger.com/atom/ns#' term='dojo'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='role'/><title type='text'>Fixing the web, Part 1</title><content type='html'>The &lt;a href="http://www.xhtml.com/"&gt;XHTML.com&lt;/a&gt; site have published the &lt;a href="http://www.xhtml.com/en/future/fixing-the-web-1/"&gt;first part of a two part series on what might be wrong with the web, and how we might fix it&lt;/a&gt;. The idea is that the first part consists of short opinion pieces by people involved in various ways with the web, and the second part is a collection of responses from anyone who wants to send something in.&lt;br /&gt;&lt;br /&gt;Contributors are Chris Wilson, Daniel Glazman, Joe Clark, Doug Geoffray, Roberto Scano, Jeffrey Veen, Dave Raggett, Mike Andrews, James Pearce, Nova Spivack and myself.&lt;br /&gt;&lt;br /&gt;In my comments I focused on the need for a better way to create standards:&lt;blockquote&gt;I actually have a very positive view of the transition to the 'future Web', and I see many of the things that one might say we &lt;em&gt;need&lt;/em&gt; for a better Web already emerging. For example, we need the differences between browsers to be removed, but due to the high quality of libraries such as &lt;a href="http://developer.yahoo.com/yui/"&gt;YUI&lt;/a&gt;, &lt;a href="http://dojotoolkit.org/"&gt;Dojo&lt;/a&gt;, and &lt;a href="http://www.prototypejs.org/" &gt;Prototype&lt;/a&gt; this is well underway. We also need there to be a convergence of application development techniques, so that the same languages can be used for the Web, desktop applications, gadgets, widgets, and so on; but with an explosion of interest in &lt;abbr&gt;HTML&lt;/abbr&gt;, JavaScript and XForms--as well as the appearance of multi-language platforms like &lt;a href="http://www.microsoft.com/silverlight/"&gt;Silverlight&lt;/a&gt;--this trend also looks set to continue.&lt;br /&gt;&lt;br /&gt;So whilst I might say that these things are crucial to the future of the Web, they are also very much underway, and barring a collective overnight loss of memory by the development community, look certain to continue. But there is one thing that to me doesn't look so assured, and that is whether standards are agreed upon around &lt;a href="http://en.wikipedia.org/wiki/Ajax_(programming)"&gt;Ajax&lt;/a&gt;, and more generally, the whole approach to standards development.&lt;br /&gt;&lt;br /&gt;In general, standards (at least those from the &lt;abbr&gt;W3C&lt;/abbr&gt;) are developed in a kind of 'kitchen-sink' style, where some specification tries to include just about everything that can be devised on a particular topic--and therefore takes years to write. A good example is &lt;abbr&gt;SVG&lt;/abbr&gt;, and even, to some extent, my own favourite, XForms. In both cases there are many useful things that could be factored out of these specifications to be made available elsewhere as smaller, more manageable components, but it is only recently that this approach has started to be tried. Good examples of the 'bite-size' approach are the '&lt;a href="http://www.w3.org/TR/xhtml-role/"&gt;role attribute&lt;/a&gt;', '&lt;a href="http://www.w3.org/MarkUp/2007/ED-xhtml-access-20070606/"&gt;access&lt;/a&gt;', and &lt;a href="http://www.w3.org/TR/xhtml-rdfa-primer/"&gt;RDFa&lt;/a&gt;, which provide techniques for adding metadata to web documents as well as making them more accessible. (See also &lt;a href="/2006/07/xhtml-role-attribute-small-and.html"&gt;The XHTML role attribute: small and perfectly formed&lt;/a&gt; and &lt;a href="/2007/02/using-rdfa-in-xhtml-1.html"&gt;Using RDFa in XHTML 1&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;A good measure that some are learning that this is a promising approach to writing specifications is the &lt;a href="http://www.w3.org/TR/backplane/"&gt;backplane&lt;/a&gt; initiative at the &lt;abbr&gt;W3C&lt;/abbr&gt;. But unfortunately, an illustration that lessons &lt;em&gt;haven't&lt;/em&gt; been learned is the &lt;abbr&gt;W3C&lt;/abbr&gt;'s embracing of &lt;abbr&gt;HTML&lt;/abbr&gt; 5, which is not only a case study in kitchen-sink design--let's throw &lt;em&gt;everything&lt;/em&gt; in there--but a case study too of the problems caused by the 'not invented here' mindset.&lt;br /&gt;&lt;br /&gt;If the &lt;abbr&gt;W3C&lt;/abbr&gt; continues to support the creation of enormous specifications that take years rather than months to complete, then it will almost certainly become increasingly irrelevant to the 'future Web'. Of course, based on the &lt;abbr&gt;W3C&lt;/abbr&gt;'s lack of coherent leadership around the whole &lt;abbr&gt;HTML&lt;/abbr&gt; 5 question, some might not see that as necessarily a bad thing, but it does raise the question as to whether other organisations can fill the space with a better process. For example, can the &lt;a href="http://www.openajax.org/"&gt;Open Ajax Alliance&lt;/a&gt; take a much more focused approach to standards writing, creating small specifications that can be easily combined? If so, it's possible that the vacuum would be filled, and the future of the 'future Web' would stand on a firmer footing.&lt;br /&gt;&lt;br /&gt;Whilst I'm not quite sure where the future of standards creation will come from, the sheer dynamism we see in the Web development space makes me certain that it is imminent. If we can devote even a fraction of that creative energy to evolving a new approach to standards development, the future of the 'future Web' looks very bright indeed. But if we don't, then for the foreseeable future we are looking at increasing fragmentation, and the lack of standardisation in the browser merely being transferred to a 'lack of standardisation in the libraries'.&lt;/blockquote&gt;&lt;a href="http://www.xhtml.com/en/future/fixing-the-web-1/#part-2"&gt;Anyone is free to respond to the discussion&lt;/a&gt;, which needs to be done by September 10th. They'll then use the responses to create 'part 2'.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-4373797349948334178?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/4373797349948334178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=4373797349948334178' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/4373797349948334178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/4373797349948334178'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/08/fixing-web-part-1.html' title='Fixing the web, Part 1'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-3055217001858512125</id><published>2007-07-17T10:35:00.000Z</published><updated>2007-07-17T17:38:18.794Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='yowl'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='internet explorer'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='safari'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='growl'/><category scheme='http://www.blogger.com/atom/ns#' term='formsplayer'/><category scheme='http://www.blogger.com/atom/ns#' term='yui'/><category scheme='http://www.blogger.com/atom/ns#' term='device indepence'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml2'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='backplane'/><category scheme='http://www.blogger.com/atom/ns#' term='google gears'/><title type='text'>Ajax and progressive browser enhancement</title><content type='html'>&lt;a href="http://hesketh.com/publications/progressive_enhancement_paving_way_for_future.html"&gt;Progressive enhancement&lt;/a&gt; is an approach to web development that has been around for a few years now. (More on &lt;a href="http://en.wikipedia.org/wiki/Progressive_enhancement"&gt;PE at Wikipedia&lt;/a&gt;.) At its most basic it suggests building our web pages in a 'clean' and uncluttered way, and then layering functionality onto the mark-up using various mechanisms, such as stylesheets and scripts. The idea is that browsers without the additional capabilities can still render the page in some fashion, but those with additional power--such as scripting support--can add more enhanced features.&lt;br /&gt;&lt;br /&gt;This principle actually underpins much of the work we've been doing on XHTML 2, which has involved taking HTML back to its semantic roots. In particular the work on RDFa has been to a large extent motivated by providing more semantic 'hooks' on which to attach increasingly focused functionality. (The work pre-dates the term &lt;em&gt;progressive enhancement&lt;/em&gt;, so it isn't generally called that.)&lt;br /&gt;&lt;br /&gt;But there is a new phenomena afoot, which I'd like to call &lt;em&gt;progressive browser enhancement&lt;/em&gt;. It's something we've been doing for a while with our work on XForms and formsPlayer, but it also has wider applicability.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;DOM Events and standards&lt;/h2&gt;To illustrate the idea of PBE, let's look at eventing in the browser. Many Ajax libraries have their own eventing architecture, and they are without exception non-standard. This is a shame, since the W3C has a standard for DOM  events (&lt;a href="http://www.w3.org/TR/DOM-Level-2-Events/"&gt;DOM 2 Events&lt;/a&gt;) which has been around for years and is very clearly defined. Of course, part of the problem is that whilst it has been implemented in Firefox, Safari and Opera, it's not available in Internet Explorer. This meant that when we began our work on &lt;a href="http://www.formsPlayer.com/"&gt;formsPlayer, our XForms processor plug-in for Internet Explorer&lt;/a&gt;, we had to implement a DOM 2 Events component ourselves.&lt;br /&gt;&lt;br /&gt;This does however mean that DOM 2 Events support is potentially available for all browsers, but of course the problem now is that in order to make use of it on IE, people would have to install formsPlayer. And even if we made the module available separately (which we will be doing shortly), the problem for the programmer is that they can't assume that it is installed; there is still an annoying rift between those who have browsers with DOM 2 Events support, and those that don't.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Using JavaScript to enhance the browser&lt;/h2&gt;To fill the gap we simply implemented a DOM 2 Events library in JavaScript. Whilst most Ajax libraries went the route of creating their own non-standard eventing architectures, we went the other way and implemented the standard. The advantage of our approach is that if our end-user is running a browser with reasonable standards support such as Firefox, Opera or Safari, they'll get native support for DOM 2 Events, and hopefully a faster experience. Similarly, if our user is on IE and has installed the formsPlayer DOM 2 Events component, they will likewise get a faster experience. It's only the middle group using the scripted version of DOM 2 Events who will have a slightly slower experience.&lt;br /&gt;&lt;br /&gt;But the key point is that the end-user now has some control, since they can add a DOM 2 Event component if they want to--most likely as part of some other package--independent of the actual web applications they are using. And for the &lt;em&gt;authors&lt;/em&gt; of web applications life is much easier, since they are coding to a standard, rather than being forced to code to the specific &lt;a href="http://developer.yahoo.com/yui/event/"&gt;event architecture of YUI&lt;/a&gt;, &lt;a href="http://dojotoolkit.org/node/134"&gt;Dojo&lt;/a&gt;, or whatever Ajax library they want to use.&lt;br /&gt;&lt;br /&gt;This is the key idea of &lt;em&gt;progressive browser enhancement&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Threading in Google Gears&lt;/h2&gt;Another example of PBE is &lt;a href="http://code.google.com/apis/gears/api_workerpool.html"&gt;threading in Google Gears&lt;/a&gt;. There are a number of JavaScript libraries around that create simple threading by using the timer in JavaScript. This is fine for a lot of uses but can affect performance. However, we can follow the same approach as I described above for DOM 2 Events; if the function calls that the programmer makes to create a thread are 'standard', then although in normal operation the less-efficient JavaScript version would be used, with no change to the code the web application can take advantage of 'proper' threading, should a user have Google Gears installed. (See also: &lt;a href="/2006/09/ajax-makes-browser-choice-irrelevantbut.html"&gt;Ajax makes browser choice irrelevant...but we still need standards&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;Of course, most users are unlikely to be looking for a threading library to install, just as they will not be downloading a DOM 2 Events module. But if these components are small enough to be bundled up with other pieces of software they will gradually find their way onto users machines as part of other, useful, packages.&lt;br /&gt;&lt;br /&gt;However the distribution takes place, it's the &lt;em&gt;end-users&lt;/em&gt; of our web applications that are in control of progressively enhancing their browser, not the web application programmers themselves.&lt;br /&gt;&lt;br /&gt;These principles have underpinned the design of &lt;a href="http://code.google.com/p/yowl/"&gt;Yowl, a centralised notification system for web applications&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Yowl centralised notification system&lt;/h2&gt;Yowl is a way of providing notifications to users of web applications, but in a way that the user themselves can control. It was inspired by &lt;a href="http://growl.info/"&gt;Growl&lt;/a&gt;, which runs on the Mac, and which is used by applications such as Skype and Adium; by passing all notifications through a central system users are given the power to decide which messages they are interested in, and how they want to see--or even hear--them.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Progressive browser enhancement&lt;/em&gt; allows Yowl notifications to make use of advanced features in the browser if they are available, but to fall back to basic notifications if not. For example, we've created &lt;a href="http://code.google.com/p/yowl/wiki/DisplayStyleSystray"&gt;a Windows component that allows messages to be displayed above the system tray&lt;/a&gt;. The component is invoked and called from script, and works with both Firefox and Internet Explorer:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/mark-birbeck/662221052/" title="Photo Sharing"&gt;&lt;img src="http://farm2.static.flickr.com/1269/662221052_91a2a6e07e.jpg" width="500" height="375" alt="Yowl notifications in IE with Sidewinder system tray component" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;However, if the systray component is not installed, the Yowl notification system will simply use JavaScript to show messages within the browser window. You can see a sample of the non-enhanced notifications &lt;a href="http://yowl.googlecode.com/svn/trunk/test/test-yowl.html"&gt;here&lt;/a&gt;--it will run in all the major browsers:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/mark-birbeck/662082230/" title="Photo Sharing"&gt;&lt;img src="http://farm2.static.flickr.com/1255/662082230_8ea01731f8.jpg" width="500" height="375" alt="Yowl notifications running in Firefox" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The programmer need change nothing in their code to make use of the systray component if it is present, since as with the DOM 2 Events example, or Google Gears and threading, the &lt;em&gt;user&lt;/em&gt; is in control of the browser enhancement, not the programmer.&lt;br /&gt;&lt;br /&gt;(For more on Yowl see the &lt;a href="http://code.google.com/p/yowl/"&gt;Yowl open source project page&lt;/a&gt;, &lt;a href="/2007/06/yowl-design-principles-and-how-to-use.html"&gt;Yowl: Design principles and how to use it&lt;/a&gt; and &lt;a href="/2007/06/yowl-open-source-centralised.html"&gt;Yowl: An open source centralised notification system&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Where does this leave the browser?&lt;/h2&gt;There is still plenty of scope for the browser to evolve and make available the kind of features we're talking about here. But the truth is that &lt;em&gt;progressive browser enhancement&lt;/em&gt; makes browser evolution far less significant than it has been until now. That's probably not a bad thing, given the chaos that is currently surrounding the development of HTML since the W3C gave its support to &lt;a href="http://www.whatwg.org/specs/web-apps/current-work/"&gt;HTML 5&lt;/a&gt;; the spec itself is becoming increasingly top-heavy, and bears little relationship to the early principles of HTML. Far from having enormous 'kitchen-sink' specifications, PBE looks to add new features in a more nimble way, via small and focused modules.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-3055217001858512125?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/3055217001858512125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=3055217001858512125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3055217001858512125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3055217001858512125'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/07/ajax-and-progressive-browser.html' title='Ajax and progressive browser enhancement'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm2.static.flickr.com/1269/662221052_91a2a6e07e_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-218025764842642740</id><published>2007-07-13T10:32:00.000Z</published><updated>2007-07-13T11:22:30.610Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='operator'/><category scheme='http://www.blogger.com/atom/ns#' term='joost'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><title type='text'>RDFa used in Joost</title><content type='html'>Joost have started to put a little RDFa into their pages. To see an example, here's a link to &lt;a href="http://www.joost.com/032001z"&gt;a documentary about Ancient Rome&lt;/a&gt;. Each of the entries in Joost has a page like this, containing information about the video. If you do a 'view source' you'll see that the first thing the document does is declare the namespaces that will be needed:&lt;pre&gt;&amp;lt;html&lt;br /&gt; xmlns="http://www.w3.org/1999/xhtml"&lt;br /&gt; lang="en" xml:lang="en"&lt;br /&gt; xmlns:foaf="http://xmlns.com/foaf/0.1/"&lt;br /&gt; xmlns:dc="http://purl.org/dc/elements/1.1/"&lt;br /&gt;&amp;gt;&lt;/pre&gt;This simply indicates which vocabularies are going to be used in the docment--in this case FOAF and Dublin Core.&lt;br /&gt;&lt;br /&gt;The first piece of mark-up that's of interest is that the concept &lt;code&gt;primaryTopic&lt;/code&gt; from the FOAF vocabulary is used to indicate what &lt;em&gt;exactly&lt;/em&gt; this page is about. This simply involves using a &lt;code&gt;link&lt;/code&gt; element to point to the relevant part of the HTML document, and using a prefixed value for the property (in &lt;code&gt;@rel&lt;/code&gt;):&lt;pre&gt; &amp;lt;head&amp;gt;&lt;br /&gt;  &amp;lt;title&amp;gt;Joost&amp;trade; Link: Treasure Seekers: In The Shadow of Ancient Rome&amp;lt;/title&amp;gt;&lt;br /&gt;  ...&lt;br /&gt;  &amp;lt;link rel="foaf:primaryTopic" href="#video-itself" /&amp;gt;&lt;br /&gt;  ...&lt;br /&gt; &amp;lt;/head&amp;gt;&lt;/pre&gt;This has established that the primary topic of this document is some other part of the document, and if you understand triples you'll know that this means:&lt;pre&gt;&amp;lt;http://www.joost.com/032001z&amp;gt; foaf:primaryTopic &amp;lt;http://www.joost.com/032001z#video-itself&amp;gt; .&lt;/pre&gt;Next the document has some text that the user can read. But the advantage of using RDFa is that both data and metadata can be combined into a single document; in this case the text that the user can read can also become metadata about the video, making use of the concepts 'title' and 'description' from Dublin Core:&lt;pre&gt; &amp;lt;body&amp;gt;&lt;br /&gt;  ...&lt;br /&gt;  &amp;lt;div id="contentArea"&amp;gt;&lt;br /&gt;   &amp;lt;!-- content area --&amp;gt;&lt;br /&gt;   &amp;lt;div about="#video-itself"&amp;gt;&lt;br /&gt;    &amp;lt;p property="dc:title"&amp;gt;Treasure Seekers: In The Shadow of Ancient Rome&amp;lt;/p&amp;gt;&lt;br /&gt;    &amp;lt;p property="dc:description"&amp;gt;&lt;br /&gt;     Wealthier and more powerful than any other ancient civilization, the&lt;br /&gt;     Roman Empire enjoyed a long period of prosperity. But perhaps the&lt;br /&gt;     greatest treasure of this period was not its riches, but its myth.&lt;br /&gt;     Join National Geographic and relive the glories of the Roman Empire&lt;br /&gt;     and see why it has inspired dreamers and dictators throughout the ages.&lt;br /&gt;    &amp;lt;/p&amp;gt;&lt;br /&gt;   &amp;lt;/div&amp;gt;&lt;/pre&gt;This would give us the following triples:&lt;pre&gt;&amp;lt;http://www.joost.com/032001z#video-itself&amp;gt; dc:title "Treasure Seekers: ..." .&lt;br /&gt;&amp;lt;http://www.joost.com/032001z#video-itself&amp;gt; dc:description "Wealthier and more powerful ..." .&lt;/pre&gt;Later in the document there is a section of 'additional information' about the video, and the mark-up here shows another feature of RDFa; the ability to have metadata that is more precise than the text used for human readers:&lt;pre&gt;  &amp;lt;div id="additionalinfo" about="#video-itself"&amp;gt;&lt;br /&gt;    ...&lt;br /&gt;    &amp;lt;p property="dc:subject" content="Documentary"&gt;Category: Documentary&lt;/p&gt;&lt;br /&gt;    ...&lt;br /&gt;   &amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt;  ...&lt;br /&gt; &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;This gives another triple that explains the subject-matter of the documentary:&lt;pre&gt;&amp;lt;http://www.joost.com/032001z#video-itself&amp;gt; dc:subject "Documentary" .&lt;/pre&gt;The advantage of this feature is that even if the inline text were in a different language for different audiences, the metadata produced would still be the same.&lt;br /&gt;&lt;br /&gt;The way Joost are beginning to use RDFa shows that with just a handful of attributes, information about the content of the document--and its purpose--has been made available, to external processors. This could then be used to obtain further information about the film, or even find other films on similar topics. This is one of the primary use-cases for RDFa, so it's exciting to see the data being made available in this way; who is going to be the first to create some functionality in Operator to make use of it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-218025764842642740?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/218025764842642740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=218025764842642740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/218025764842642740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/218025764842642740'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/07/rdfa-used-in-joost.html' title='RDFa used in Joost'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-6123924966227031296</id><published>2007-07-10T09:14:00.000Z</published><updated>2007-07-10T10:40:02.940Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='accessibility'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='odf'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='msoxml'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><title type='text'>Of pots and kettles (more squabbling between Sun and Microsoft about standards)</title><content type='html'>Peter Korn at Sun has obviously decided that there is some mileage in &lt;a href="http://blogs.sun.com/korn/entry/reviewing_the_a_href_http"&gt;promoting&lt;/a&gt; the idea that Microsoft's &lt;a href="http://openxmldeveloper.org/"&gt;Open XML Formats&lt;/a&gt; is not very accessible. Fine. You can never have too much accessibility, so I'm not going to get upset about that. But in the process Peter believes it worth pointing out that Microsoft don't hold to standards:&lt;blockquote&gt;In addition to these important questions [lack of accessibility], this white paper nicely sidesteps what I believe is the intent of WGAG 1.0's Guideline 11: "Using W3C technologies and guidelines", and most specifically checkpoint 11.1 "Use W3C technologies when they are available and appropriate for a task and use the latest versions when supported." Unlike ODF, MSOXML makes almost no use of existing W3C standards. Instead of using the W3C XForms specification for embedded forms, it invents its own XML terminology for forms. Instead of using the SVG specification for vector graphics, it uses its own vector graphics encoding. Instead of using the MathML specification for mathematical equations, it uses its own math encoding.&lt;/blockquote&gt;All true, of course...all true.&lt;br /&gt;&lt;br /&gt;But I've spent a few years in and around the W3C (as an invited expert in the XForms Working Group and the XHTML Working Group), and I've seen up close how all the big companies pick up and drop one or other standard as it suits them, so I can't really take Peter's points that seriously. Much like the idea of open source, standards are a great thing--and much like with open source they become a site for politics and marketing. So as you'd expect, Gray Norton--the main target of Peter's ire--is not about to miss an opportunity to have a dig back, so in his &lt;a href="http://blogs.sun.com/korn/entry/reviewing_the_a_href_http#comments"&gt;reply on Peter's blog&lt;/a&gt; he points out that MSOXML is not the only format not making use of &lt;em&gt;other&lt;/em&gt; standards:&lt;blockquote&gt;Speaking of PDF, would you mind please pointing out the list of W3C recommendations supported by PDF/X-1a, PDF/X-3 and PDF/A? It’s been a few years, but I don’t recall the use of XForms, SVG or MathML in these specifications. These are all ISO standards today, so I’m curious to compare this with the ODF example you cited in your post.&lt;/blockquote&gt;Once again, that's true enough.&lt;br /&gt;&lt;br /&gt;I have no interest in taking sides here, but it does annoy me that it's taken for granted that the world is made up of Microsoft who flout standards, and everyone else who doesn't. It's particularly ironic in this example since Gray needn't have gone as far afield as PDF to point out lack of XForms support--he could have looked at ODF itself. Whilst the Open Document Format may well have adopted the XForms &lt;em&gt;model&lt;/em&gt;, they've not used any of the form controls. And worse, some of the bindings they have used to connect the controls to the model are non-standard (they've made buttons bind to &lt;code&gt;submission&lt;/code&gt;s, rather than model data).&lt;br /&gt;&lt;br /&gt;But I'm not at all criticising ODF for this; what does it matter if only some part of XForms is adopted today in ODF? If it does the job then that's great. If there is any  positive criticism to level it would be at the XForms standard itself for being insufficiently modular to facilitate its use in other formats.&lt;br /&gt;&lt;br /&gt;In short, when everyone is at the same game of promoting one or other standard for commercial or political mileage, it's worth trying to read between the lines a little. Which leaves us only one basis on which to judge any standard--whether it is actually any good for the task at hand.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-6123924966227031296?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/6123924966227031296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=6123924966227031296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/6123924966227031296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/6123924966227031296'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/07/of-pots-and-kettles-more-squabbling.html' title='Of pots and kettles (more squabbling between Sun and Microsoft about standards)'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-5926057953839828684</id><published>2007-06-29T14:58:00.000Z</published><updated>2007-06-29T16:59:13.217Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='yowl'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='internet explorer'/><category scheme='http://www.blogger.com/atom/ns#' term='skimming'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='safari'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='growl'/><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='yui'/><category scheme='http://www.blogger.com/atom/ns#' term='device indepence'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='sidewinder'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='backplane'/><title type='text'>Yowl: Design principles and how to use it</title><content type='html'>&lt;a href="http://www.flickr.com/photos/mark-birbeck/662323376/" title="Photo Sharing" style="float: left;"&gt;&lt;img src="http://farm2.static.flickr.com/1243/662323376_91edc14fb9_s.jpg" width="75" height="75" alt="Close-up on Yowl notifications using YUI" /&gt;&lt;/a&gt; &lt;a href="http://code.google.com/p/yowl/"&gt;Yowl&lt;/a&gt; is an open source project inspired by the &lt;a href="http://www.growl.info/"&gt;Growl&lt;/a&gt; centralised notification system for Mac OS. Growl provides a set of functions that applications can call whenever they want to display a notification to the user, and since the user is able to configure how each message is displayed--including suppressing it altogether--the user gains control over the notifications that they'll receive from an application.&lt;br /&gt;&lt;br /&gt;Yowl aims to make the same functionality available to web applications, via various sets of interfaces. There are two key design principles at the heart of Yowl; the first is that Yowl will make use of extended functionality if it is available on different systems, such as speech, a full version of Growl, Google Gears, the Sidewinder system tray module, and so on. If the user hasn't installed any enhanced features then Yowl will still display notifications using the Yahoo! User Interface (YUI) library. This means that the author doesn't need to know what is installed on their end-users' systems.&lt;br /&gt;&lt;br /&gt;The second design principle is that a user's settings are stored 'in the cloud', and they can take their settings from one computer to another, independent of the application that they are using (an approach we call &lt;a href="http://www.formsplayer.com/about-skimming"&gt;skimming&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;How to use Yowl in a web application&lt;/h2&gt;The first step to making use of Yowl is to load the YUI library into your web application. If you are already using YUI in your project then you may already have the functionality provided by these modules:&lt;br /&gt;&lt;pre&gt;&amp;lt;script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/yahoo-dom-event/yahoo-dom-event.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/animation/animation-min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/container/container_core-min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In addition to the references to YUI we'll need the Yowl library itself. Yowl currently has two scripts and a CSS file:&lt;br /&gt;&lt;pre&gt;&amp;lt;script src="display-yui.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src="yowl.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;  @import url(yowl.css);&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;/pre&gt;&lt;br /&gt;Yowl is able to make use of any number of display 'themes', and the user can decide which notifications will use which theme. The module &lt;code&gt;display-yui.js&lt;/code&gt; is the most basic display theme, and since it's Ajax-based there will always be a way to display notifications, no matter what a user has installed.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Registering notifications with Yowl&lt;/h2&gt;To make use of Yowl, a programmer first needs to tell Yowl about the notifications that their web application will be sending. This is done by calling the &lt;code&gt;register()&lt;/code&gt; function with a list of notification 'names', and then ensuring that the same name is used when making the actual notification call, later on. Since the user can enable and disable the notifications as they choose, the call to &lt;code&gt;register()&lt;/code&gt; will also indicate which of the notifications should be enabled from the start.&lt;br /&gt;&lt;br /&gt;As well as listing all possible notifications, registration also informs Yowl of the name of the application, and optionally provides a graphic that will be used in any notification that doesn't provide its own.&lt;br /&gt;&lt;br /&gt;A sample initialisation call might look like this:&lt;br /&gt;&lt;pre&gt;document.Yowl.register(&lt;br /&gt;  "facebook",&lt;br /&gt;  [ "Friend logged on", "Friend logged off", "Friend twittered", "Important announcement" ],&lt;br /&gt;  [ 0, 3, "Friend twittered" ],&lt;br /&gt;  "facebook.gif"&lt;br /&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Note that the list of notifications to enable (the third parameter) refers to items in the array in the second parameter, and reference can be made either by name or zero-based index. In this example the notification at index 1--"Friend logged off"--is not enabled at the beginning, although this doesn't prevent the user from enabling it later.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Displaying a notification&lt;/h2&gt;Once a list of notifications has been registered with Yowl then any number of calls can be made to display one of the registered notifications. Whether Yowl will &lt;em&gt;actually&lt;/em&gt; display the notification or not will depend on whether the user has chosen to override the default settings provided in the call to &lt;code&gt;register()&lt;/code&gt;. Similarly, &lt;em&gt;how&lt;/em&gt; the notification is displayed will depend on both the parameters set by the programmer in the notification call, and the values configured by the user.&lt;br /&gt;&lt;br /&gt;A typical request would look like this:&lt;br /&gt;&lt;pre&gt;document.Yowl.notify(&lt;br /&gt;  "Friend logged on",&lt;br /&gt;  friend.fullName + " has logged on",&lt;br /&gt;  friend.foreName + " has just logged on, so why not talk to them.",&lt;br /&gt;  "facebook",&lt;br /&gt;  friend.image,&lt;br /&gt;  false,&lt;br /&gt;  0&lt;br /&gt;);&lt;/pre&gt;&lt;br /&gt;This call asks Yowl to display a notification called "Friend logged on", which is the first in the list of notifications registered with the previous call. Provided that the user hasn't disabled the notification then the second parameter will be used as the title of the message, and the third will be the actual message itself. The fourth parameter is the name of the application, and this is used to pick up the default style for the message and a default icon if needed. In this case an image is provided--in the fifth parameter--but it could have been set to &lt;code&gt;null&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;The sixth parameter indicates whether the notification should be 'sticky' or not, which simply means that the user must click it before it will disappear (normal behaviour for a notification is to fade away after a set amount of time--itself configurable by the user). Note that setting the 'sticky' value to &lt;code&gt;true&lt;/code&gt; in a call to &lt;code&gt;notify()&lt;/code&gt; still might not make the notification sticky if the user has overridden the value in their settings. (And of course the converse is true; a user can choose to make some notifications sticky if they want to ensure they don't miss them, even if the programmer has set them to non-sticky.)&lt;br /&gt;&lt;br /&gt;The final parameter indicates a priority level, ranging from "very low" through to "emergency". This is usually left at zero to indicate 'use the default', which gives the user more control.&lt;br /&gt;&lt;br /&gt;In the &lt;a href="http://yowl.googlecode.com/svn/trunk/test/test-yowl.html"&gt;demo application&lt;/a&gt; (which should work in Firefox, Safari and Internet Explorer) we've simulated a user configuring their notifications in such a way that all notifications of type "Important message" must be clicked before they disappear, i.e., they are 'sticky'. In addition, these notifications have been given priority "emergency" (with red text, in this case):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/mark-birbeck/662082230/" title="Photo Sharing"&gt;&lt;img src="http://farm2.static.flickr.com/1255/662082230_8ea01731f8.jpg" width="500" height="375" alt="Yowl notifications running in Firefox" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Additional display themes&lt;/h2&gt;There are two ways in which Yowl supports additional themes. The first is to add different styles and layouts, but use an existing mechanism, whilst the second is to actually add new mechanisms, such as speech, email notifications, and so on.&lt;br /&gt;&lt;br /&gt;The first technique is illustrated in the demo above, since some messages use the "plain" theme (which has a grey background and thin black border) and some use the "smoke" theme (which has a black background with white text, and no border).&lt;br /&gt;&lt;br /&gt;An example of the second type--adding additional mechanisms--is illustrated when a user has the &lt;a href="http://code.google.com/p/yowl/wiki/DisplayStyleSystray"&gt;Sidewinder system tray component&lt;/a&gt; installed. When this is available, notifications can be made to appear &lt;em&gt;outside&lt;/em&gt; of the main browser window, without the need for the programmer to make any changes to their web application:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/mark-birbeck/662221052/" title="Photo Sharing"&gt;&lt;img src="http://farm2.static.flickr.com/1269/662221052_91a2a6e07e.jpg" width="500" height="375" alt="Yowl notifications in IE with Sidewinder system tray component" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note that if you run the &lt;a href="http://yowl.googlecode.com/svn/trunk/test/test-yowl-systray.html"&gt;demo application&lt;/a&gt; without installing the additional component, or run it with a browser /operating system combination that doesn't support the component, Yowl will fall back to the normal notifications as illustrated in the first demo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-5926057953839828684?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/5926057953839828684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=5926057953839828684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/5926057953839828684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/5926057953839828684'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/06/yowl-design-principles-and-how-to-use.html' title='Yowl: Design principles and how to use it'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm2.static.flickr.com/1243/662323376_91edc14fb9_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-3065277890392827313</id><published>2007-06-19T22:05:00.000Z</published><updated>2007-06-19T22:53:06.661Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='yowl'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='google code'/><category scheme='http://www.blogger.com/atom/ns#' term='internet explorer'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='safari'/><category scheme='http://www.blogger.com/atom/ns#' term='growl'/><category scheme='http://www.blogger.com/atom/ns#' term='formsplayer'/><category scheme='http://www.blogger.com/atom/ns#' term='hackdaylondon'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft agent'/><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='yui'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='backplane'/><category scheme='http://www.blogger.com/atom/ns#' term='google gears'/><title type='text'>Yowl: An open source centralised notification system</title><content type='html'>So Hackday was certainly an excellent event.&lt;br /&gt;&lt;br /&gt;If you weren't there and have only heard about lightening striking the building (no, really), then it may sound odd to say that it was 'excellent'. After all, the lightening caused problems with the wi-fi, and it didn't really settle down until quite late in the day. And it also caused something far more surreal...the windows in the roof opened just at the moment it started raining, so we had to be evacuated from the main hall. But the organisers coped with all of this in such a calm way that you couldn't help but get into the swing of things, and keep on adapting.&lt;br /&gt;&lt;br /&gt;However, the upshot was that I 'adapted' to the point of avoiding doing any hack that required the Yahoo! APIs, since you had no idea whether the network would remain up for more than ten minutes. Instead I decided to implement something I'd been mulling over for quite a while, and that's a browser-based implementation of &lt;a href="http://growl.info/"&gt;Growl&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;(If you want to cut straight to a demo, it's available by selecting "Try it now" from the &lt;a href="http://code.google.com/p/yowl/"&gt;Yowl project page&lt;/a&gt;. It's been tested with Firefox, Safari and IE, although the latter does not yet have proper opacity.)&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Growl&lt;/h2&gt;Growl is an interesting piece of software for Mac OS, which centralises the management of notifications. The idea is simply that applications such as Skype or Adium ask Growl to display a message, rather than doing it themselves. However, this makes it sound like just a standard library which might save you writing a bit of code, but Growl is much more important than that. Since all messages pass through it, it can provide facilities to enable the user to indicate whether a message is enabled or disabled, to control how they appear, for how long, and so on.&lt;br /&gt;&lt;br /&gt;But even &lt;em&gt;that&lt;/em&gt; doesn't capture it all; extensions to Growl provide different types of notifications, which are not limited to the display. For example, a user can request that certain messages are spoken to them, or even emailed.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;formsPlayer messaging&lt;/h2&gt;We have a module in &lt;a href="http://www.formsPlayer.com/"&gt;formsPlayer, our XForms processor&lt;/a&gt; that handles XForms messages, and it provides the ability to speak (as long as Microsoft Agent is installed on the PC). Our module also allows authors to display XForms messages as system tray messages, so breaking out of the confines of the browser window.&lt;br /&gt;&lt;br /&gt;So we've long harboured a desire to break this component out into a standalone module that could be used in other applications, and at the same time provide extra features like a debug message logging mode, and so on.&lt;br /&gt;&lt;br /&gt;But an idea that started to form recently was for authors to be able to make a single call to an API requesting a message, and for that call to either be handled in script if formsPlayer was &lt;em&gt;not&lt;/em&gt; installed, and handled by the formsPlayer messaging module if it was. This would mean that authors can get richer messaging functionality if it's available, without having to change their code.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;YUI-based notifications&lt;/h2&gt;So for Hackday, I decided to implement the first part of this, and used the &lt;a href="http://developer.yahoo.com/yui/"&gt;Yahoo! User Interface Library (YUI)&lt;/a&gt; to provide the core notification code. I created a set of interfaces that quite closely mirror the Growl interfaces and object structure, and since my code uses the Yahoo! library, I decided to call the library Yowl.&lt;br /&gt;&lt;br /&gt;The library displays notifications based on a combination of individual settings and themes. One interesting feature I added was to store these themes in a Google spreadsheet, and retrieve them as JSON--all of which continues the idea of 'programming against the cloud' that I've been calling '&lt;a href="http://www.formsPlayer.com/about"&gt;skimming&lt;/a&gt;'.&lt;br /&gt;&lt;br /&gt;You can try the current state of the library on Firefox, IE or Safari by selecting "Try it now" from the &lt;a href="http://code.google.com/p/yowl/"&gt;Yowl project page&lt;/a&gt;. Note that depending when you try this, the IE version might not have opacity support.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Next steps&lt;/h2&gt;Various features will be added this week, mainly based on making use of additional functionality if available. For example, it will be possible to save your preferences for different web applications, in Google Gears if it's installed. Similarly, if the platform has formsPlayer and Microsoft Agent installed then spoken messages will be available on Windows. One particularly interesting goal is to make use of Growl itself if it's detected.&lt;br /&gt;&lt;br /&gt;Once the library is suitably advanced, we'll also fold it back into formsPlayer, and it will become our core messaging module. The interfaces will also be written up separately since they provide a key module of the XForms backplane.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-3065277890392827313?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/3065277890392827313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=3065277890392827313' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3065277890392827313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3065277890392827313'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/06/yowl-open-source-centralised.html' title='Yowl: An open source centralised notification system'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-4730647213283863485</id><published>2007-06-15T19:16:00.000Z</published><updated>2007-06-15T23:00:22.296Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='operator'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='skimming'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='hackdaylondon'/><category scheme='http://www.blogger.com/atom/ns#' term='yahoo pipes'/><title type='text'>RDFa hacking at Hack Day</title><content type='html'>&lt;!-- Hack Day button 180px wide by 105px tall --&gt;&lt;a href="http://www.hackday.org" style="border: none; padding: 0px; margin: 0px"&gt;&lt;img src="http://l.yimg.com/us.yimg.com/i/us/ydn/hackday/hack_day_pattern_five.gif" alt="Hack Day: London, June 16/17 2007" width="180" height="105" style="border: none; margin: 0; padding: 0;"&gt;&lt;/a&gt;&lt;!-- Hack Day button ends --&gt; So tomorrow morning it's off to Alexandra Palace for the start of &lt;a href="http://hackdaylondon07.backnetwork.com/"&gt;Hack Day London&lt;/a&gt;. My wife is raising an eyebrow as I ready my sleeping-bag, and she may have a point...but I'm secretly quite looking forward to hanging out with a lot of smart people, hearing about their good ideas, with no-one around to tell me what time to go to bed.&lt;br /&gt;For myself, I'm hoping to get involved in projects relating to metadata and rich-clients. I'm sure there will be people working in this area, but if not, I've got plenty of new things we've been experimenting with that I might be able to get others to take a look at.&lt;br /&gt;&lt;h2&gt;RDFa Parsing&lt;/h2&gt;Perhaps the most interesting is the use of our RDFa parser within a blog or other document. By adding metadata to elements in a document you are providing a hook which gives you more information about some item. Onto this hook you can 'hang' further functionality or more information.&lt;br /&gt;&lt;br /&gt;To illustrate, let's say I have a cookery blog on which I mentioned Canteen Cuisine by Marco Pierre White. Given that I probably want to make some money from the site with my Google Ads and reseller links, I will most likely place a link to a site like Amazon around the words "Canteen Cuisine":&lt;pre&gt;I found a good recipe in &amp;lt;a href="http://www.amazon.com/gp/product/0091808189?ie=UTF8&amp;amp;tag=escuelerie-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0091808189"&amp;gt;&lt;br /&gt;  Canteen Cuisine&lt;br /&gt;&amp;lt;/a&amp;gt; which you really should buy so that I get a kick-back.&lt;/pre&gt;Obviously this satisfies my commercial yearnings, but it doesn't really contribute to the great 'mass' of semantic information that others might find useful. It doesn't actually tell you which book is being referred to, only that there is a link to a page on Amazon. It would be far better--and easier, as it happens--to simply tag the book with an ISBN number, and leave the creation of links to Amazon, or Barnes and Noble, to some other layer of behaviour.&lt;br /&gt;The key is to use RDFa to indicate a unique identifier for the book, and also to indicate an object &lt;em&gt;type&lt;/em&gt;, i.e., to indicate that the item we're dealing with is really a book:&lt;pre&gt;I found a good recipe in &amp;lt;span xmlns:bib="http://somebig.org/" about="urn:ISBN:0091808189" class="bib:book"&amp;gt;&lt;br /&gt;  Canteen Cuisine&lt;br /&gt;&amp;lt;/span&amp;gt; which you really should buy so that I get a kick-back.&lt;/pre&gt;If you know RDF then you'll understand that the generated triples are:&lt;pre&gt;&amp;lt;urn:ISBN:0091808189&amp;gt; rdf:type &amp;lt;http://somebig.org/book&amp;gt; .&lt;/pre&gt;If you don't know RDF don't worry; the main point is that we've added mark-up that says nothing more than:&lt;pre&gt;"urn:ISBN:0091808189" represents a book.&lt;/pre&gt;But that simple fact is pretty useful, since now we could use the ISBN number to go and get more information from Amazon, and then display the data in a tooltip, or add links so that a reader of the cookery blog could buy the book or add it to their wish-list.&lt;br /&gt;&lt;br /&gt;Before we look at how we get that data, it's worth pointing out that Amazon does offer the &lt;a href="http://typepadwidgets.amazon.co.uk/Amazon-Quick-Linker-Widget"&gt;Quick Linker widget for TypePad users&lt;/a&gt;, but you'll see that the mark-up looks very strange:&lt;pre&gt;&amp;lt;a type=amzn asin=B000012345&amp;gt;I love this item&amp;lt;/a&amp;gt;&lt;/pre&gt;&lt;br /&gt;In some ways it's similar to what I've shown with RDFa, where we use a small amount of mark-up as a hook to generate richer functionality, but in their case it's an Amazon-specific solution. A key design goal of RDFa is to provide a &lt;em&gt;generic&lt;/em&gt; solution that would work with all types of data.&lt;br /&gt;&lt;h2&gt;RDFa action handlers&lt;/h2&gt;Once the RDFa parser has 'found' items in the page it then does something with them. Up until now all of our experiments have been to simply display data in a different way, such as &lt;a href="/2007/02/mashup-punch-up-round-up.html"&gt;showing FOAF information as a card with the person's picture, or event information as a pin on a map&lt;/a&gt;. The &lt;a href="http://labs.mozilla.com/2006/12/introducing-operator"&gt;Operator Firefox extension&lt;/a&gt; (which now supports RDFa as well as microformats) takes a slightly different approach and allows the user to &lt;em&gt;do&lt;/em&gt; things with the data, such as add an hCard to their contacts database.&lt;br /&gt;&lt;br /&gt;The Amazon book experiment is a first step towards combining these approaches. The action handler that gets run when a book is found actually goes to get further data about the book from Amazon, before it shows a panel that contains an image of the book and its title. This means that we don't need to know any URLs for the book on Amazon or where its images are located, since they are derived in the action handler; all we need is the ISBN number.&lt;br /&gt;&lt;h2&gt;Yahoo! Pipes&lt;/h2&gt;But an interesting twist here is that we don't go directly to Amazon to get the data, but instead go via Yahoo! Pipes. There are many reasons for doing this--not least that it fits well with my ideas about &lt;a href="/2006/09/xforms-rest-xqueryand-skimming.html"&gt;skimming&lt;/a&gt;--but the main one is simply because Pipes gives us JSON data for any feed we can access, which works nicely with the model we're building here. By running all of our data requests through Pipes we can provide a single format to our RDFa processor, even if we decide to change the source of our data at some later point, or add further services into the pipe to add more metadata.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://pipes.yahoo.com/pipes/pipe.info?_id=vuUwDiIY3BGcDKmUqGIyXQ"&gt;pipe that we've defined for Amazon&lt;/a&gt; actually takes the URI of the ISBN number (such as &lt;code&gt;urn:ISBN:0091808189&lt;/code&gt;) rather than just the ISBN number, because at some point I'd like this to be a proper RDF query. So I'm actually saying, "give me everything you know about this URI", and whilst that URI currently represents a book, in the future the same query might be able to return information about URIs that represent people, ships, planets, and so on.&lt;br /&gt;&lt;h2&gt;What's next?&lt;/h2&gt;Everything we've been working on so far is about providing a solid widget framework that can be used to enhance any page on any site, in a simple and consistent way. I'm sure that at Hack Day there will be people working on ideas to do with enhancing blogs, ideas related to using the semantic web, microformats (whether in the traditional or RDFa style), and many other things besides, and so I'm really hoping that this will be an opportunity to move some of this work on, in the context of real applications that people want to build.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-4730647213283863485?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/4730647213283863485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=4730647213283863485' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/4730647213283863485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/4730647213283863485'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/06/rdfa-hacking-at-hack-day.html' title='RDFa hacking at Hack Day'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-4401262332925353330</id><published>2007-05-30T20:48:00.000Z</published><updated>2007-05-30T20:53:33.813Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='xaml'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='formsplayer'/><title type='text'>XForms custom controls, using XAML and Silverlight</title><content type='html'>&lt;a href="http://www.flickr.com/photos/mark-birbeck/521945943/" title="Photo Sharing" style="float: left;"&gt;&lt;img src="http://farm1.static.flickr.com/192/521945943_0900de30cb_m.jpg" width="240" height="131" alt="Silverlight clock as a custom control in XForms/formsPlayer" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The title of this post may sound like an attempt to squeeze as many buzzwords as possible into one line, but I'm genuinely excited by all of the technologies mentioned. Everyone knows that Microsoft's commitment to standards such as HTML and XForms is legendarily lacking, and this is nowhere more obvious than in the quaintly kludgy XAML. But that said, there are some very interesting ideas in the language structure itself, and it's clear that they have done a very impressive job with Silverlight.&lt;br /&gt;&lt;br /&gt;So whilst we're certainly not planning to water down our belief here at formsPlayer that standards are (usually) a good thing, we've never seen anything wrong with a pragmatic approach that uses whatever language gets the job done. Having said that, if it's possible to encapsulate non-standard languages like XAML--or even UI-specific languages like SVG--then we will always try to do that.&lt;br /&gt;&lt;br /&gt;Which is why we've created a new section on the formsPlayer site for custom controls, and added two new tutorials. The first shows how easily &lt;a href="http://www.formsPlayer.com/node/890"&gt;custom controls can be built with XAML and Silverlight&lt;/a&gt;, whilst still maintaining a clean separation between the forms that use the controls, and the controls themselves. A second tutorial shows how to create &lt;a href="http://www.formsPlayer.com/node/887"&gt;a simple map control&lt;/a&gt;, which inherits from an image control.&lt;br /&gt;&lt;br /&gt;Using custom controls to more clearly represent different types of data is an important part of our approach to XForms, but at the same time it's important for us to ensure that exciting new technologies such as Silverlight can be used with XForms and formsPlayer. These tutorials make a start, and they'll be followed by a lot of other custom control work in the coming months.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-4401262332925353330?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/4401262332925353330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=4401262332925353330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/4401262332925353330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/4401262332925353330'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/05/xforms-custom-controls-using-xaml-and.html' title='XForms custom controls, using XAML and Silverlight'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/192/521945943_0900de30cb_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-3134172094793931895</id><published>2007-05-19T19:42:00.000Z</published><updated>2007-05-19T20:07:27.635Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xtech'/><title type='text'>XTech goes up a gear</title><content type='html'>I don't know if it's just my perception, but &lt;a href="http://2007.xtech.org/"&gt;this year's XTech&lt;/a&gt; seemed to go up a notch in terms of content, organisation, and just general, 'place-to-beness'. Obviously a lot of this will be to do with the interesting things that are going on the world of the internet, but even so, good things must be happening with XTech, to make presenters choose to air their ideas there. There were many sessions that I wanted to attend, which isn't always the case at conferences, and although I often found the short 45-minute format a little too short, on reflection I realised that this was exactly why there was so much variety, and plenty to see.&lt;br /&gt;&lt;br /&gt;Although I'm sure it won't last forever, one other aspect of the conference that is quite good is that it is fairly small, which coupled with the fact that there are only four sessions at a time means that you were sure to get at least 35-40 attendees to any session. (Of course, many attracted more.)&lt;br /&gt;&lt;br /&gt;I have to mention one last thing which never fails to impress--the cool, calm and collected presence of XTech's organiser, &lt;a href="http://times.usefulinc.com/"&gt;Edd Dumbill&lt;/a&gt;. Putting aside the inevitable wireless connection issue, the conference seemed to me to run flawlessly (my guess is that the only conferences that actually do have wireless internet access are those organised to discuss wireless internet access). And yet on one morning, just before the start of a session, I came across Edd, deep in conversation, and seated at a table that was heaving under the weight of a rather impressive looking breakfast. Edd looked to all the world like he was on a thoroughly enjoyable holiday with some close friends, which is surely the secret of good organisation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-3134172094793931895?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/3134172094793931895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=3134172094793931895' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3134172094793931895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3134172094793931895'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/05/xtech-goes-up-gear.html' title='XTech goes up a gear'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-6751520825587448360</id><published>2007-05-01T15:51:00.000Z</published><updated>2007-05-01T15:53:27.082Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='atom'/><category scheme='http://www.blogger.com/atom/ns#' term='xquery'/><category scheme='http://www.blogger.com/atom/ns#' term='xml database'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='gdata'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='tech talk'/><category scheme='http://www.blogger.com/atom/ns#' term='formsplayer'/><category scheme='http://www.blogger.com/atom/ns#' term='xtech'/><title type='text'>Skimming, and an Open Source project for a GData XForms client</title><content type='html'>For me, one of the most exciting developments on the web in recent years has been the growth in services that let you manage raw data. Many of the most useful such services originate when some web-based application--such as Google calendars or spreadsheets--exposes the underlying data. For example, with Google Spreadsheets, it's possible to use ATOM to query spreadsheets for certain values, or add rows and columns, making this a very powerful way of storing data 'in the cloud'. (See  &lt;a href="http://internet-apps.blogspot.com/2006/01/web-20-copernicus-and-spartacus-moving.html"&gt;Web 2.0, Copernicus and Spartacus: Moving the centre of the web&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;We're building quite a few XForms applications that make full use of this power, and it's something I'll be talking about at XTech 2007, in my session &lt;a href="http://2007.xtech.org/public/schedule/detail/114"&gt;XForms, REST, XQuery...and skimming&lt;/a&gt;. Since the approach we use could work on any XForms processor, talking to any ATOM-based server, we've decided to create an open source project to host the forms, and document their use. If this is an area of interest to you, check out the &lt;a href="http://code.google.com/p/gdata-xforms-client/"&gt;GData XForms client project on Google Code&lt;/a&gt;, and its &lt;a href="http://groups.google.com/group/gdata-xforms-client"&gt;discussion forum&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-6751520825587448360?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/6751520825587448360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=6751520825587448360' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/6751520825587448360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/6751520825587448360'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/05/skimming-and-open-source-project-for.html' title='Skimming, and an Open Source project for a GData XForms client'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-7032449572716940437</id><published>2007-04-09T12:02:00.000Z</published><updated>2007-04-11T11:48:44.216Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='servlet'/><category scheme='http://www.blogger.com/atom/ns#' term='chemistry'/><category scheme='http://www.blogger.com/atom/ns#' term='formsplayer'/><category scheme='http://www.blogger.com/atom/ns#' term='device indepence'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='xaml'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='google maps'/><category scheme='http://www.blogger.com/atom/ns#' term='soa'/><title type='text'>Dynamic user interfaces and XForms' performance</title><content type='html'>&lt;a href="http://www.linkedin.com/answers/technology/web-development/TCH_WDD/34842-5372336"&gt;An interesting question has been raised on Linkedin Answers&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;What is your opinion of formsPlayer, the XForms development environment, with regards to developing dynamically configurable UIs where throughput is critical?&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Although phrased as a question about formsPlayer, it gets to the heart of important issues that concern XForms, so it's worth seeing this as a collection of separate but interrelated questions. The first question is essentially about how appropriate &lt;em&gt;XForms&lt;/em&gt; is for developing dynamically configurable UIs, whilst the second relates to whether there are performance issues to watch out for. Having established whether XForms is suitable, the third question asks if &lt;a href="http://www.formsPlayer.com"&gt;formsPlayer&lt;/a&gt; specifically, is right for the job.&lt;br /&gt;&lt;br /&gt;Since solving the problem of dynamic user interfaces is exactly the reason I got involved in XForms in its early days, this was bound to be a question I'd have an interest in, even if it hadn't mentioned formsPlayer.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Dynamic user interfaces&lt;/h2&gt;A number of years ago much of my work was based around content-management systems. Although my company built a number of different applications and took a number of different approaches to the problem, the common factor in everything we were investigating was the desire to create flexible user interfaces. We nearly always came up against the limitations of HTML in what we were doing, and as a result we nearly always found ourselves defining user interfaces in some hacked together UI language...until one day I stumbled across XForms.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;XForms as a UI definition language&lt;/h2&gt;Initially we simply used XForms to define user interfaces, which were then translated into HTML. XForms was perfect for the job because it allowed UIs to be defined in an 'abstract' way, independent of any platform or system. This was important because other languages that could be used--such as XUL--were insufficiently abstract and focused too much on GUIs. (And although HTML &lt;em&gt;is&lt;/em&gt; to some extent abstract, it just doesn't provide enough of a feature-set.)&lt;br /&gt;&lt;br /&gt;In some ways both of these problems had already been overcome by defining our own intermediate forms language, but XForms was not only more powerful, it came from the W3C, and we felt it important to use standards (&lt;a href="http://www.spiked-online.com/Articles/00000002D42B.htm"&gt;standards often lead to productivity benefits&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;XForms as a run-time language&lt;/h2&gt;Of course it wasn't long before we decided that passing XForms through an XSLT processor in order to produce static HTML was nowhere near as interesting as processing XForms at run-time, and we decided to spend some time producing a run-time processor. We worked on a number of different architectures, all of which were useful in different contexts, but the one we decided to put most effort into was our browser extension, formsPlayer.&lt;br /&gt;&lt;br /&gt;By putting XForms into the browser we were able to speed up our &lt;em&gt;form&lt;/em&gt; development times (edit your form and press &lt;code&gt;F5&lt;/code&gt;), as well as improve performance and the range of features that we could support. Other developers took other routes, and now, a few years on, there are a wide range of XForms processors, each reflecting a different approach to the architecture, and encompassing a variety of platforms; there are solutions for mobile devices (&lt;a href="http://www.picoforms.com"&gt;PicoForms&lt;/a&gt; and MoviForms), browser extensions for both Internet Explorer and Firefox (&lt;a href="http://www.mozilla.org/projects/xforms/"&gt;Mozilla XForms&lt;/a&gt; and &lt;a href="http://www.formsPlayer.com"&gt;formsPlayer&lt;/a&gt;), and of course sophisticated server-side transformation engines (&lt;a href="http://www.orbeon.com/"&gt;Orbeon&lt;/a&gt; and &lt;a href="http://chiba.sourceforge.net/"&gt;Chiba&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;(XForms processors can be built with such a broad range of architectures because of XForms' MVC structure, which I hope to discuss in another post.)&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;XForms and performance&lt;/h2&gt;Whilst it's clear that XForms is an ideal solution for dynamic UIs, it has to be said that it is not (yet) a silver bullet that will hide issues with the underlying architecture. Just as when building an ASP, JSP, Rails--or whatever--solution you need to get your architectural approach right for the task at hand, so too with XForms. Issues such as getting the right data at the right time, or  creating modular and manageable forms, will still need to be taken into account.&lt;br /&gt;&lt;br /&gt;One problem we see a lot in our &lt;a href="http://www.formsplayer.com/support"&gt;consultancy work&lt;/a&gt; is that XForms gets treated as a programming language like Visual Basic, rather than a web-based technology. As a consequence, authors tend to create very large forms, often with numerous instances each importing a large amount of data on document load. This is often compounded by using XSLT to generate the forms, creating a great deal of avoidable duplication, and resulting in even larger forms.&lt;br /&gt;&lt;br /&gt;These are not practices that an Ajax, Java or C++ programmer would follow whilst building an application, but because XForms &lt;em&gt;is&lt;/em&gt; so powerful, it presents a great temptation to the author to create monolithic forms without consideration to what is going on 'under the hood'.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;HTTP and concurrent requests&lt;/h3&gt;For example, most Ajax programmers--at least those who program to the metal--will tell you that there is no point in sending more than two concurrent HTTP requests to the same server, since the third and subsequent requests will be blocked by the browser until the first or second completes. This is not a browser limitation, but a consequence of the HTTP specification, and the effect is to slow down the loading of the main document if all the required images, stylesheets and scripts are placed on the same server.&lt;br /&gt;&lt;br /&gt;If you look at Google Maps or Flickr, for example, you'll see that the image URLs make reference to lots of different servers; you may have assumed that this is to do with distributing server load, but it's not (that problem can be addressed in other ways), and is in fact to do with finding a way to allow browsers to load more external files at the same time, and so improve overall load time. If all Flickr images or Google map tiles were stored on one server then the elapsed time for loading four images into your browser would be the amount of time taken to load two images, one after the other. (I.e., two are loaded simultaneously, followed by another two.) But if those four images were each on separate servers, all four could be requested at the same time, and the elapsed time would essentially be halved.&lt;br /&gt;&lt;br /&gt;Unfortunately, although XForms hides a lot of complexity from the author, this is the kind of thing that XForms can do nothing about--it won't matter what XForms architecture you use if the transport protocol is HTTP. This means that if you have a number of instances in your form, each loaded via the &lt;code&gt;src&lt;/code&gt; attribute, the initial load time will be limited by the fact that only two instances can be loaded simultaneously. And since the UI won't usually be available to the user until all models are initialised, this could create a bad experience for the user.&lt;br /&gt;&lt;br /&gt;Of course the good news is that XForms handles data communications asynchronously out of the box, which means that once the data has been obtained, any form controls that depend on that data will automatically be adjusted to reflect any new values. So provided that you get the underlying architecture of your application right, managing XForms itself is very straightforward.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Deferred loading (or 'Google Suggest')&lt;/h3&gt;Another common problem caused by XForms making some things just &lt;em&gt;too&lt;/em&gt; easy, concerns very large selection lists. In XForms it's straightforward to populate a &lt;code&gt;select1&lt;/code&gt; from some XML data, by using the &lt;code&gt;itemset&lt;/code&gt; element. The problem is that authors will often load the necessary instance data when the form first loads--well before it is ever needed--and worse, this data could be quite large.&lt;br /&gt;&lt;br /&gt;Once again it's important to think about the principles we would have applied if we were writing a C++ or Java application--or even an Ajax one--that was going to obtain data from the internet. For a start we would probably consider loading the data only at the point when we needed it, or perhaps in the background, and in many situations we'd certainly try to load only as much information as was needed.&lt;br /&gt;&lt;br /&gt;For example, if we have a large list of chemical compounds or part numbers for a car,  there may be thousands or even tens of thousands to choose from. But by connecting a &lt;code&gt;select1&lt;/code&gt; to an instance that is populated with data from the server as the user types--as popularised by Google Suggest--we don't need to download so much data, and we also reduce the size of the list. (See &lt;a href="http://internet-apps.blogspot.com/2005/04/xforms-patterns-incremental-and-google.html"&gt;XForms Patterns: Incremental and 'Google Suggest'&lt;/a&gt; and &lt;a href="http://internet-apps.blogspot.com/2005/09/using-google-suggest-to-categorise_11.html"&gt;Using Google Suggest to Categorise del.icio.us&lt;/a&gt; for a detailed discussion of how this is done.)&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;XForms modularisation&lt;/h2&gt;None of this is to say that there are no problems with XForms, and that the only issues you'll ever have are to do with the underlying infrastructure, and as XForms is used for larger and more ambitious applications, there is a lot of scope for improvement at the mark-up level. For example, not only could we defer the loading of some of the data (as discussed above), but we could also defer the loading of some of the &lt;em&gt;form&lt;/em&gt;. There is no mechanism in XForms for doing this at the moment, but much of the 'machinery' is in place in XForms 1.1, and it could be quite straightforward. (See &lt;a href="http://internet-apps.blogspot.com/2006/08/using-subforms-in-xforms.html"&gt;Using subforms in XForms&lt;/a&gt; for some ideas on this.)&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;formsPlayer&lt;/h2&gt;The final question being asked is simply that if the first two questions are answered positively--i.e., if XForms &lt;em&gt;is&lt;/em&gt; a good technology fit in applications that need responsive, dynamic forms--is formsPlayer a good choice as an XForms technology?&lt;br /&gt;&lt;br /&gt;The answer to that question will depend completely on the architecture being deployed to, since as we've seen, XForms can be used in many different kinds of environments. For example, Chiba and Orbeon are both great server-side solutions. They work by translating XForms into HTML (or HTML plus Ajax) that can be processed by any browser. The key benefit of using XForms in this way is that it abstracts away much of the logic that would normally be trapped in RoR controllers, ASP scripts, Java servlets, and so on.&lt;br /&gt;&lt;br /&gt;formsPlayer on the other hand, pushes all of the processing into the client, which has advantages when it comes to control over advanced functionality (we are able to do things that browsers cannot, such as save-and-resume, off-line working, PDF printing, and so on), but for the time being we only support Internet Explorer on Windows (although versions for other platforms are now being developed).&lt;br /&gt;&lt;br /&gt;An interesting bonus of having full XForms support in the &lt;em&gt;client&lt;/em&gt;, is that formsPlayer can be deployed not just in web-based applications as you might expect, but also embedded in other kinds of applications. For example, we have a customer that uses fP inside a .NET application that runs on Tablet PCs; this architecture allows them to use more conventional programming techniques for their processing logic (in this case C#), but to use simple XML tools to develop the complex user interfaces that are needed in their industry. In other words, they use XForms to give them more "dynamically configurable UIs" than C# is able to.&lt;br /&gt;&lt;br /&gt;(It's worth noting that this is a real problem for everyone, and to some extent it lies behind the motivation for XAML. But in my view, XForms wins over XAML by being a standard.)&lt;br /&gt;&lt;br /&gt;formsPlayer therefore meets a different set of needs to server-side solutions like Chiba and Orbeon, so as with any application, developers will need to work out for themselves which XForms architecture is the most appropriate for their project.&lt;br /&gt;&lt;br /&gt;Regardless of the model used, it should be stressed that we are still dealing with only &lt;strong&gt;one language&lt;/strong&gt;. Try finding another programming language which would allow you to write an application that could run in a browser or embedded in a .NET application or on a mobile phone...or even as a server-based application, &lt;em&gt;without altering any of the code&lt;/em&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-7032449572716940437?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/7032449572716940437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=7032449572716940437' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/7032449572716940437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/7032449572716940437'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/04/dynamic-user-interfaces-and-xforms.html' title='Dynamic user interfaces and XForms&apos; performance'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-3686783529232537941</id><published>2007-03-26T12:11:00.000Z</published><updated>2007-03-26T12:14:21.852Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='sidewinder'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='selenium'/><category scheme='http://www.blogger.com/atom/ns#' term='formsplayer'/><title type='text'>formsPlayer provides support for Selenium automated testing tool</title><content type='html'>If you use &lt;a href="http://www.openqa.org/selenium/"&gt;Selenium&lt;/a&gt; for your web application testing, then you'll already know how useful it is to be able to automate tests. To get the same ease of testing for XForms applications we recently added some properties to formsPlayer so that Selenium scripts can make assertions against the values inside a running XForm. We've also created the necessary Selenium extensions to provide access to these properties from within tests.&lt;br /&gt;&lt;br /&gt;A description of how it works, guidance on how to write tests, and links to the Selenium extensions, are all on our site, under &lt;a href="http://www.formsplayer.com/node/818"&gt;Using Selenium to test XForms and formsPlayer&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-3686783529232537941?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/3686783529232537941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=3686783529232537941' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3686783529232537941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3686783529232537941'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/03/formsplayer-provides-support-for.html' title='formsPlayer provides support for Selenium automated testing tool'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-3626835308554902767</id><published>2007-03-20T23:12:00.000Z</published><updated>2007-03-20T23:19:24.437Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml2'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><title type='text'>Kurt Cagle on RDFa</title><content type='html'>As always Kurt Cagle makes interesting points, this time in a &lt;a href="http://www.understandingxml.com/2007/03/where_is_xml_going.html"&gt;round-up of what to watch out for in XML technologies&lt;/a&gt;:&lt;blockquote&gt;Similarly, I suspect that while RDFa may have a fairly major hill to climb in terms of adoption, it will likely end up becoming integral to the semantic web fairly soon. &lt;em&gt;Folk ontologies&lt;/em&gt; (or folksonomies, as some have referred to them) are not in fact really ontologies at all - they are instead simply property associations. If you can articulate a consisten (sic) property relationship using attributes outside of the normal XHTML ones, then you can do more than simply tag a document - you can in fact create relationships between entities in an XHTML document without having to leave the context of that document. That's what RDFa does. These can then be interpreted by RDF enabled tools, making it possible to achieve something of the holy grail of the semantic web - provide a simple way of nonetheless encoding metadata into a document. I've argued for years that RDF as it exists right now is too complex for your average web developer, and what's more it perforce requires duplication of content between the RDF and XHTML (or whatever document format you're using). Eliminate this need for duplication by embedded the descriptive relational characteristics directly in the element's attribute set, and all of a sudden the Semantic Web begins to move away from being unachievable to being doable.&lt;/blockquote&gt;&lt;br /&gt;This is exactly what motivated the creation of RDFa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-3626835308554902767?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/3626835308554902767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=3626835308554902767' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3626835308554902767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3626835308554902767'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/03/as-always-kurt-cagle-makes-interesting.html' title='Kurt Cagle on RDFa'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-2510759887820354099</id><published>2007-03-20T10:21:00.000Z</published><updated>2007-03-20T10:25:05.479Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml2'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='formsplayer'/><title type='text'>Adriaan de Jonge on XForms and RoR</title><content type='html'>Adriaan de Jonge's article &lt;a href="http://adriaandej.blogspot.com/2006/12/xforms-vs-ruby-on-rails.html"&gt;XForms vs. Ruby on Rails&lt;/a&gt; is a must-read for anyone interested in XForms.&lt;br /&gt;&lt;br /&gt;You may not agree with all of it, but the author clearly understands the benefits of XForms, even if he ultimately comes down on the side of Ruby on Rails. And he makes some interesting suggestions as to where XForms should be going next.&lt;br /&gt;&lt;br /&gt;The following quote is a useful summary of both the power of XForms, and the things we need to focus on to allow it to be used by more and more people:&lt;blockquote&gt;XForms logic beats any other technique when used in XML documents with semi-structured nature. XForms logic is based on XML specifications and XPath queries. This notation requires a thorough understanding of XML, creativity with XPath, trial and error, and great talent for logical puzzles. For someone with the knowledge and experience of a software architect, the simple tools in XForms can be the building blocks of a very advanced and intelligent application.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-2510759887820354099?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/2510759887820354099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=2510759887820354099' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/2510759887820354099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/2510759887820354099'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/03/adriaan-de-jonge-on-xforms-and-ror.html' title='Adriaan de Jonge on XForms and RoR'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-4866676429901260609</id><published>2007-03-14T22:01:00.000Z</published><updated>2007-03-14T22:34:02.738Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='formsplayer'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml2'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='sidewinder'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='tech talk'/><category scheme='http://www.blogger.com/atom/ns#' term='google maps'/><title type='text'>Tech Talk at Google on Sidewinder</title><content type='html'>&lt;a href="http://www2.blogger.com/profile/03589687652590194428"&gt;T. V. Raman&lt;/a&gt;, one of the key architects of &lt;a href="http://www.w3.org/MarkUp/Forms/"&gt;XForms&lt;/a&gt;, invited me to do a Tech Talk at Google. The talk was on &lt;span content="20070312T110000Z-0800" datatype="datetime"&gt;Monday&lt;/span&gt;, and looked at &lt;a href="http://www.formsPlayer.com/about-sidewinder"&gt;Sidewinder&lt;/a&gt; and our approach to &lt;a href="http://www.formsplayer.com/xh"&gt;using web languages to create desktop applications&lt;/a&gt;--XHTML, XForms, RDFa and so on. Although I really enjoyed doing the talk and having the opportunity to explain at length to a load of techies what exactly it is that we're doing, my overriding memory is already that of the lunch afterwards. Unfortunately, the lunch was not captured on video, although they do record the tech talks:&lt;br /&gt;&lt;br /&gt;&lt;embed style="width:400px; height:326px;" id="VideoPlayback" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=7466594705962010566&amp;hl=en" flashvars=""&gt; &lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;The abstract for the talk was as follows:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Web applications use HTTP to communicate with relevant services and manifest their user  ... all » interface via HTML, CSS and JavaScript. With the advent of different gadget frameworks, they have finally broken free of the shackles of the Web browser to manifest themselves on the user's desktop as first-class productivity tools.&lt;/blockquote&gt;&lt;blockquote&gt;In this talk I'll describe Sidewinder, a framework for authoring and deploying web applications that are created as first-class desktop citizens. Applications created in this framework can not only communicate with the web, but with each other, turning the whole platform into a powerful tool for creating mashup applications. Sidewinder can also turn any other web application into a desktop application, such as GCal, KoolIM, Google Docs, and so on.&lt;/blockquote&gt;&lt;blockquote&gt;Another powerful aspect of the Sidewinder framework is the ability to display custom widgets based on the type of the data being processed--chosen dynamically at run-time. This kind of flexibility is crucial when building desktop mash-ups based on varying sources of web-based information, and Sidewinder goes further by making it easy to process the data-oriented web--including microformats and RDFa.&lt;/blockquote&gt;&lt;blockquote&gt;The presentation will include a number of rich internet applications that use the Sidewinder framework.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-4866676429901260609?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/4866676429901260609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/4866676429901260609'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/03/tech-talk-at-google-on-sidewinder.html' title='Tech Talk at Google on Sidewinder'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-4103997459661914235</id><published>2007-03-09T05:49:00.000Z</published><updated>2007-03-09T06:18:52.404Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Python RDFa parser</title><content type='html'>&lt;a href="http://wiki.creativecommons.org/User:NathanYergler"&gt;Nathan Y. Yergler&lt;/a&gt;, a senior software engineer at Creative Commons has published &lt;a href="http://cheeseshop.python.org/pypi/rdfadict/0.3"&gt;RDFaDict&lt;/a&gt;, an RDFa parser written in Python.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-4103997459661914235?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/4103997459661914235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=4103997459661914235' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/4103997459661914235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/4103997459661914235'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/03/python-rdfa-parser.html' title='Python RDFa parser'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-2752860184446060903</id><published>2007-02-25T22:07:00.000Z</published><updated>2007-02-26T00:03:41.295Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='atom'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='webdav'/><category scheme='http://www.blogger.com/atom/ns#' term='adobe apollo'/><title type='text'>XForms is coming of age with version 1.1</title><content type='html'>A &lt;a href="http://www.w3.org/TR/2007/WD-xforms11-20070222/"&gt;new draft of XForms 1.1&lt;/a&gt; was made available last week. It's a last call working draft, which means that once comments made on the document have been taken into account, it will hopefully be possible to advance the specification through candidate recommendation, and on to a full recommendation.&lt;br /&gt;&lt;br /&gt;To be brutally honest, in terms of &lt;em&gt;features&lt;/em&gt;, XForms 1.1 is nothing to write home about. The bulk of the new stuff was needed long ago, and we could have done with having it in there before now: looping and conditional constructs are &lt;a href="/2005/09/on-adobe-and-xforms-via-declarative.html"&gt;crucial to any language&lt;/a&gt;; the ability to set URLs and headers at run-time is a 'must-have' when using SOAP, WebDAV, ATOM, and REST; and being unable to insert nodes into a nodeset when all the nodes had been deleted was painful! Thankfully, those days are now behind us. :)&lt;br /&gt;&lt;br /&gt;But just because none of these features are unanticipated, doesn't mean that this document is not an important one.&lt;br /&gt;&lt;br /&gt;For a start, in many places it's clearer than XForms 1.0; although W3C documents are always a team effort, the improving coherence is due to a lot of hard work from &lt;a href="http://www-03.ibm.com/developerworks/blogs/page/JohnBoyer"&gt;John Boyer&lt;/a&gt;, as he's often prepared to go the extra mile when writing an explanation or giving additional examples. (A sense of what has changed can be seen by looking at &lt;a href="http://www.w3.org/TR/2007/WD-xforms11-20070222/index-diff.html"&gt;the version with all differences highlighted&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;Secondly, whilst I might have a moan that the new features were slow coming, the point is that they indicate the commitment on the part of the working group to solve &lt;em&gt;real world&lt;/em&gt; problems, and more importantly, they show how the underlying XForms architecture easily lends itself to the addition of new features in a natural way.&lt;br /&gt;&lt;br /&gt;And finally, with &lt;a href="http://www.formsplayer.com/node/671"&gt;the new submission features of version 1.1&lt;/a&gt;, and the already powerful XML-handling that was a hallmark of version 1.0, XForms becomes the obvious choice for quickly creating rich internet applications that use ATOM, WebDAV, and REST. That XForms does 'come of age' is crucial if, alongside &lt;a href="http://www.informationweek.com/news/showArticle.jhtml?articleID=197008516"&gt;the proprietary offerings of Adobe and Microsoft&lt;/a&gt;, there is to be an approach to building internet applications that is based purely on open standards.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-2752860184446060903?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/2752860184446060903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=2752860184446060903' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/2752860184446060903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/2752860184446060903'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/02/xforms-is-coming-of-age-with-version-11.html' title='XForms is coming of age with version 1.1'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-7016971044038705008</id><published>2007-02-23T16:56:00.000Z</published><updated>2007-02-23T21:34:33.023Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='formsplayer'/><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='sidewinder'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='google maps'/><title type='text'>mashup* punch-up round-up</title><content type='html'>&lt;a href="http://www.flickr.com/photos/mark-birbeck/400027836/" title="Photo Sharing" style="float: left; padding-right: 5px;"&gt;&lt;img src="http://farm1.static.flickr.com/54/400027836_c2a76dcba2_m.jpg" width="240" height="171" alt="formsPlayer Browser extension showing RDFa data" /&gt;&lt;/a&gt; No, &lt;a href="http://www.etribes.com/node/60678" content="20070222T180000Z"&gt;last-night's mashup*&lt;/a&gt; wasn't really a punch-up...but we did have a thoroughly enjoyable ding-dong on topics ranging from whether the next wave of the web would be sensual or semantic, whether rules-engines were the answer to our problems, whether placing a red cross (or a green tick) against an entry in search results was providing a service or 'policing the web', and much more besides. Combined with a great venue, and some interesting characters to share a bottle of beer with, it made for an enjoyable and interesting evening.&lt;br /&gt;&lt;br /&gt;Although the meeting was 'about' the semantic web, organiser &lt;a href="http://www.vecosys.com/"&gt;Sam Sethi&lt;/a&gt; was keen to avoid yet another discussion that remained high-level and abstract, and instead wanted to look at some of the exciting things that can be done once you get your hands on the data. Of course that didn't stop some people from trying to explain what 'semantic web' means, and unfortunately they did so with just enough clarity to convince everyone else that it was an unrealisable pipe-dream.&lt;br /&gt;&lt;br /&gt;All of which indicated to me, at least, that Sam had been right when he made the decision to focus the evening on what can be done &lt;em&gt;today&lt;/em&gt;. As part of illustrating this, he kicked off with some nice demos of the Firefox extensions &lt;a href="http://www.whymicroformats.com/webcards/index.html"&gt;Webcards&lt;/a&gt; and &lt;a href="http://blog.codeeg.com/tails-firefox-extension-03/"&gt;Tails&lt;/a&gt;, both of which process &lt;a href="http://microformats.org/"&gt;microformats&lt;/a&gt; located in the ordinary pages you view whilst you are browsing...and both of which look great.&lt;br /&gt;&lt;br /&gt;My demo also involved a browser extension, this time for Internet Explorer, and one we created ourselves using the &lt;a href="http://www.formsplayer.com/node/108"&gt;browser extension features of formsPlayer&lt;/a&gt;. The data I used for my demonstration used the &lt;a href="http://rdfa.info"&gt;RDFa&lt;/a&gt; format rather than microformats, and to illustrate what the sidebar can do I used &lt;a href="http://www.w3.org/People/Ivan/"&gt;Ivan Herman's home-page&lt;/a&gt; (which contains FOAF information) as well as &lt;a href="/2007/02/presenting-rdfa-at-what-comes-next-web.html"&gt;my previous blog entry describing the mashup* event&lt;/a&gt; (which contains FOAF and iCal information).&lt;br /&gt;&lt;br /&gt;The RDFa browser extension simply parses the HTML document in the main window, and stores any RDFa it finds. Then, using XForms and formsPlayer's ability to render custom widgets based on the datatype of the data, the information from the document is displayed in ways that are specific to each piece of data.&lt;br /&gt;&lt;br /&gt;In the case of the mashup* event we have two high-level widgets, one for a person and one for an event. The person widget simply shows a person's name, a link to their email address, and their picture. The event widget shows the title of the event, a link to any further information about the event, a map of the location, and the time the event starts. Both the map and the clock are of course themselves widgets--the first an interactive Google Map, and the second an analogue clock created using SVG:&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/mark-birbeck/400027836/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/54/400027836_c2a76dcba2.jpg" width="500" height="356" alt="formsPlayer RDFa sidebar showing FOAF and iCal information" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The architecture of this sidebar is interesting for two reasons; the first is that it allows different actions to be performed depending on the data that has been located, and is something that Tails and &lt;a href="http://labs.mozilla.com/2006/12/introducing-operator"&gt;Operator&lt;/a&gt; allow. But we get further flexibility in our RDFa sidebar when it comes to rendering this information; by allowing the widgets to be selected at run-time, based on the 'type' of the data being shown, we really play to the de-centred nature of the web, and allow users to do what they want with the data that they discover. We need this because RDFa is a generic language, and as such we don't know whether it will be used to carry information about people, events, chemical compounds, items for sale, and so on. But precisely because it's generic we don't need to write a parser for every possible language--we only need one. By allowing different widgets to be displayed depending on the 'type' of the data, we can easily create views on the data that are appropriate to different groups and users.&lt;br /&gt;&lt;br /&gt;I resisted the temptation last night to try to explain what 'semantic web' means, so I certainly won't bother trying to do it now. Last night's event convinced me that Sam was right to focus on what we can &lt;em&gt;do&lt;/em&gt; with all of this, and the exciting collection of demonstrations makes me think that today, the 'doing' part is making the whole thing feel very real indeed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-7016971044038705008?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/7016971044038705008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=7016971044038705008' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/7016971044038705008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/7016971044038705008'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/02/mashup-punch-up-round-up.html' title='mashup* punch-up round-up'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/54/400027836_c2a76dcba2_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-4907268776349707152</id><published>2007-02-20T12:58:00.000Z</published><updated>2007-02-21T12:48:26.818Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml2'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='role'/><title type='text'>Using RDFa in XHTML 1</title><content type='html'>One of the things I'm hoping to &lt;a href="/2007/02/presenting-rdfa-at-what-comes-next-web.html"&gt;show on Thursday&lt;/a&gt; is that it is possible to embed metadata into XHTML 1 documents using RDFa &lt;strong&gt;today&lt;/strong&gt;. This is an important part of the RDFa story, but it is unfortunately being lost a little. The reason for that is understandable; RDFa originated in work I was doing in the HTML Working Group on 'metadata within XHTML 2', and as a consequence many of the early examples show RDFa being used in this as yet unreleased version of XHTML. But RDFa was always intended to be a technique that would allow metadata to be placed into &lt;em&gt;any&lt;/em&gt; mark-up, from SVG to MathML...and of course, through to XHTML 1 itself.&lt;br /&gt;&lt;h2&gt;HTML and metadata&lt;/h2&gt;The main reason that RDFa fits neatly into XHTML is that it builds on the already existing semantic features available in &lt;a href="http://www.w3.org/TR/html401"&gt;HTML 4.01&lt;/a&gt;. For example, it is already possible in HTML to indicate that a document was written by some author, indicate the document's licensing level, and so on, as shown here in the XHTML 1 equivalent:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;  &amp;lt;meta name="author" content="Mark Birbeck" /&amp;gt;&lt;br /&gt;  &amp;lt;link rel="license"&lt;br /&gt;   href="http://creativecommons.org/licenses/by/2.5/" /&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;RDFa builds on this syntax by firstly making it clear what this syntax means, and secondly by extending the syntax to allow namespace prefixed properties. For example, we might use Dublin Core and Creative Commons as a source of &lt;em&gt;well known&lt;/em&gt; properties for the mark-up we just saw:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;  &amp;lt;meta name="&lt;span style="color: red;"&gt;dc:creator&lt;/span&gt;" content="Mark Birbeck" /&amp;gt;&lt;br /&gt;  &amp;lt;link rel="&lt;span style="color: red;"&gt;cc:&lt;/span&gt;license"&lt;br /&gt;   href="http://creativecommons.org/licenses/by/2.5/" /&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The &lt;code&gt;link&lt;/code&gt; element uses the &lt;code&gt;rel&lt;/code&gt; and &lt;code&gt;rev&lt;/code&gt; attributes to indicate the nature of a connection between two documents--often things such as stylesheets, ATOM end-points, and so on:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;link&lt;br /&gt; rel="service.post"&lt;br /&gt; type="application/atom+xml"&lt;br /&gt; title="XForms and Internet Applications - Atom"&lt;br /&gt; href="http://www.blogger.com/feeds/8029070/posts/default"&lt;br /&gt;/&amp;gt;&lt;br /&gt;&amp;lt;link rel="stylesheet"&lt;br /&gt; type="text/css"&lt;br /&gt; href="http://www2.blogger.com/css/blog_controls.css"&lt;br /&gt;/&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;But what is often forgotten is that in HTML these attributes are also perfectly valid on the &lt;code&gt;a&lt;/code&gt; tag. For example, if we wanted to indicate that an anchor in a calendar item was actually providing a description of the event, we might do this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;a&lt;br /&gt; rel="cal:description"&lt;br /&gt; href="http://www.vecosys.com/2007/02/14/what-comes-next-web-30-preparing-for-semantic-web/"&lt;br /&gt;&amp;gt;&lt;br /&gt; What comes next Web 3.0 - preparing for semantic web?&lt;br /&gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You'll see from these examples that there is a large amount of similarity between &lt;code&gt;link&lt;/code&gt; and &lt;code&gt;a&lt;/code&gt;, and that although &lt;code&gt;link&lt;/code&gt; is used in the head of the document and &lt;code&gt;a&lt;/code&gt; in the body, both use &lt;code&gt;rel&lt;/code&gt;, &lt;code&gt;rev&lt;/code&gt; and &lt;code&gt;href&lt;/code&gt;to specify much the same thing--a relationship with another document. Interestingly, although the main difference between the two elements would appear to be that &lt;code&gt;a&lt;/code&gt; allows a user to &lt;em&gt;navigate&lt;/em&gt; from the first document to the second by clicking the label, even this is not so clear-cut; browsers such as Opera, for example, will display the labels from &lt;code&gt;link&lt;/code&gt;s that are defined in the head if they use a &lt;code&gt;@rel&lt;/code&gt; value that it recognises. An example of such mark-up might be:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;  &amp;lt;link rel="next" href="next.html" /&amp;gt;&lt;br /&gt;  &amp;lt;link rel="prev" href="prev.html" /&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h2&gt;The class attribute&lt;/h2&gt;In addition to the &lt;code&gt;meta&lt;/code&gt; and &lt;code&gt;link&lt;/code&gt; elements, and the &lt;code&gt;rel&lt;/code&gt;/&lt;code&gt;rev&lt;/code&gt;/&lt;code&gt;href&lt;/code&gt; combination of attributes, HTML also provides the &lt;code&gt;class&lt;/code&gt; attribute as a semantic hook.&lt;br /&gt;&lt;br /&gt;The original intention of &lt;code&gt;@class&lt;/code&gt; was as both a style selector, and a general-purpose 'tag' for the element. Although good programming style has always been to use values for &lt;code&gt;@class&lt;/code&gt; that reflect the &lt;em&gt;purpose&lt;/em&gt; of an element, this is coming much more to the fore in recent years, with a clearly discernible vogue for 'semantic mark-up'.&lt;br /&gt;&lt;br /&gt;RDFa also uses the &lt;code&gt;class&lt;/code&gt; attribute, but extends it by allowing namespace prefixed values, just as in &lt;code&gt;@rel&lt;/code&gt;, &lt;code&gt;@rev&lt;/code&gt; and &lt;code&gt;@property&lt;/code&gt;. Continuing our calendar entry, the &lt;code&gt;class&lt;/code&gt; attribute can be used to indicate the 'type' of the item that we're dealing with:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&amp;lt;div class="cal:Vevent"&amp;gt;&lt;/span&gt;&lt;br /&gt;  &amp;lt;a rel="cal:description"&lt;br /&gt;   href="http://www.vecosys.com/2007/02/14/what-comes-next-web-30-preparing-for-semantic-web/"&lt;br /&gt;&amp;gt;&lt;br /&gt;   What comes next Web 3.0 - preparing for semantic web?&lt;br /&gt;  &amp;lt;/a&amp;gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h2&gt;Properties for text&lt;/h2&gt;Whilst &lt;code&gt;a&lt;/code&gt; can be seen as the equivalent in &lt;code&gt;body&lt;/code&gt;, for the &lt;code&gt;link&lt;/code&gt; element in &lt;code&gt;head&lt;/code&gt;, there is no equivalent to &lt;code&gt;meta&lt;/code&gt; for use in the body.&lt;br /&gt;&lt;br /&gt;It may not be immediately obvious why we would want such a feature, i.e., why we would want to be able to indicate textual metadata in the body of our documents. And it's certainly true that we don't gain extra &lt;em&gt;functionality&lt;/em&gt;; in fact we could achieve everything we need using &lt;code&gt;meta&lt;/code&gt; in the head. But one of the key ideas behind RDFa is the notion that if the Semantic Web is ever to become a reality, it needs to be easy for people to create metadata, and perhaps the easiest way to do that is to augment an ordinary XHTML 1 page. So if we're going to get people to add metadata to their pages, we need to tackle one of the most annoying aspects of current mark-up, and that is the constant need to repeat content that is playing the role of both data &lt;em&gt;and&lt;/em&gt; metadata.&lt;br /&gt;&lt;h2&gt;Don't repeat yourself&lt;/h2&gt;For example, say we have a blog entry that has the following metadata:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;  &amp;lt;meta name="dc:creator" content="Mark Birbeck" /&amp;gt;&lt;br /&gt;  &amp;lt;meta name="dc:date" content="2007-02-15" /&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The chances are that the blog itself will begin with exactly the same information, but in a more human-friendly style:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;  &amp;lt;meta name="dc:creator" content="Mark Birbeck" /&amp;gt;&lt;br /&gt;  &amp;lt;meta name="dc:date" content="2007-02-15" /&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&amp;lt;body&amp;gt;&lt;br /&gt;  Posted by Mark Birbeck on February 15th, 2007.&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If we could 're-use' the string "Mark Birbeck", then we could avoid the unnecessary repetition in the author's metadata. The RDFa &lt;code&gt;property&lt;/code&gt; attribute provides just such a way to create the same data &lt;em&gt;in the body&lt;/em&gt; that a &lt;code&gt;meta&lt;/code&gt; tag would have created in &lt;code&gt;head&lt;/code&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;  &amp;lt;meta name="dc:date" content="2007-02-15" /&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;  Posted by &lt;span style="color: red;"&gt;&amp;lt;span property="dc:creator"&amp;gt;&lt;/span&gt;Mark Birbeck&lt;span style="color: red;"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt; on February 15th, 2007.&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;RDFa actually mirrors the way that the attributes from &lt;code&gt;link&lt;/code&gt; can be used in the body, by making the &lt;code&gt;content&lt;/code&gt; attribute (from &lt;code&gt;meta&lt;/code&gt;) available throughout the document. However, it was thought best not to take &lt;code&gt;@name&lt;/code&gt; along too, since when &lt;em&gt;that&lt;/em&gt; attribute is not on a &lt;code&gt;meta&lt;/code&gt; element, appearing on another element, it is difficult to know what it means. Instead we created a new attribute called &lt;code&gt;property&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;If we look at the steps we have gone through so far, prior to the addition of this attribute everything we have seen has been standard XHTML 1 (&lt;code&gt;a&lt;/code&gt;, &lt;code&gt;link&lt;/code&gt;, &lt;code&gt;@rel&lt;/code&gt;, &lt;code&gt;@rev&lt;/code&gt;, &lt;code&gt;@href&lt;/code&gt;, &lt;code&gt;@class&lt;/code&gt;, etc.). In other words, RDFa simply draws attention to the semantic features that we already had in HTML, as well as giving an interpretation to those things that are unclear. But to gain an equivalent for &lt;code&gt;meta&lt;/code&gt; in the body--that is, something that reflects how it is used in the head--new rules were needed. It's these extra rules that sometimes lead people to think that RDFa is a language that can only be used with XHTML 2, but in fact the presence of the extra attributes doesn't stop RDFa being used in today's XHTML 1, even when viewed in today's browsers.&lt;br /&gt;&lt;br /&gt;To illustrate the use of RDFa in XHTML 1--i.e., independent of XHTML 2--we'll use a previous &lt;a href="/2007/02/presenting-rdfa-at-what-comes-next-web.html"&gt;post describing a forthcoming meeting about the Semantic Web&lt;/a&gt;. In it I've embedded some RDFa that describes the meeting itself. We saw a cut-down version of this RDFa earlier, when looking at &lt;code&gt;@rel&lt;/code&gt; with &lt;code&gt;@href&lt;/code&gt; on an &lt;code&gt;a&lt;/code&gt; tag, and it looked like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;div class="cal:Vevent"&amp;gt;&lt;br /&gt;  &amp;lt;a rel="cal:description"&lt;br /&gt;   href="http://www.vecosys.com/2007/02/14/what-comes-next-web-30-preparing-for-semantic-web/"&lt;br /&gt;&amp;gt;&lt;br /&gt;   What comes next Web 3.0 - preparing for semantic web?&lt;br /&gt;  &amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;But the real version does exactly what we have been discussing, and re-uses the text inside the anchor to provide the &lt;code&gt;cal:summary&lt;/code&gt; value, by using the new attribute &lt;code&gt;property&lt;/code&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;div class="cal:Vevent"&amp;gt;&lt;br /&gt;  &amp;lt;a rel="cal:description" &lt;span style="color: red;"&gt;property="cal:summary"&lt;/span&gt;&lt;br /&gt;   href="http://www.vecosys.com/2007/02/14/what-comes-next-web-30-preparing-for-semantic-web/"&lt;br /&gt;&amp;gt;&lt;br /&gt;   What comes next Web 3.0 - preparing for semantic web?&lt;br /&gt;  &amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This post lives on Blogger.com and is delivered to all sorts of browsers, yet the use of the additional RDFa attribute causes no problem at all. But the advantages of being able to augment the mark-up in such a way means that an RDFa parser--whether &lt;a href="http://torrez.us/rdfa"&gt;running on a server&lt;/a&gt; or &lt;a href="http://www.w3.org/2001/sw/BestPractices/HTML/rdfa-bookmarklet/"&gt;inside the user's browser&lt;/a&gt;--can make use of this information in all sorts of ways.&lt;br /&gt;&lt;br /&gt;We've seen how adding the &lt;code&gt;property&lt;/code&gt; attribute allows us to 'not repeat ourselves' when used with XHTML 1, and still allows the document to function normally. Now we'll see another attribute that RDFa adds to solve the problem of adding metadata about many different resources at the same time.&lt;br /&gt;&lt;h2&gt;Multiple resources on a page&lt;/h2&gt;RDFa provides another attribute to HTML, called &lt;code&gt;about&lt;/code&gt;. The reason it's needed is that many documents on the web today contain multiple 'items' and a great deal of metadata about those items. This means that simply using &lt;code&gt;link&lt;/code&gt; and &lt;code&gt;meta&lt;/code&gt; in the head of the document is not enough for these kinds of documents, since placing metadata in &lt;code&gt;head&lt;/code&gt; only tells us about the document itself, and nothing about the various pieces of content within the page.&lt;br /&gt;&lt;br /&gt;A simple example would be a blog page, where each individual post needs to have its own metadata. Although the basic metadata features in HTML aren't sufficient, by using the RDFa &lt;code&gt;about&lt;/code&gt; attribute we can change the 'target' for some of the embedded metadata. For example, we might have two blog entries on the same page, like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;div&amp;gt;&lt;br /&gt;  &amp;lt;h2 property="dc:title"&amp;gt;What I did on my holidays&amp;lt;/h2&amp;gt;&lt;br /&gt;  Posted by &amp;lt;span property="dc:creator"&amp;gt;Mark Birbeck&amp;lt;/span&amp;gt;&lt;br /&gt;  &amp;lt;div&amp;gt;&lt;br /&gt;    First, we got on the plane...&lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div&amp;gt;&lt;br /&gt;  &amp;lt;h2 property="dc:title"&amp;gt;Looking forward to going on holiday&amp;lt;/h2&amp;gt;&lt;br /&gt;  Posted by &amp;lt;span property="dc:creator"&amp;gt;Mark Birbeck&amp;lt;/span&amp;gt;&lt;br /&gt;  &amp;lt;div&amp;gt;&lt;br /&gt;    It will be lots of fun...&lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As things stand, both sets of metadata--&lt;code&gt;dc:title&lt;/code&gt;, &lt;code&gt;dc:creator&lt;/code&gt;, and so on--will only tell us something about &lt;em&gt;the document as a whole&lt;/em&gt;. But by using &lt;code&gt;@about&lt;/code&gt; we can 'localise' the metadata to refer to only one part of the document:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;div&lt;span style="color: red;"&gt; about="#post-2"&lt;/span&gt;&amp;gt;&lt;br /&gt;  &amp;lt;h2 property="dc:title"&amp;gt;What I did on my holidays&amp;lt;/h2&amp;gt;&lt;br /&gt;  Posted by &amp;lt;span property="dc:creator"&amp;gt;Mark Birbeck&amp;lt;/span&amp;gt;&lt;br /&gt;  &amp;lt;div&amp;gt;&lt;br /&gt;    First, we got on the plane...&lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div&lt;span style="color: red;"&gt; about="#post-1"&lt;/span&gt;&amp;gt;&lt;br /&gt;  &amp;lt;h2 property="dc:title"&amp;gt;Looking forward to going on holiday&amp;lt;/h2&amp;gt;&lt;br /&gt;  Posted by &amp;lt;span property="dc:creator"&amp;gt;Mark Birbeck&amp;lt;/span&amp;gt;&lt;br /&gt;  &amp;lt;div&amp;gt;&lt;br /&gt;    It will be lots of fun...&lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;(Bob DuCharme has a &lt;a href="http://www.snee.com/bobdc.blog/2007/02/generating_rdfa_from_movable_t_1.html"&gt;discussion of his use of RDFa with Moveable Type&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;Another example would be a site that has lots of different media on one page; for example, Flickr has many images per page, and each image can have different licensing information, a different photographer, different tags, and so on.&lt;br /&gt;&lt;br /&gt;The main point is that the HTML metadata story has needed 'beefing up' for a while if it was to cope with the changing nature of the web, and being able to handle complex pages of the kind we've just illustrated; RDFa has provided the necessary additional metadata features to cope with this.&lt;br /&gt;&lt;br /&gt;To close our running example of a calendar entry, the finished mark-up would look like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;div &lt;span style="color: red;"&gt;about="#talk"&lt;/span&gt; class="cal:Vevent"&amp;gt;&lt;br /&gt;  &amp;lt;a rel="cal:description" property="cal:summary"&lt;br /&gt;   href="http://www.vecosys.com/2007/02/14/what-comes-next-web-30-preparing-for-semantic-web/"&lt;br /&gt;&amp;gt;&lt;br /&gt;   What comes next Web 3.0 - preparing for semantic web?&lt;br /&gt;  &amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;With the &lt;code&gt;about&lt;/code&gt; attribute, this pattern could be repeated many times within a page, once for each available event.&lt;br /&gt;&lt;h2&gt;Schemas for validation and document creation&lt;/h2&gt;Perhaps the most interesting development for RDFa in the context of its relationship to XHTML 1 is the forthcoming release of some XML schemas that conform to the guidelines in &lt;a href="http://www.w3.org/TR/xhtml-modularization"&gt;XHTML Modularization 1.1&lt;/a&gt;. These will be used to create a dialect of XHTML that includes both XHTML 1 and RDFa, and therefore means that a document that uses RDFa can be validated. The schemas will even allow XML editors to guide the editing process.&lt;br /&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;RDFa can be used now in XHTML 1, and provides an efficient, easy to learn, generic solution to the problem of embedding metadata in XHTML documents. By leveraging the already existing HTML features found in XHTML 1, RDFa provides a gentle on-ramp. But by adding to these basic features support for namespaces, and some additional attributes to cope with documents that contain many resources, RDFa provides everything that is needed for incredibly complex documents. If you're interested in making a start on RDFa, there are a number of entries in this blog that are tagged with '&lt;a href="/search/label/rdfa"&gt;rdfa&lt;/a&gt;'. You'll also find &lt;a href="http://rdfa.info"&gt;rdfa.info&lt;/a&gt; a useful resource.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-4907268776349707152?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/4907268776349707152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=4907268776349707152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/4907268776349707152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/4907268776349707152'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/02/using-rdfa-in-xhtml-1.html' title='Using RDFa in XHTML 1'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-5840937648107228144</id><published>2007-02-19T12:07:00.000Z</published><updated>2007-02-19T12:44:12.354Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='sidewinder'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>New drafts of XML Events 2.0 and XHTML Modularisation 1.1</title><content type='html'>I've been working with Shane McCarron from the HTML Working Group on a number of different documents lately, and it's great to see them made publicly available recently. The first is a new draft of XML Events 2.0, and the second is a new version of XHTML Modularization.&lt;br /&gt;&lt;h2&gt;XML Events 2.0&lt;/h2&gt;The &lt;a href="http://www.w3.org/TR/2007/WD-xml-events-20070216/"&gt;new draft of XML Events&lt;/a&gt; has features that are specifically geared towards future versions of XForms and compound document mark-up.&lt;br /&gt;&lt;br /&gt;Some of the interesting new features are:&lt;ul&gt;&lt;li&gt;the ability to register and remove handlers at run-time;&lt;/li&gt;&lt;li&gt;an attribute for executing events conditionally;&lt;/li&gt;&lt;li&gt;another for repeatedly executing actions whilst a condition is true;&lt;/li&gt;&lt;li&gt;the ability to create action handlers using script, which means that script can be interspersed with other action handlers.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h2&gt;XHTML Modularization&lt;/h2&gt;&lt;a href="http://www.w3.org/TR/2006/WD-xhtml-modularization-20060705"&gt;XHTML Modularization 1.1&lt;/a&gt; (or M12N as is it is often called), is a set of guideines, DTDs and XML Schema modules that provide the basics of XHTML, ready to be recombined in different ways by language designers. An example of its use is &lt;a href="http://www.w3.org/TR/2006/WD-xhtml-basic-20060705/"&gt;XHTML Basic&lt;/a&gt;, aimed at mobile devices; this language is a sub-set of the full XHTML, and so uses only some of the modules provided in the M12N 'library'.&lt;br /&gt;&lt;br /&gt;It's of particular interest to us at &lt;a href="http://www.x-port.net/"&gt;x-port&lt;/a&gt;, because we've been using compound document schemas for a few years now, and our work in this area has been fed into how these schemas are structured. We use a language created with M12N--we call it &lt;a href="http://www.formsPlayer.com/xh/"&gt;xH&lt;/a&gt;--that incorporates XForms, SVG, MathML and RDFa, both to drive the editing of our XForms documents, and to validate documents loaded into Sidewinder. The extension languages are defined as modules, following the principles of M12N, so they could be used in other languages, too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-5840937648107228144?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/5840937648107228144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=5840937648107228144' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/5840937648107228144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/5840937648107228144'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/02/new-drafts-of-xml-events-20-and-xhtml.html' title='New drafts of XML Events 2.0 and XHTML Modularisation 1.1'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-649501782593045574</id><published>2007-02-16T20:58:00.000Z</published><updated>2007-02-16T22:16:20.571Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Jon Udell on Microformats and RDF...time for RDFa</title><content type='html'>I made the following comment on &lt;a href="http://blog.jonudell.net/2007/02/14/truth-files-microformats-and-xmp/"&gt;Jon's latest post&lt;/a&gt;:&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;You say:&lt;br /&gt;&lt;blockquote&gt;Perhaps we’ve been looking in the wrong places for the first microformat to achieve liftoff. Many of us hoped hCalendar would, but it’s hard to argue that it has. I suppose that’s partly because even though we have a variety of online event   services that produce the hCalendar format, there just aren’t that many people publishing and annotating that many events.&lt;/blockquote&gt;&lt;br /&gt;I think this misses the point; the problem with hCalendar is not that there isn't enough data...there's plenty! The problem lies in the general lack of coherence of microformats. You can't take a collection of non-integrated things and call them a standard simply by giving them a common moniker. But that unfortunately is what microformats has done (and makes a virtue of it!).&lt;br /&gt;&lt;br /&gt;The result of doing this, is that this week you have to write an hCalendar parser, next week you have to write an hCard parser, the week after you haven't got time to write a parser because you are too busy trying to convert FOAF to hFOAF, and then the following week you have to define how all the microformats you have so far are to work together, just in time to start all over again with the next format (which incidentally involves you in learning about chemistry). In short, it's a technology that does not scale.&lt;br /&gt;&lt;br /&gt;RDFa on the other hand, has confronted the issue of creating a &lt;strong&gt;generic&lt;/strong&gt; syntax for putting metadata into HTML right from the start, because that was it's whole &lt;em&gt;raison d'etre&lt;/em&gt;. Once you have written one RDFa parser, you need write no more, unless of course you want another for a different platform. And you don't need to go around converting RDF vocabularies as microformats does, since RDF is used directly. (Note that I'm specifically saying that &lt;strong&gt;RDF&lt;/strong&gt; is used, and not &lt;strong&gt;RDF/XML&lt;/strong&gt;. RDFa uses the idea of representing metadata with triples--such as [this document] [written by] [Jon Udell] or [this document] [published on] [Thursday], etc.--but it doesn't use the tricky and complicated RDF/XML syntax to represent those triples.)&lt;br /&gt;&lt;br /&gt;The whole point is that by providing &lt;em&gt;general&lt;/em&gt; rules, any vocabulary--available now, or coming in the future--can be used directly in an HTML document.&lt;br /&gt;&lt;br /&gt;So whilst microformats don't scale, RDFa absolutely does. And crucially, by being able to use and mix already existing vocabularies without conversion, RDFa retains the de-centred model that the web has thrived on.&lt;br /&gt;&lt;h2&gt;Mash-ups&lt;/h2&gt;And this de-centred model is also what mash-ups are all about; the mash-up lift-off you've waited for hasn't happened because in order to do even a simple mash-up with calendar and people info that is based on microformats, we have to write two parsers, and then work out how the two sets of data co-exist on the page. In short, we're trying to work with inherently de-centred mash-ups, using the highly centralised microformats.&lt;br /&gt;&lt;br /&gt;RDFa returns us to the decentralised nature of HTML (anyone can link to anything) and the decentralised nature of RDF (anyone can make statements about anything) and leverages the two--"bridging the clickable and semantic webs".&lt;br /&gt;&lt;h2&gt;Blatant plug&lt;/h2&gt;Anyone who is in London next week might find the following meeting on the Semantic Web of interest:&lt;br /&gt;  &lt;a href="/2007/02/presenting-rdfa-at-what-comes-next-web.html"&gt;http://internet-apps.blogspot.com/2007/02/presenting-rdfa-at-what-comes-next-web.html&lt;/a&gt;&lt;br /&gt;There will be four speakers including me, and I'll be using my spot to explain RDFa, and do some demos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-649501782593045574?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/649501782593045574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=649501782593045574' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/649501782593045574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/649501782593045574'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/02/jon-udell-on-microformats-and-rdftime.html' title='Jon Udell on Microformats and RDF...time for RDFa'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-7974800193362738460</id><published>2007-02-16T10:37:00.000Z</published><updated>2007-02-22T12:27:25.769Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='formsplayer'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml2'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='sidewinder'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Presenting RDFa at "What comes next Web 3.0 - preparing for semantic web?"</title><content type='html'>&lt;div about="#talk" class="cal:Vevent" xmlns:cal="http://www.w3.org/2002/12/cal/ical#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:foaf="http://xmlns.com/foaf/0.1/"&gt;Sam Sethi has invited me to talk about RDFa, formsPlayer and Sidewinder at an interesting meeting in &lt;span property="cal:location" content="BT Centre, London, EC1A 7AJ"&gt;London&lt;/span&gt; next week. It's called &lt;a property="cal:summary" rel="cal:description" href="http://www.vecosys.com/2007/02/14/what-comes-next-web-30-preparing-for-semantic-web/"&gt;What comes next Web 3.0 - preparing for semantic web?&lt;/a&gt;. It's organised as part of a series going under the title of &lt;a href="http://www.etribes.com/mashup"&gt;mashup*&lt;/a&gt;, and as well as myself, the speakers are &lt;span about="#hugh" property="foaf:name" class="foaf:Person"&gt;Hugh MacCleod&lt;/span&gt;, &lt;span about="#paul" property="foaf:name" rel="foaf:depiction" href="http://pub.mybloglog.com/coiserv.php?href=http://segala.com/blog&amp;n=Paul%20Walsh" class="foaf:Person"&gt;Paul Walsh&lt;/span&gt; and &lt;span about="#tony" property="foaf:name" class="foaf:Person"&gt;Tony Fish&lt;/span&gt;. &lt;span property="cal:dtstart" content="20070222T180000Z"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-7974800193362738460?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/7974800193362738460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=7974800193362738460' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/7974800193362738460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/7974800193362738460'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/02/presenting-rdfa-at-what-comes-next-web.html' title='Presenting RDFa at &quot;What comes next Web 3.0 - preparing for semantic web?&quot;'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-7413762757901885227</id><published>2007-02-15T14:53:00.000Z</published><updated>2007-02-15T14:56:39.977Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='role'/><title type='text'>Excellent introduction to RDFa</title><content type='html'>I'm trying not to make this the shortest blog post in history, but the title says it all, so the only thing left is to provide the &lt;a href="http://www.xml.com/pub/a/2007/02/14/introducing-rdfa.html"&gt;link&lt;/a&gt;. I guess I could add that it's written by Bob DuCharme, but you would have found that out when you went to read it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-7413762757901885227?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/7413762757901885227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=7413762757901885227' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/7413762757901885227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/7413762757901885227'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/02/excellent-introduction-to-rdfa.html' title='Excellent introduction to RDFa'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-7639609529462919403</id><published>2007-02-13T00:28:00.000Z</published><updated>2007-02-09T23:28:58.643Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='formsplayer'/><title type='text'>Understanding the XForms dependency-engine</title><content type='html'>At the heart of an XForms processor is an incredibly powerful 'dependency-engine'. It works much like a spreadsheet, in that you tell it what calculations you want performed, and then the processor works out when to do them, based on changes that take place in the data in the form, as the user interacts with it. Although this all happens automatically--just as in a spreadsheet--knowing what's going on 'under the hood' will mean an XForms programmer can avoid writing inefficient code.&lt;br /&gt;&lt;br /&gt;To help programmers gain a better understanding of this little-discussed part of XForms, I've added &lt;a href="http://www.formsPlayer.com/xforms/dependency-engine"&gt;Understanding the XForms dependency-engine&lt;/a&gt; to our &lt;a href="http://www.formsPlayer.com/programming-with-formsplayer"&gt;&lt;em&gt;Programming with formsPlayer and XForms&lt;/em&gt;&lt;/a&gt; handbook.&lt;br /&gt;&lt;br /&gt;Comments would be most welcome. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-7639609529462919403?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/7639609529462919403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=7639609529462919403' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/7639609529462919403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/7639609529462919403'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/02/understanding-xforms-dependency-engine.html' title='Understanding the XForms dependency-engine'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-8210302432583645864</id><published>2007-02-09T17:12:00.000Z</published><updated>2007-02-09T23:27:34.591Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xml database'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='formsplayer'/><title type='text'>formsPlayer.com updated--the first place for XForms programmers</title><content type='html'>&lt;img src="http://www.artviper.net/screenshots/screener.php?url=www.formsplayer.com&amp;q=90&amp;h=180&amp;w=240&amp;sdx=1024&amp;sdy=768" style="float: left; margin-right: 5px;" /&gt; We've been working hard in the last few months on a number of different things. Some are imminent--such as full support for XForms 1.1 in formsPlayer--and some are almost imminent (and we can't talk about them yet). But one that is here now, is the fresh, new, restructured and redesigned &lt;a href="http://www.formsPlayer.com/"&gt;formsPlayer.com&lt;/a&gt; site.&lt;br /&gt;&lt;br /&gt;Thanks to an excellent Polish designer now working in Ireland, who was introduced to me by an Englishman who we worked with on a project for a Canadian customer, formsPlayer.com now has a new look. And I don't mind saying, I think it looks great...thanks &lt;a href="http://quech.com/"&gt;Bartek&lt;/a&gt;!&lt;br /&gt;&lt;h2&gt;Up-to-date&lt;/h2&gt;The main change in the site is that being based on Drupal, it is now much easier for us to update, which means that we can add tutorials, samples, articles and blogs whenever the mood takes us--and that's often. We've also moved our bug-tracking onto the site, and of course there are plenty of forums in which people can ask (and answer) questions, as well as share ideas.&lt;br /&gt;&lt;h2&gt;Integrated&lt;/h2&gt;One of the main advantages of the new site is that everything is completely integrated; a comment in the bug-tracking system can link to a tutorial, a blog entry can link to sample code, an answer in a forum can link to a feature request. Being able to cross-reference everything means that the information and knowledge in formsPlayer.com, about building web applications with XForms, will get deeper and deeper.&lt;br /&gt;With these changes we will continue to make formsPlayer.com the foremost place to go for XForms software, samples, tutorials, forums, and more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-8210302432583645864?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/8210302432583645864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=8210302432583645864' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8210302432583645864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8210302432583645864'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/02/formsplayercom-updated-first-place-for.html' title='formsPlayer.com updated--the first place for XForms programmers'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-8341279606002641298</id><published>2007-02-05T03:10:00.000Z</published><updated>2007-02-05T03:12:10.061Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='formsplayer'/><title type='text'>An XForms toolbar for searching the Prototype API documentation</title><content type='html'>&lt;a href="http://www.flickr.com/photos/mark-birbeck/380050989/" title="Photo Sharing" style="float: left;"&gt;&lt;img src="http://farm1.static.flickr.com/128/380050989_f83c6bccfc_t.jpg" width="100" height="72" alt="formsPlayer toolbar for searching Prototype API docs" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A recent announcement that &lt;a href="http://prototypejs.org/api/"&gt;documentation for the Prototype Ajax library&lt;/a&gt; was &lt;a href="http://prototypejs.org/2007/1/18/prototype-documentation-is-here"&gt;now available&lt;/a&gt; was followed almost immediately by a &lt;a href="http://www.bartelme.at/journal/archive/prototype_reference_widget/"&gt;rather neat looking desktop gadget&lt;/a&gt; and a Firefox sidebar. Not to be outdone, I decided to put together a toolbar for Internet Explorer, and managed to do the whole thing with one XForms form control and an action handler--and of course, no script.&lt;br /&gt;&lt;br /&gt;If you use Prototype and you just want to install the documentation toolbar, you can do so &lt;a href="http://svn.x-port.net/svn/public/applications/prototype-documentation/toolbar-installer.html"&gt;from here&lt;/a&gt;. You'll need formsPlayer, but this form will install it automatically, and once you have it you'll be able to add other bars to IE without any further downloads.&lt;br /&gt;&lt;br /&gt;I've written the whole thing up as a &lt;a href="http://www.formsPlayer.com/how-to/toolbar-prototype"&gt;tutorial&lt;/a&gt; which might prove interesting even if you don't want to create any toolbars, as it shows different ways to use &lt;code&gt;load&lt;/code&gt;, as well as &lt;code&gt;DOMActivate&lt;/code&gt; on an &lt;code&gt;input&lt;/code&gt; control. If you'd like to get the code and use it as a guide to creating your own toolbars, it is available &lt;a href="http://svn.x-port.net/svn/public/applications/prototype-documentation/"&gt;from here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-8341279606002641298?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/8341279606002641298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=8341279606002641298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8341279606002641298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8341279606002641298'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/02/xforms-toolbar-for-searching-prototype.html' title='An XForms toolbar for searching the Prototype API documentation'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/128/380050989_f83c6bccfc_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-2271468432573832391</id><published>2007-01-31T10:33:00.000Z</published><updated>2007-01-31T10:55:14.589Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Evaluating XForms in 23 hours</title><content type='html'>I left a comment on a blog about XForms recently, and since it never made it past 'moderation' I thought I might as well reproduce it here.&lt;br /&gt;&lt;br /&gt;The story begins on January 28th, 4:46pm when &lt;a href="http://www.evohub.com/blog/index.php/archives/10"&gt;Project Timelines&lt;/a&gt; was published. The post ends with:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;strong&gt;Other projects to check out&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;jQuery, XForms&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The following day, at 3:05pm, we get another post, this one called &lt;a href="http://www.evohub.com/blog/index.php/archives/11"&gt;XForms = CRAP&lt;/a&gt;. It's short, so I'll reproduce the entire thing:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;XForms is touted as the latest W3C standard for XML form filling, with syntax that allows for case/switch/conditionals.&lt;br /&gt;&lt;br /&gt;However, support is sketchy at best, and worse is instead of using code to write stuff such as&lt;br /&gt;&lt;br /&gt;if txtUserName.Text = “” then&lt;br /&gt;&lt;br /&gt;end if&lt;br /&gt;&lt;br /&gt;we have to use &lt; xml &gt;&lt;br /&gt;nonsense&lt;br /&gt;&lt;br /&gt;Plus the IDEs out there to simply this is simply not available. With Microsoft not supporting this one, choosing to go with InfoPath for its own XML based forms, this will turn out to be a dud.&lt;br /&gt;&lt;br /&gt;File this off for at least another 2 years before we revisit this one =) &lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I don't have a problem with people saying what they like about anything they like--in fact that is to be encouraged! But equally, I feel strongly that if you do publish your ideas, you should expect comment on them. In this particular case we have a post that creates a negative atmosphere around XForms but based on nothing that you can put your finger on. I confess to getting a little riled at the obvious lack of research, and the tone adopted by the self-proclaimed expert, and here is the text of the comment that I &lt;em&gt;tried&lt;/em&gt; to leave:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Wow! That was quick. Only yesterday you had XForms in your list of things to check out (along with JQuery), and today you've completed the task. In *under* 24 hours you’ve finished evaluating XForms, and concluded that support is "sketchy".&lt;br /&gt;&lt;br /&gt;Yet our product formsPlayer supports the entire standard and is being used by numerous companies, ranging from HP in Italy through to Tyco, to a large oil company. They use it embedded in IE, but formsPlayer and XForms are also being used by a building society in this country, embedded in a .NET application, running on Tablet PCs.&lt;br /&gt;&lt;br /&gt;In addition to that, you'll find that the Firefox plug-in is almost complete, and that the Orbeon XForms engine, which processes XForms server-side, as well as providing sophisticated pipeline processing functionality.&lt;br /&gt;&lt;br /&gt;In other words, support is far from "sketchy", and even in as little as 24 hours you should have been able to see that.&lt;br /&gt;&lt;br /&gt;In that same 24 hours you've also got to the crux of the declarative v. procedural programming debate that has run for years; you've cut through the discussion, and clarified the most important point--that instead of having an 'if' test on a string, we have to use XML "nonsense".&lt;br /&gt;&lt;br /&gt;Incredible.&lt;br /&gt;&lt;br /&gt;All the best,&lt;br /&gt;&lt;br /&gt;Mark&lt;br /&gt;&lt;br /&gt;PS Don't take this too seriously, I'm just pulling your leg...but you have to admit, these are pretty bold claims you are making, especially when you file them under "Architecture of Systems".&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;There...I'm feeling better already.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-2271468432573832391?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/2271468432573832391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=2271468432573832391' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/2271468432573832391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/2271468432573832391'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/01/evaluating-xforms-in-23-hours.html' title='Evaluating XForms in 23 hours'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-5873495723070129385</id><published>2007-01-19T23:59:00.000Z</published><updated>2007-01-30T02:26:33.737Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='sidewinder'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='xaml'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='formsplayer'/><category scheme='http://www.blogger.com/atom/ns#' term='apollo'/><title type='text'>Interviewed on XForms for cubicgarden</title><content type='html'>Yesterday, myself and Phil were invited by Brendan Quinn to talk about XForms over at the BBC. Since we had no idea what experience people might have of XForms, we began with the &lt;a href="http://svn.x-port.net/svn/public/presentations/xforms-applications.html"&gt;XForms and Internet Applications presentation&lt;/a&gt;, and then did some demos and a bit of 'view source'.&lt;br /&gt;&lt;br /&gt;The presentation included a demo that searches Amazon for books, which we followed with other samples from the &lt;a href="http://www.formsPlayer.com/project/Samples/name"&gt;formsPlayer.com samples page&lt;/a&gt;, such as a Flickr search, Google Maps, Microsoft Virtual Earth, and more.&lt;br /&gt;&lt;br /&gt;As it turned out, there was some familiarity with XForms, and there were some excellent questions. Although we tried to answer all of them, we also recommended our tutorial, &lt;a href="http://www.formsPlayer.com/introduction-to-xforms"&gt;Introduction to XForms&lt;/a&gt;. It covers a lot of material, and walks through how to create two forms; one that that saves bookmarks to del.icio.us, and another that searches Flickr.&lt;br /&gt;&lt;br /&gt;After the meeting, Ian Forrester interviewed me about XForms and where it was going, and we ended up talking about web applications, Apollo, Sidewinder, the W3C and innovation, XAML, non-obtrusive Ajax, xforms.org...and whether Kurt Cagle backing XForms is an indicator of future success, or not!&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;embed wmode="transparent" src="http://blip.tv/scripts/flash/blipplayer.swf?autoStart=false&amp;file=http://blip.tv/file/get/Cubicgarden-MarkBirbeckOnXforms945.flv%3Fsource%3D3" quality="high" width="320" height="180" name="movie" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-5873495723070129385?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/5873495723070129385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=5873495723070129385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/5873495723070129385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/5873495723070129385'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2007/01/interviewed-on-xforms-for-cubicgarden.html' title='Interviewed on XForms for cubicgarden'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-1817237820006795175</id><published>2006-12-19T10:28:00.000Z</published><updated>2006-12-19T10:32:44.922Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='marie curie'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='chemistry'/><category scheme='http://www.blogger.com/atom/ns#' term='physics'/><title type='text'>RDFa, chemistry and the sharing of knowledge</title><content type='html'>(This post &lt;a href="http://rdfa.info/2006/12/19/rdfa-chemistryand-the-manhattan-project/"&gt;appeared first&lt;/a&gt; on the &lt;a href="http://rdfa.info"&gt;http://rdfa.info&lt;/a&gt; site.)&lt;br /&gt;&lt;br /&gt;When most of us think of blogs we think of people writing about fairly personal things, perhaps to do with their families or hobbies. At a push we might acknowledge that many bloggers will be writing about technical issues such as some trick they developed to get CSS to work in all browsers, or how to build a web-site with Ruby on Rails, Ajax or XForms.&lt;br /&gt;&lt;br /&gt;But have you ever thought whether &lt;a href="http://en.wikipedia.org/wiki/Marie_Curie"&gt;Marie Curie&lt;/a&gt; would have a blog, if she were carrying out her research today? It would be unlikely to contain information about what she was cooking for Christmas lunch, and far more likely to be like a live notebook of her results and working outs as she became the only person ever to win Nobel prizes in two different disciplines (chemistry and physics).&lt;br /&gt;&lt;br /&gt;When it comes to the development of new knowledge the chance of significant breakthroughs is increased if knowledge is easy to share, particularly across disciplines. The internet provides an enormous opportunity to share knowledge across the world, and RDFa has a role to play here.&lt;br /&gt;&lt;br /&gt;This thought struck me when reading &lt;a href="http://chem-bla-ics.blogspot.com"&gt;Egon Willighagen's blog&lt;/a&gt; which includes items about his use of RDFa to include metadata about his chemistry research. Here we have an exciting convergence of technologies; he uses Blogger.com to allow him to easily publish and manage his writings, and he is experimenting with using RDFa to provide metadata about the chemical compounds he refers to in his work. With this additional metadata two things are possible. First, the user experience is improved when accessing the blog (he &lt;a href="http://chem-bla-ics.blogspot.com/2006/12/chemistry-in-html-greasemonkey-again.html"&gt;talks of showing pictures of the molecular structure of a chemical when a user hovers over the name&lt;/a&gt;, for example), and second, the search experience is also improved; now a search could potentially yield documents 'about' the chemicals referred to, rather than other, non-specialist documents.&lt;br /&gt;&lt;br /&gt;This is an exciting use of RDFa, and shows the benefit of recognising that there is a demand for the co-existence of different (sometimes specialist) vocabularies within the same document. Over the coming months I think we'll see more of these kinds of use cases.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-1817237820006795175?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/1817237820006795175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=1817237820006795175' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/1817237820006795175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/1817237820006795175'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/12/rdfa-chemistry-and-sharing-of-knowledge.html' title='RDFa, chemistry and the sharing of knowledge'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-4807147313304877494</id><published>2006-12-14T21:17:00.000Z</published><updated>2006-12-15T17:28:48.801Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='windows live'/><category scheme='http://www.blogger.com/atom/ns#' term='gcal'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='gdocs'/><category scheme='http://www.blogger.com/atom/ns#' term='xpointer'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='sidewinder'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='bill gates'/><title type='text'>Bill Gates, webapps, and XPointer</title><content type='html'>Liz Gannes got to meet Bill Gates at Microsoft's headquarters, as part of a day spent with "leaders in various aspects of the web community". Ah, yes...the web community. Anyway, Liz's report (&lt;a href="http://gigaom.com/2006/12/13/bill-gates-on-the-future-of-web-apps/"&gt;Bill Gates on the Future of Web Apps&lt;/a&gt;) makes interesting reading because she asks an intriguing question of Gates, and gets a resonable reply:&lt;br /&gt;&lt;blockquote&gt;We each got to ask Gates one question. I asked which applications he forecast to live within the browser and which outside of it.  He replied that the distinction would come to be silly from a technical standpoint, but that the necessary movement toward web APIs does present challenges on the business side.&lt;/blockquote&gt;&lt;br /&gt;This whole thing has sparked a lot of discussion, but much of it seems to me quite old-fashioned. "What should go in the browser and what in a desktop application" is (or should be) a strange question to ask, and as Gates says, it's just "silly" from a technical standpoint. But I would add a further dimension, which is that I think it's also silly from a &lt;em&gt;user's&lt;/em&gt; perspective, since they should be able to decide based on the task at hand.&lt;h2&gt;Browsers v. desktop applications&lt;/h2&gt;Whilst the browser is certainly a useful application for following your nose and saving references to some of the places you've been, a desktop application has the advantage that it can be controlled independently of other applications, has no clutter like address bars and big buttons that are not relevant to some specific task in hand, can be left open all day--perhaps docked to an edge of your desktop, auto-hiding when you move the mouse away--and could even be partly transparent, so that it takes on some odd shape.&lt;br /&gt;&lt;br /&gt;So given that standalone desktop applications are preferable for just about every task &lt;strong&gt;other&lt;/strong&gt; than surfing the web, why shouldn't we be able to take &lt;strong&gt;any&lt;/strong&gt; HTML pages that we find useful, and run them as if they were purpose-built desktop applications? There are plenty of pages out there that don't look great, but do useful things like show us the times of the next trains at your local station; we should be able to take the URL, wrap it in an application container, and let it sit on the desktop.&lt;br /&gt;&lt;br /&gt;And further, by running that container from the command-line, we could open any number of these 'desktop web applications' with shortcuts or batch files. In fact, why not pass parameters on the command-line so that we can even control the position and size of the window, its docking and auto-hide behaviour, its transparancy and opacity, and so on.&lt;br /&gt;&lt;br /&gt;And as you might expect, this is exactly what we've done with Sidewinder.&lt;h2&gt;Sidewinder as a web applications viewer&lt;/h2&gt;For a while now we've been able to give Sidewinder a URL on the command-line and make it load and render the document referred to. It doesn't matter whether the document exists on the web or locally, Sidewinder will initialise itself with the file. (Sidewinder not only supports the loading and executing of XHTML documents, but it will also run 'pure' JavaScript files.)&lt;br /&gt;&lt;br /&gt;But to set the location and size of the window, or its docking and transparency properties, we normally had to add metadata to the head of the document, or &lt;a href="http://skimstone.x-port.net/node/317"&gt;create a JavaScript webapp&lt;/a&gt;. No more. A couple of days ago &lt;a href="http://skimstone.x-port.net/node/552"&gt;we added the ability to set the metadata properties when loading the document&lt;/a&gt;.&lt;h2&gt;Command-line parameters v. XPointer&lt;/h2&gt;The obvious way to do this would have been as part of the command-line, in the usual way:&lt;pre&gt;&lt;br /&gt;swviewer2 -h600 -w1000 -position=top http://somepage&lt;br /&gt;&lt;/pre&gt;But we decided against this because we also wanted to be able to load our applications from links in web pages. Instead we decided to use an XPointer approach (see &lt;a href="http://www.w3.org/TR/xptr-framework/"&gt;XPointer Framework&lt;/a&gt;). For example, to open the Adobe Flex Flexstore application in a window that is 1010 by 610, is docked to the top edge, and auto-hides when you move the mouse away, we just type this into the command line:&lt;pre&gt;&lt;br /&gt;swviewer2 http://examples.adobe.com/flex2/inproduct/sdk/flexstore/flexstore.html#meta(width=1010,height=610,position=top,anchor,autohide)&lt;br /&gt;&lt;/pre&gt;I guess that's a lot to type, but it's easily placed in a desktop shortcut, or even better, placed in a batch file along with a reference to Gmail, GCal, Windows Live, GDocs and whatever else you find yourself loading into a browser every day to help you function.&lt;h2&gt;Conclusion&lt;/h2&gt;Bill Gates is exactly right that the boundaries between web applications and desktop applications will continue to blur, and that if it isn't already pointless to make the distinction it soon will be. The whole &lt;em&gt;raison d'etre&lt;/em&gt; of Sidewinder is to blur that distinction as much as possible, and we're going to keep experimenting with new ways to do this.&lt;br /&gt;&lt;br /&gt;You can read more on our skimstone site: we have a 'how to' that shows &lt;a href="http://skimstone.x-port.net/node/529"&gt;the Adobe Flex Flexstore demo running as a desktop application&lt;/a&gt;, with some screenshots if you don't want to install anything:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/mark-birbeck/317166076/" title="Photo Sharing"&gt;&lt;img src="http://static.flickr.com/106/317166076_33ebccad22.jpg" width="500" height="314" alt="Sidewinder running Flexstore (Home)" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But if you do &lt;a href="http://skimstone.x-port.net/project/swviewer"&gt;install Sidewinder&lt;/a&gt; you can try exactly the same approach yourself, and load any of your favourite web-sites as desktop applications...all without programming.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-4807147313304877494?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/4807147313304877494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=4807147313304877494' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/4807147313304877494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/4807147313304877494'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/12/bill-gates-webapps-and-xpointer.html' title='Bill Gates, webapps, and XPointer'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-8118494489067277637</id><published>2006-11-22T10:34:00.000Z</published><updated>2006-11-22T10:56:46.203Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xquery'/><category scheme='http://www.blogger.com/atom/ns#' term='xml database'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='exist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='soa'/><title type='text'>When should I use XForms?</title><content type='html'>The question about how XForms should be sold to customers often comes up, and generally we reply "why would you?". As in any IT project you need to use the right tool for the job, so why would you try to sell XForms in and of itself? Sometimes XForms is the right thing, and sometimes not, but either way--we say to those who ask--it's a tool in &lt;em&gt;your&lt;/em&gt; armoury (if you want to use it), not your customers'.&lt;br /&gt;&lt;br /&gt;If you have a system that uses web services a lot (for example), then a rich client that can handle XForms will be ideal--that's where most of our use cases are coming from for formsPlayer deployment. I've &lt;a href="http://internet-apps.blogspot.com/2006/07/declarative-ajaxnow-were-talking.html"&gt;mentioned before&lt;/a&gt; a system that we've built for a customer that involves using the OpenWFE workflow engine and the eXist XML database, and we've written practically no code on the server! All we've done is used a few workflow templates, and the REST/XQuery interface to eXist, and everything else is achieved via the XForms themselves. Maintaining such a system is not only very straightforward, but is easy to move to other platforms, as well as swap components in and out (since &lt;a href="http://internet-apps.blogspot.com/2006/09/xforms-rest-xqueryand-skimming.html"&gt;the interfaces--such as XQuery--are all standard&lt;/a&gt;). This is all at the heart of the &lt;a href="http://skimstone.x-port.net/about"&gt;skimming&lt;/a&gt; approach we've been talking about.&lt;br /&gt;&lt;br /&gt;But unfortunately, at the other end of the spectrum, if you have a system that uses a server-side scripting language, with direct queries on a database to populate  list-boxes (that whole nineties thing!) then you might not find XForms that useful. You'll have a maintenance nightmare with such an application, either way. For XForms to be of benefit in this scenario it would have to dramatically improve the user experience, rather than only being 'as good' as what you have already.&lt;br /&gt;&lt;br /&gt;I'm not differentiating here between using client and server technologies, but rather between the use of high-level constructs versus painstakingly creating pages with server-side script. So in the approach I'm suggesting, you will also get productivity improvements if you can use a pipeline-based system like &lt;a href="http://www.orbeon.com/"&gt;Orbeon&lt;/a&gt;, since it too uses 'big constructs', even though it delivers HTML to the user.&lt;br /&gt;&lt;br /&gt;At least in the short term, the main benefits of XForms will generally accrue to the developers and not to the users, and will be of most use to those who have a service oriented architecture, rather than an old-fashioned web-site. So trying to 'sell XForms' is probably not only a waste of time, but actually unnecessary--if it fits your system, use it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-8118494489067277637?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/8118494489067277637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=8118494489067277637' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8118494489067277637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8118494489067277637'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/11/when-should-i-use-xforms.html' title='When should I use XForms?'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-3947583215972670682</id><published>2006-11-20T19:28:00.001Z</published><updated>2006-11-20T19:45:15.611Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><title type='text'>XForms and repeating structures...are they really so special?</title><content type='html'>In one of discussions in the XForms Working Group recently, around &lt;code&gt;insert&lt;/code&gt; and &lt;code&gt;delete&lt;/code&gt;, we agreed with Erik Bruchez's idea that if &lt;code&gt;@nodeset&lt;/code&gt; returns a collection of nodes then we should process all of them, rather than acting on only the first (the so-called "first node rule"). I like this, and to me it makes code easier to read; I can tell what an author has in mind if I see this:&lt;pre&gt;&amp;lt;delete nodeset="customers/customer[1]" ... /&amp;gt;&lt;/pre&gt; rather than this:&lt;pre&gt;&amp;lt;delete nodeset="customers/customer" ... /&amp;gt;&lt;/pre&gt; After we agreed to do this it made me wonder about other situations where processing the entire nodeset might give rise to different behaviour if there was more than one node, and one that leapt out was differentiating between repeating structures and non-repeating structures simply by the number of nodes in the nodeset. For example, if there is only one customer in the instance data, then this (if it were legal):&lt;pre&gt;&amp;lt;group nodeset="customers/customer"&amp;gt;&lt;br /&gt;  &amp;lt;output ref="name" /&amp;gt;&lt;br /&gt;  &amp;lt;output ref="telephone" /&amp;gt;&lt;br /&gt;&amp;lt;/group&amp;gt;&lt;/pre&gt; would behave the same as this:&lt;pre&gt;&amp;lt;group ref="customers/customer"&amp;gt;&lt;br /&gt;  &amp;lt;output ref="name" /&amp;gt;&lt;br /&gt;  &amp;lt;output ref="telephone" /&amp;gt;&lt;br /&gt;&amp;lt;/group&amp;gt;&lt;/pre&gt; If there was more than one customer, then it would be equivalent to a repeat:&lt;pre&gt;&amp;lt;repeat nodeset="customers/customer"&amp;gt;&lt;br /&gt;  &amp;lt;output ref="name" /&amp;gt;&lt;br /&gt;  &amp;lt;output ref="telephone" /&amp;gt;&lt;br /&gt;&amp;lt;/repeat&amp;gt;&lt;/pre&gt; But since the second case (multiple customers) includes the first case (only one customer) why bother ever using anything other than a repeating structure? If you don't want a repeat, simply add "[1]" as we saw before.&lt;br /&gt;&lt;br /&gt;Of course the problem would be that using a 'repeat' element when you don't actually want a repeating structure would be awkward to read:&lt;pre&gt;&amp;lt;repeat nodeset="customers/customer[1]"&amp;gt;&lt;br /&gt;  &amp;lt;output ref="name" /&amp;gt;&lt;br /&gt;  &amp;lt;output ref="telephone" /&amp;gt;&lt;br /&gt;&amp;lt;/repeat&amp;gt;&lt;/pre&gt; or:&lt;pre&gt;&amp;lt;repeat nodeset="customers[1]"&amp;gt;&lt;br /&gt;  &amp;lt;repeat nodeset="customer"&amp;gt;&lt;br /&gt;    &amp;lt;output ref="name" /&amp;gt;&lt;br /&gt;    &amp;lt;output ref="telephone" /&amp;gt;&lt;br /&gt;  &amp;lt;/repeat&amp;gt;&lt;br /&gt;&amp;lt;/repeat&amp;gt;&lt;/pre&gt; But it's not so the other way round; i.e., saying that elements that use nodesets operate over all of the nodes in the nodeset is actually fairly intuitive, which leads me to wondering whether we should allow this:&lt;pre&gt;&amp;lt;group nodeset="customers/customer"&amp;gt;&lt;br /&gt;  &amp;lt;output ref="name" /&amp;gt;&lt;br /&gt;  &amp;lt;output ref="telephone" /&amp;gt;&lt;br /&gt;&amp;lt;/group&amp;gt;&lt;/pre&gt; in &lt;strong&gt;addition&lt;/strong&gt; to this:&lt;pre&gt;&amp;lt;group ref="customers/customer"&amp;gt;&lt;br /&gt;  &amp;lt;output ref="name" /&amp;gt;&lt;br /&gt;  &amp;lt;output ref="telephone" /&amp;gt;&lt;br /&gt;&amp;lt;/group&amp;gt;&lt;/pre&gt; and this:&lt;pre&gt;&amp;lt;group ref="customers"&amp;gt;&lt;br /&gt;  &amp;lt;group nodeset="customer"&amp;gt;&lt;br /&gt;    &amp;lt;output ref="name" /&amp;gt;&lt;br /&gt;    &amp;lt;output ref="telephone" /&amp;gt;&lt;br /&gt;  &amp;lt;/group&amp;gt;&lt;br /&gt;&amp;lt;/group&amp;gt;&lt;/pre&gt; We would obviously keep the &lt;code&gt;@ref&lt;/code&gt; format for backwards compatibility, and as a shorthand for selecting the first node. And even more interestingly, it could retain its use for setting context, for example when used in conjunction with &lt;code&gt;@nodeset&lt;/code&gt;. For example:&lt;pre&gt;&amp;lt;group ref="customers" nodeset="customer"&amp;gt;&lt;br /&gt;  &amp;lt;output ref="name" /&amp;gt;&lt;br /&gt;  &amp;lt;output ref="telephone" /&amp;gt;&lt;br /&gt;&amp;lt;/group&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-3947583215972670682?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/3947583215972670682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=3947583215972670682' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3947583215972670682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3947583215972670682'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/11/xforms-and-repeating-structuresare-they.html' title='XForms and repeating structures...are they really so special?'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-7301834167375631867</id><published>2006-11-15T23:14:00.000Z</published><updated>2006-11-15T23:24:55.152Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Using the XForms model without the user interface</title><content type='html'>The XForms model provides a rich set of features to manage data submission, calculation dependencies, validation, control notification, and so on. Obviously it's normally used with the XForms user interface--controls such as &lt;code&gt;input&lt;/code&gt; and &lt;code&gt;range&lt;/code&gt;, as well as structures like &lt;code&gt;switch&lt;/code&gt; and &lt;code&gt;case&lt;/code&gt; or &lt;code&gt;repeat&lt;/code&gt;--but we've recently posted a couple of examples on skimstone where a non-XForms user interface is driven by an XForms model.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://skimstone.x-port.net/node/412"&gt;first concerns a 3D visualisation&lt;/a&gt;, linked to a simple XML file that contains a list of parts. XForms is used to select parts of the visualisation depending on which item in the part-list is chosen.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://skimstone.x-port.net/node/452"&gt;second example involves a standard Google Map&lt;/a&gt;, with each of the pins that are overlaid onto the map coming from XForms instance data. In the examples the data is an RSS feed that contains geo data, which means the code can be used to overlay any feed onto the map.&lt;br /&gt;&lt;br /&gt;Although our preference is invariably to wrap these types of features into reusable components that are instantiated with XBL, it's still sometimes worth showing examples like this since they provide an interesting link between XForms and Ajax.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-7301834167375631867?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/7301834167375631867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=7301834167375631867' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/7301834167375631867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/7301834167375631867'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/11/using-xforms-model-without-user.html' title='Using the XForms model without the user interface'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-1761007254049478546</id><published>2006-11-03T10:51:00.000Z</published><updated>2006-11-03T11:22:39.369Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='device indepence'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='dial'/><category scheme='http://www.blogger.com/atom/ns#' term='xhtml2'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Could DIAL just be XForms?</title><content type='html'>If you take a look at the &lt;a href="http://www.w3.org/TR/dial-primer/"&gt;Device Independent Authoring Language (DIAL) Primer&lt;/a&gt; you'll see that the basic idea of DIAL is to use XHTML 2, XForms and a few other bits and bobs as a kind of 'abstract' language for defining documents that may then be used on many devices. Server-side processes can decide which pieces of a document to send to a client based on its capabilities, user credentials, and so on.&lt;br /&gt;&lt;br /&gt;Now, although I'm glossing over the details, it seems to me that the key components of DIAL are a data model and some declarative mark-up that makes use of the data to switch other mark-up in and out. Here is an example from the primer:&lt;pre&gt;&amp;lt;sel:select&amp;gt;&lt;br /&gt;  &amp;lt;!-- check if the requesting user is a subscriber--&amp;gt;&lt;br /&gt;  &amp;lt;sel:when expr="dcn:search('userSubscriptionStatus') = premium"&amp;gt;&lt;br /&gt;    &amp;lt;!-- if so select this movie --&amp;gt;&lt;br /&gt;    &amp;lt;object sel:selid="HelloWorldMovie" src="HW_movie_portrait.mov"/&amp;gt;&lt;br /&gt;  &amp;lt;/sel:when&amp;gt;&lt;br /&gt;  &amp;lt;sel:otherwise&amp;gt;&lt;br /&gt;    &amp;lt;!-- if not send an image instead --&amp;gt;&lt;br /&gt;    &amp;lt;object sel:selid="HelloWorldMovie" src="HW_image.jpg"/&amp;gt;&lt;br /&gt;  &amp;lt;/sel:otherwise&amp;gt;&lt;br /&gt;&amp;lt;/sel:select&amp;gt;&lt;/pre&gt;In this example only one of the two 'object' tags will be delivered to the device that has requested the document, and which of these it is will depend on the whether the user is a 'premium subscriber' or not.&lt;br /&gt;&lt;br /&gt;But if we want a language with a data model, that supports XPath, and that can conditionally drive a user interface...we need look no further than XForms! The above mark-up could be expressed as the following XForms:&lt;pre&gt;&amp;lt;!-- if the requesting user is a subscriber--&amp;gt;&lt;br /&gt;&amp;lt;xf:group ref="userSubscriptionStatus[. = 'premium']"&amp;gt;&lt;br /&gt;  &amp;lt;!-- show the movie --&amp;gt;&lt;br /&gt;  &amp;lt;object id="HelloWorldMovie" src="HW_movie_portrait.mov"/&amp;gt;&lt;br /&gt;&amp;lt;/xf:group&amp;gt;&lt;br /&gt;&amp;lt;xf:group ref="userSubscriptionStatus[. != 'premium']"&amp;gt;&lt;br /&gt;  &amp;lt;!-- show the image --&amp;gt;&lt;br /&gt;  &amp;lt;object id="HelloWorldImage" src="HW_image.jpg"/&amp;gt;&lt;br /&gt;&amp;lt;/xf:group&amp;gt;&lt;/pre&gt;I've glossed over quite a few things here, but the main point is that XForms is almost (but not quite) suitable, and so it would be interesting to work out what it would take to give XForms the extra capabilities it needs to act like DIAL.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;XForms as a processing language&lt;/h2&gt;If you look at the diagram in the section &lt;a href="http://www.w3.org/TR/dial-primer/#intro-how"&gt;How does DIAL work&lt;/a&gt; you see that all that is happening is that one DIAL processor is carrying out some processing and passing the results to another DIAL processor:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.w3.org/TR/dial-primer/howDIALworks.png" alt="Workflow for DIAL, whowing a number of DIAL processors chained together" width="600px" /&gt;&lt;br /&gt;&lt;br /&gt;Each of these processors needs to be able to support a data model, each of these processors needs to be able to generate a UI based on a set of rules and the data. In other words, each of these DIAL processors needs only to be an XForms processor.&lt;br /&gt;&lt;br /&gt;This is actually an idea I've been bouncing around for quite a while (I presented a paper called &lt;a href="http://www.w3.org/2004/04/webapps-cdf-ws/papers/webapps-workshop-standards-based-vm.pdf"&gt;A Standards-based Virtual Machine&lt;/a&gt; on similar themes at the &lt;a href="http://www.w3.org/2004/04/webapps-cdf-ws/"&gt;W3C's Web Applications Workshop&lt;/a&gt; a couple of years ago), but I'm becoming increasingly reminded of it because a number of recent initiatives that are based around server-side processing would seem to me to be prime candidates for some 'unification'. There are many features that appear at first sight to be client-side but could be usefully used on a server, and vice versa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-1761007254049478546?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/1761007254049478546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=1761007254049478546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/1761007254049478546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/1761007254049478546'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/11/could-dial-just-be-xforms.html' title='Could DIAL just be XForms?'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-4411881935937149268</id><published>2006-10-20T11:45:00.000Z</published><updated>2006-10-20T12:43:22.787Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='role'/><title type='text'>Declarative, Accessible Ajax with the HTML role attribute</title><content type='html'>In XForms there is a 'hint' element, which is roughly defined as "when the user interacts in some way with the parent element of the 'hint' element, the text of the 'hint' should be made available to the user".&lt;br /&gt;&lt;br /&gt;That might sound like a lawyer speaking, but it's purposefully vague so that the same functionality can be made available in many different types of device; the 'hint' can obviously be activated by a mouseover on a desktop PC, but it could also be activated by a long pause on a touch-tone phone system, or by navigating to the control on a voice or mobile system.&lt;br /&gt;&lt;br /&gt;In XForms we use the 'hint' element like this:&lt;pre&gt;&amp;lt;xf:input ref="name"&amp;gt;&lt;br /&gt;  &amp;lt;xf:label&amp;gt;Name:&amp;lt;/xf:label&amp;gt;&lt;br /&gt;  &amp;lt;xf:hint&amp;gt;&lt;br /&gt;    Please enter your name.&lt;br /&gt;  &amp;lt;/xf:hint&amp;gt;&lt;br /&gt;&amp;lt;/xf:input&amp;gt;&lt;/pre&gt;But if we have this definition for 'hint', why can't we reuse it elsewhere? If some other language needs to support hints, why can't they use the same element, and the same definition? In fact, why can't an Ajax library use the same definition?&lt;br /&gt;&lt;h2&gt;Ajax libraries&lt;/h2&gt;If you take a look at the way Dojo allows authors to add tooltips, you'll see code like the following:&lt;pre&gt;&amp;lt;img id="pic" src="holiday.gif"&amp;gt;&amp;lt;/img&amp;gt;&lt;br /&gt;&amp;lt;span dojoType="tooltip" connectId="pic"&amp;gt;&lt;br /&gt;  Me on a hat-wearing holiday, where we got to wear&lt;br /&gt;  all sorts of hats.&lt;br /&gt;&amp;lt;/span&amp;gt;&lt;/pre&gt;This is just an example, and most of the main Ajax libraries support something similar.&lt;br /&gt;&lt;br /&gt;There are two problems here; the first is that the attribute being used ('dojoType') is non-standard, so any system trying to help a blind user will have no idea what to make of the 'span'. That's a shame, since there's lots of useful text that could be made use of by a voice system.&lt;br /&gt;&lt;br /&gt;The second problem is that even if systems were made aware of the different attributes being used by different Ajax libraries to add custom components, it would have no idea whether it could treat a Dojo 'tooltip' in the same way as a YUI tooltip. A server might know all about the functionality of the device it is delivering the mark-up to, but would have no idea whether it could replace this mark-up with something that the device understood.&lt;br /&gt;&lt;br /&gt;One way around this problem is to simply use the XForms 'hint' element 'as is':&lt;pre&gt;&amp;lt;img id="pic" src="holiday.gif"&amp;gt;&lt;br /&gt;  &amp;lt;xf:hint&amp;gt;&lt;br /&gt;    Me on a hat-wearing holiday, where we got to wear&lt;br /&gt;    all sorts of hats.&lt;br /&gt;  &amp;lt;/xf:hint&amp;gt;&lt;br /&gt;&amp;lt;/img&amp;gt;&lt;/pre&gt;But another way is for libraries like Dojo to support the XHTML role attribute, rather than their own attribute, and to agree on standard identifiers for common parts of a component:&lt;pre&gt;&amp;lt;img id="pic" src="holiday.gif"&amp;gt;&amp;lt;/img&amp;gt;&lt;br /&gt;&amp;lt;span role="xf:hint" connectId="pic"&amp;gt;&lt;br /&gt;  Me on a hat-wearing holiday, where we got to wear&lt;br /&gt;  all sorts of hats.&lt;br /&gt;&amp;lt;/span&amp;gt;&lt;/pre&gt;&lt;h2&gt;Globally recognised roles&lt;/h2&gt;The first step to reusing the XForms hint definition like this, is to create a way to refer to the notion of 'hintness' without requiring the mark-up, via some unique identifier. The idea here comes from RDF, but you don't need to be an RDF expert to follow this; all we're saying is that we'd like a 'concept' of 'hinting' that everyone agrees on, and we want to identify that concept with a 'key' such as:&lt;pre&gt;http://www.w3.org/2002/xforms#hint&lt;/pre&gt;I've just made this key up by putting '#hint' on the end of the XForms namespace, but however we arrived at a URL, we now have something that could be used by systems all over the web to identify a 'hint'.&lt;br /&gt;&lt;br /&gt;The URL is a bit of a mouthful, so a common convention is to use QNames to shorten these long URLs; if we had 'xf' defined as the XForms namespace, we could now refer to our concept as 'xf:hint'.&lt;br /&gt;&lt;br /&gt;I should stress one thing--assigning an identifier to our concept is not about saying that this is now the &lt;em&gt;definitive&lt;/em&gt; definition of 'hintiness', but instead that this is &lt;em&gt;one&lt;/em&gt; definition amongst many, and it's identified with 'xf:hint'. In effect we're saying: if hints in your language or system behave just like hints in XForms, then why not say that they are 'xf:hint' objects. But if they &lt;em&gt;don't&lt;/em&gt; behave like hints in XForms, please use a different identifier for your types of hints.&lt;br /&gt;&lt;br /&gt;This technique of using a URL to identify functionality is being used in the accessibility community (see &lt;a href="http://www.w3.org/TR/aria-role/"&gt;Roles for Accessible Rich Internet Applications&lt;/a&gt;, for example).&lt;br /&gt;&lt;h2&gt;Summary&lt;/h2&gt;Having a standard 'hook' for information about the &lt;em&gt;purpose&lt;/em&gt; of a widget means that server software can make substitutions based on what the client is capable of supporting, and assistive technologies on the client-side can provide the user with a much better experience. In fact, 'role' is already supported in Firefox as a hook for accessibility (see &lt;a href="http://developer.mozilla.org/en/docs/Accessible_DHTML"&gt;Accessible DHTML&lt;/a&gt;). Of course, even if the browser doesn't do anything clever with the attribute natively, there is still nothing to prevent Ajax libraries like Dojo from using it as their hook.&lt;br /&gt;&lt;br /&gt;For other articles on 'role' see &lt;a href="http://internet-apps.blogspot.com/2006/08/using-role-attribute-to-extend-xhtml.html"&gt;Using the role attribute to extend XHTML&lt;/a&gt; and &lt;a href="http://internet-apps.blogspot.com/2006/07/xhtml-role-attribute-small-and.html"&gt; The XHTML role attribute: small and perfectly formed&lt;/a&gt;.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-4411881935937149268?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/4411881935937149268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=4411881935937149268' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/4411881935937149268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/4411881935937149268'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/10/declarative-accessible-ajax-with-html.html' title='Declarative, Accessible Ajax with the HTML role attribute'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-216355542094082564</id><published>2006-10-12T12:04:00.000Z</published><updated>2006-10-12T12:16:12.452Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><title type='text'>RDFa and microformats</title><content type='html'>During the course of writing an email recently, I needed to compare microformats with RDFa. I thought the list might be of interest to others.&lt;br /&gt;&lt;h2&gt;Microformats&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Microformats gets into real trouble when you try to combine more than one 'format' (in fact, rules of combination have to be defined);&lt;/li&gt;&lt;br /&gt;&lt;li&gt;it requires converting already existing langauges so that they work within the microformat rules--painful and slow, given that languages such as FoaF have already had an enormous amount of work put into them, and this must be almost completely repeated;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;there is no notion of namespacing;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;adding new languages seems to be based on a few key individuals;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;there is no way to validate;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;it isn't actually a "poor man's semantic web", as some suggest, since it isn't providing a generic mechanism. Instead it provides a way to hand-craft a small number of use-cases, which in turn means that some &lt;em&gt;other&lt;/em&gt; process still has to do the work of working out what it means. For each format another 'process' will be required.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;RDFa&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;RDFa tackles all of these issues by providing a series of &lt;strong&gt;general&lt;/strong&gt; rules that can be applied to any metadata, rather than specific rules for specific formats;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;be written as simply as microformats;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;scale to any level of complexity;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;allow QNames to be used if required, to provide full namespacing;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;make use of any RDF taxonomy;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;operate at the level of document &lt;em&gt;structure&lt;/em&gt; semantics, as well as the document &lt;em&gt;content&lt;/em&gt; semantics.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-216355542094082564?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/216355542094082564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=216355542094082564' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/216355542094082564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/216355542094082564'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/10/rdfa-and-microformats.html' title='RDFa and microformats'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-7012479031058500760</id><published>2006-10-08T21:37:00.000Z</published><updated>2006-10-08T22:05:54.190Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><title type='text'>Is it AJAX, Ajax...or XForms?</title><content type='html'>There seems to be growing agreement that &lt;a href="http://ajax.sys-con.com/read/281647.htm"&gt;what some have been calling AJAX should now be called Ajax&lt;/a&gt;. I'm interested in this because I've long seen &lt;a href="http://internet-apps.blogspot.com/2006/02/xforms-and-ajax-languages.html"&gt;Ajax as an &lt;em&gt;approach&lt;/em&gt;&lt;/a&gt; rather than a specific set of technologies, and in particular, that the mind-set Ajax encourages is very much in tune with that for XForms. Since the techniques used in Ajax are in many cases a subset of the rich features available in XForms--with often the difference being that XForms takes a declarative approach whilst Ajax uses procedural scripting--I see Ajax as an incredibly important stepping-stone (or even advert) for XForms.&lt;br /&gt;&lt;br /&gt;The Ajax upper case/lower case debate has been an interesting one, but it's great to see &lt;a href="http://ajax.sys-con.com/read/281647.htm"&gt;how quickly people have realised&lt;/a&gt; that they are no longer dealing with an acronym (and therefore a fixed set of technologies) but an approach (and therefore many related technologies). If Pluto can be redefined after thousands of years, 'Ajax' can certainly be redefined after only two!&lt;br /&gt;&lt;br /&gt;But I feel confident in predicting that the next phase for Ajax (rather than AJAX) will be less about improvements in its functionality, and more about making it easier to use (there are, after all, only so many animation or drag-and-drop routines you can write). And to make it easier to use, &lt;a href="http://internet-apps.blogspot.com/2006/07/declarative-ajaxnow-were-talking.html"&gt;Ajax needs a declarative language&lt;/a&gt;. Since &lt;a href="http://internet-apps.blogspot.com/2005/04/ajax-hard-facts-brass-tacks-and-bad.html"&gt;XForms was designed from the ground up to solve exactly the problems that Ajax does&lt;/a&gt;, it fits the bill, and I see the 'renaming' of Ajax as an incredibly important step towards encouraging people to see where XForms fits in the Ajax spectrum.&lt;br /&gt;&lt;br /&gt;I suppose I should be a little more precise, and say that actually the language we need is XForms &lt;em&gt;plus XHTML&lt;/em&gt; (perhaps with SVG, MathML and various other standard mark-up languages thrown in). For ease, I've called the aggregate language &lt;a href="http://skimstone.x-port.net/xh"&gt;xH&lt;/a&gt;, and the key idea is that mark-up can be used to build web applications. XForms provides an incredibly powerful piece of this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-7012479031058500760?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/7012479031058500760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=7012479031058500760' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/7012479031058500760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/7012479031058500760'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/10/is-it-ajax-ajaxor-xforms.html' title='Is it AJAX, Ajax...or XForms?'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-5487612953156140067</id><published>2006-10-07T08:43:00.000Z</published><updated>2006-10-07T08:56:33.492Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='servlet'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>XForms tips on IBM's developerWorks</title><content type='html'>It's great to see more and more useful XForms articles popping up here and there. The latest that caught my eye are a trio of 'tips' from Nicholas Chase, over on IBM's developerWorks site. The first concerns &lt;a href="http://www-128.ibm.com/developerworks/xml/library/x-xformstipjava/index.html?ca=dgr-lnxw09XForms-Java"&gt;using a Java servlet to process data from an XForm&lt;/a&gt; whilst the second does &lt;a href="http://www-128.ibm.com/developerworks/xml/library/x-xformstipphp/index.html?ca=dgr-lnxw09XForms-PHP"&gt;the same job with PHP&lt;/a&gt;. The third--on &lt;a href="http://www-128.ibm.com/developerworks/xml/library/x-xformstipajax/index.html?ca=dgr-lnxw09XForms-Ajax"&gt;combing XForms and Ajax&lt;/a&gt;--could perhaps have done with pointing out that XForms doesn't just contain one or two Ajax features...it's a superset of Ajax, without the spaghetti! XForms is Ajax 2.0.&lt;br /&gt;&lt;br /&gt;One last link worth mentioning; if you use Perl, you might find &lt;a href="http://www-128.ibm.com/developerworks/xml/library/x-xformstipperl/index.html?ca=dgr-lnxw09XForms-Perl"&gt;Tyler Anderson's article&lt;/a&gt; useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-5487612953156140067?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/5487612953156140067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=5487612953156140067' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/5487612953156140067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/5487612953156140067'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/10/xforms-tips-on-ibms-developerworks.html' title='XForms tips on IBM&apos;s developerWorks'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-8446647878801309000</id><published>2006-10-06T22:17:00.000Z</published><updated>2006-10-08T22:28:46.033Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='rdfa'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative programming'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='xtech'/><title type='text'>The best of XTech 2006!</title><content type='html'>&lt;a href="http://times.usefulinc.com/"&gt;Edd Dumbill&lt;/a&gt; is a busy man, at the centre of a lot of things. If he's into an acronym you know that firstly it's going to be good, and secondly it will one day be big. (The fact that he seems to like RDF, for example, gives me hope.)&lt;br /&gt;&lt;br /&gt;So I'm more pleased than I can describe to discover that &lt;a href="http://times.usefulinc.com/2006/10/04-best-of-xtech-2006"&gt;a recent blog of Edd's&lt;/a&gt;, which listed some of the "best received presentations" from XTech 2006, included my presentation on RDFa, and Steven's on declarative programming. I'm excited about the possibilities for both of these ideas over the next couple of years, so it's a real boost to see someone of Edd's experience and influence giving them a mention.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-8446647878801309000?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/8446647878801309000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=8446647878801309000' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8446647878801309000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8446647878801309000'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/10/best-of-xtech-2006.html' title='The best of XTech 2006!'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-8677701508862818743</id><published>2006-09-27T09:48:00.000Z</published><updated>2006-10-07T10:44:10.346Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xquery'/><category scheme='http://www.blogger.com/atom/ns#' term='xml database'/><category scheme='http://www.blogger.com/atom/ns#' term='xforms'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='webapps'/><category scheme='http://www.blogger.com/atom/ns#' term='exist'/><title type='text'>XForms, REST, XQuery...and skimming</title><content type='html'>I had a very pleasant day out of London &lt;span content="2006-09-26"&gt;yesterday&lt;/span&gt;, over at the &lt;a href="http://www.cclrc.ac.uk/"&gt;CCLRC Rutherford Appleton Laboratory&lt;/a&gt; near Didcot. The event was a joint meeting between XML UK and the W3C Office for UK and Ireland, and the topic was &lt;a href="http://www.w3c.rl.ac.uk/pastevents/XML_Access_Languages/XML_Access_Languages.html"&gt;XML Access Languages&lt;/a&gt;. The main idea was to look at the various W3C languages that can be used to query and manipulate XML, from XPath and XQuery, through to XSLT, and on these topics we were lucky to have both Liam Quin and Michael Kay.&lt;br /&gt;&lt;br /&gt;In addition to looking at the current and future state of these languages (including Andy Seaborne's dip into RDF-world via SPARQL), there were also two presentations on how they might be used in the context of building web applications. One of them was mine, looking at how if we push more and more functionality into the client--whether an Ajax or XForms client--and then access our data using XQuery over REST, we can build web applications much more quickly, and they are easier to maintain. Chris Wallace followed this by showing a full application that uses Ajax and eXist, and obtains data for all sorts of purposes, such as for transfer into Google Earth.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Skimming&lt;/h2&gt;The main focus of my talk was what we've called &lt;em&gt;&lt;a href="http://skimstone.x-port.net/about"&gt;skimming&lt;/a&gt;&lt;/em&gt;; the idea is to be able to install various pieces of server-side software and then not have to touch them again! No configuration...no writing of server-side scripts...just store some data and retrieve it. If you've not looked at this idea before, then it may sound a little odd, but a good example of a component that can do this would be a WebDAV server; here you simply install the software and then start saving documents, editing and updating them, searching for them, and so on. There is no reason why you couldn't build an entire client-side application that manipulates documents and stores and retrieves them, without having to do any more to the server than install the WebDAV software.&lt;br /&gt;&lt;br /&gt;The XML database &lt;a href="http://exist.sourceforge.net/"&gt;eXist&lt;/a&gt; can be much the same as WebDAV in that you can install it and then immediately start punching XML documents, but unlike relational databases you don't need to know in advance what you want to store--no need to create tables first, define schemas, etc.&lt;br /&gt;&lt;br /&gt;But the &lt;em&gt;skimming&lt;/em&gt; architecture goes further; by using a standard interface to our data--in this case XQuery--we don't need to write server-side scripts, applications or servlets to manage the data. Instead we just use queries from our 'rich client'. The resulting application is very loosely-coupled, and can run on just about any server-side architecture; client-side forms can be deployed by any HTTP server because there is no scripting involved in their creation, and the data can be delivered by any XML database that supports XQuery--and the list of those is getting longer.&lt;br /&gt;&lt;br /&gt;So &lt;a href="http://www.w3c.rl.ac.uk/pastevents/XML_Access_Languages/Mark/xforms-xquery.html"&gt;my presentation&lt;/a&gt; was about using REST, XQuery and XForms to allow for the rapid development of rich internet applications, by defining the application's behaviour on the client, and then using 'vanilla' software on the server.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Update&lt;/h2&gt;&lt;br /&gt;I've &lt;span content="2006-10-07"&gt;just seen&lt;/span&gt; Bill Higgins' &lt;a href="http://www-128.ibm.com/developerworks/java/library/wa-ajaxarch/index.html?ca=dgr-lnxw09Ajax-REST"&gt;Ajax and REST, Part 1&lt;/a&gt; which is a fantastic explanation of exactly the issues I'm experimenting with. His article is just as applicable to XForms as Ajax...as you read it, for every occurrence of the word &lt;em&gt;Ajax&lt;/em&gt; just replace it with the word &lt;em&gt;XForms&lt;/em&gt;. :)&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Update 2&lt;/h2&gt;&lt;br /&gt;And now I've come across the blog &lt;a href="http://thedil.wordpress.com/"&gt;the DIL&lt;/a&gt;, which the author is going to use to document their experience building new systems and user interfaces. One paragraph in particular caught my eye (my emphasis):&lt;br /&gt;&lt;blockquote&gt;In the end I chose eXist because it is open source, it stores my data as xml, outputs it as xml etc. Also I had also had some experience with xquery in my previous position and &lt;strong&gt;I liked the idea of being able to run the whole web application using only xquery, xpath and XSL&lt;/strong&gt;, all of which I was at least familiar with.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-8677701508862818743?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/8677701508862818743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=8677701508862818743' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8677701508862818743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/8677701508862818743'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/09/xforms-rest-xqueryand-skimming.html' title='XForms, REST, XQuery...and skimming'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-5953107624935323771</id><published>2006-09-09T14:58:00.000Z</published><updated>2006-09-09T15:10:25.707Z</updated><title type='text'>Internet-facing desktop applications</title><content type='html'>A really interesting discussion is underway about &lt;a href="http://www.readwriteweb.com/archives/webified_desktop_apps_vs_browser_apps.php"&gt;Webified Desktop Apps vs Browser-based Apps&lt;/a&gt; over on &lt;a href="http://www.readwriteweb.com/"&gt;Read/WriteWeb&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The general point is that whilst web-based applications are incredibly useful:&lt;br /&gt;&lt;blockquote&gt;the future of computing isn't entirely web-based.&lt;/blockquote&gt;&lt;br /&gt;Author Ebrahim Ezzy argues that instead, the desktop must be improved:&lt;br /&gt;&lt;blockquote&gt;What we require then are smart, webified, internet deployable desktop applications - that can reliably store data, serve it robustly, and interact with both remote and local databases. This connected model will ensure that applications will function in both online and offline states - for a seamless, uninterrupted experience.&lt;/blockquote&gt;&lt;br /&gt;The fact that this topic is getting discussed is great, although I think from the comments and views that I've read, one permutation is missing, and that is the creation of an additional layer &lt;em&gt;above&lt;/em&gt; the desktop that web applications can make use of to turn themselves into desktop applications. A key part of this idea is that this layer should be &lt;em&gt;standard&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;That's what we've done with &lt;a href="http://skimstone.x-port.net/about-sidewinder"&gt;Sidewinder&lt;/a&gt;; we've created a cross-platform environment that supports features such as creating windows that dock to the side of the display, can auto-hide, have transparency and opacity, and so on. Sidewinder also allows events that are fired in one window to be registered for in another (allowing applications to be built from smaller pieces).&lt;br /&gt;&lt;br /&gt;However, unlike traditional desktop applications that need to be written in C++ or Java, Sidewinder applications are written in either XHTML or JavaScript...or more often than not, both.&lt;br /&gt;&lt;br /&gt;So a web application could be as simple as an XHTML file that contains a page with a clock in it, through to a complex application in JavaScript, that in turn creates many XHTML windows and manages events passing between them.&lt;br /&gt;&lt;br /&gt;We call these applications 'internet-facing desktop applications', since they want to be desktop applications, but they have so many internet-related features that they are most easily built using web technologies such as HTTP servers and XHTML pages. By providing a framework that takes this into account we can get the best of both worlds.&lt;br /&gt;&lt;br /&gt;I mentioned that a key idea was the use of standards, and Sidewinder uses XHTML, XForms, SVG and MathML to build applications.&lt;br /&gt;&lt;br /&gt;We have various demos that show how easy it is to make a web application into a desktop one:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://skimstone.x-port.net/node/367"&gt;KoolIM as a desktop chat application&lt;/a&gt;;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://skimstone.x-port.net/node/365"&gt;Technorati Mini as a desktop application&lt;/a&gt;;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://skimstone.x-port.net/node/376"&gt;Enhancing your Google Calendars&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/ajax" rel="tag"&gt;Ajax&lt;/a&gt; | &lt;a href="http://technorati.com/tag/web2.0" rel="tag"&gt;web 2.0&lt;/a&gt; | &lt;a href="http://technorati.com/tag/webapps" rel="tag"&gt;webapps&lt;/a&gt; | &lt;a href="http://technorati.com/tag/programming" rel="tag"&gt;programming&lt;/a&gt; | &lt;a href="http://technorati.com/tag/standards" rel="tag"&gt;standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/browser" rel="tag"&gt;browser&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xml" rel="tag"&gt;XML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/HTML" rel="tag"&gt;HTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/w3c" rel="tag"&gt;W3C&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML" rel="tag"&gt;XHTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xforms" rel="tag"&gt;XForms&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-5953107624935323771?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/5953107624935323771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=5953107624935323771' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/5953107624935323771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/5953107624935323771'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/09/internet-facing-desktop-applications.html' title='Internet-facing desktop applications'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-2914995686596365497</id><published>2006-09-06T16:58:00.000Z</published><updated>2006-09-06T18:39:49.148Z</updated><title type='text'>Ajax makes browser choice irrelevant...but we still need standards</title><content type='html'>A discussion is running in various places (such as on the &lt;a href="http://lists.w3.org/Archives/Public/www-forms/"&gt;W3C's XForms list&lt;/a&gt;) about whether to add &lt;em&gt;lots&lt;/em&gt; of new features to developers' armoury (&lt;a href="http://www.w3.org/MarkUp/Forms/"&gt;XForms&lt;/a&gt;) or just a few (&lt;a href="http://www.w3.org/TR/web-forms-2/"&gt;Web Forms 2.0&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;The former (XForms) attempts to capture a wide range of patterns that recur in web applications, such as retrieving data without replacing the document the user is viewing (yes...XForms defined that a long time ago!), client-side validation (that too), using mark-up to provide tooltips and help, rather than using script (yes...), having controls such as calendar widgets and sliders built into the language (no-one told you?) and more.&lt;br /&gt;&lt;br /&gt;The latter (WF2) claims to add a few small improvements to HTML forms, so as not to move too far from current practice. This might be commendable in itself, but the truth is that as the WF2 specification has evolved, it has increasingly added features that make it about as similar to HTML forms as...well, XForms is. There are new attributes and elements, new interfaces, repeating constructs, new submission protocols, and so on. In fact, the truth is that the major differences between XForms and WF2 are not in terms of simplicity (XForms can do 'simple' in a way that is actually more intuitive than HTML forms) but that XForms supports an MVC architecture, and allows you to submit data without replacing the current page. It's unlikely that in 2006 anyone would want to be without either of these.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Who is using HTML forms anyway?&lt;/h2&gt;But the real irony with WF2 is that even if the spec had limited itself to 'small changes' instead of the large number it has added, 'current practice' is actually not to use HTML forms anyway! 'Current practice' either involves using some kind of server-side processing that hides HTML forms from you--such as Struts or Ruby on Rails--or it involves hand-coding Ajax yourself, using one of the many high quality libraries that are available.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Browser-choice is increasingly irrelevant&lt;/h2&gt;What I find most interesting though, is the mistaken belief amongst proponents of WF2 that anyone really cares what browser manufacturers do. Unfortunately the W3C suffers from the same delusion; they recently decided that one form-related standard wasn't enough and that there wasn't quite enough confusion in world of the web, so they invited the WHAT WG to bring their quaint ideas into the fold. (One of these quaint ideas is that XML won't catch on, which would be mildly amusing if such Luddism weren't now being courted by the W3C.)&lt;br /&gt;&lt;br /&gt;Why do I say that browsers are increasingly irrelevant? Well, imagine that the Ajax libraries just keep getting better and better, and increasingly 'hide' the differences between browsers. I think that's a pretty safe bet, since the leading libraries show no signs of slowing down their development and innovation any time soon. With such a context we actually get an &lt;em&gt;increase&lt;/em&gt; in conformance, not a decrease, and authors are able to write for all browsers rather than the "dominant" one. At a certain point, which browser your customers use becomes increasingly irrelevant.&lt;br /&gt;&lt;br /&gt;Whereas in the past it was up to all of us to test our sites and applications in the various browsers available, now we can leave that to the Ajax library authors, which has got to be a far more efficient use of everyones time.&lt;br /&gt;&lt;br /&gt;The browser war is therefore over, not because any one browser has won, but because developers could care less about the browser &lt;em&gt;as a browser&lt;/em&gt;--instead one or other Ajax library becomes 'the platform'. In parallel, users will tend to use the browser already installed on their computer, or the one that is mandated by their employer--likewise making the actual choice of browser irrelevant.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Extended browsers&lt;/h2&gt;Actually, to be more precise, what will increasingly happen on the user side is that we will choose our browser on the basis of handy features like tabs, or task-related features like RSS readers, photo sharing, blogging tools, and so on. Whether &lt;a href="http://www.flock.com/"&gt;Flock&lt;/a&gt; and &lt;a href="http://www.songbirdnest.com/"&gt;Songbird&lt;/a&gt; get it right remains to be seen, but there is no doubt that people will use products such as these if they serve their purpose. And that's a far better basis on which to choose a browser than which version of CSS it supports.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Standard Ajax&lt;/h2&gt;Then at some point the cry will go up: "Why do there have to be so many Ajax libraries? Can't we standardise on these browser enhancements? Has anyone written a tool for porting my YUI x.y application to Dojo a.b?"&lt;br /&gt;&lt;br /&gt;That, at least, will be the cry coming from developers, if it's not already; the end-user on the other hand will now be dealing with a different set of problems, and their cry will be "Why doesn't the new browser I've just installed work with my Flickr photos, my Blogger blogs, all my dates in GCal, and all my favourites stored in del.icio.us, like my old browser did?" I guess that's progress...&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;XForms, SMIL and the W3C&lt;/h2&gt;At least for developers there's some good news though, in that the XForms WG have been working for years on exactly the kind of standardisation that is needed to sort out 'the platform'. In fact, the W3C has lots of excellent work it should be making more of, such as:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.w3.org/TR/REC-smil/"&gt;SMIL&lt;/a&gt;: which covers a large part of most Ajax libraries, animation;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.w3.org/TR/DOM-Level-2-Events/"&gt;DOM 2 Events&lt;/a&gt;: easily supported in script, and provides a standard eventing architecture rather than the growing number of library-specific models that are emerging;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;and so on.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;The W3C therefore has an important role to play in the future of web application standards, but by using its experience in defining 'the platform' not being bounced into worrying about the future of the browser. It will only be able to help define the emerging platform if it takes seriously its tagline of "Leading the web to its full potential...", and does some &lt;em&gt;leading&lt;/em&gt;!&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/webapps" rel="tag"&gt;webapps&lt;/a&gt; | &lt;a href="http://technorati.com/tag/programming" rel="tag"&gt;programming&lt;/a&gt; | &lt;a href="http://technorati.com/tag/standards" rel="tag"&gt;standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/browser" rel="tag"&gt;browser&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xml" rel="tag"&gt;XML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/HTML" rel="tag"&gt;HTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/web+forms" rel="tag"&gt;web forms&lt;/a&gt; | &lt;a href="http://technorati.com/tag/wf2" rel="tag"&gt;WF2&lt;/a&gt; | &lt;a href="http://technorati.com/tag/w3c" rel="tag"&gt;W3C&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML" rel="tag"&gt;XHTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xforms" rel="tag"&gt;XForms&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-2914995686596365497?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/2914995686596365497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=2914995686596365497' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/2914995686596365497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/2914995686596365497'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/09/ajax-makes-browser-choice-irrelevantbut.html' title='Ajax makes browser choice irrelevant...but we still need standards'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-5006506432357134845</id><published>2006-09-01T14:48:00.000Z</published><updated>2006-09-01T14:53:36.790Z</updated><title type='text'>Time for a widget spring clean</title><content type='html'>&lt;a href="http://www.flickr.com/photos/mark-birbeck/230975082/" title="Photo Sharing" style="float: left; padding-right: 10px;"&gt;&lt;img src="http://static.flickr.com/81/230975082_43371e85eb_t.jpg" width="88" height="100" alt="Screenshot of analogue clock using SVG and XForms" /&gt;&lt;/a&gt;Every now and then, when I'm looking for something else, I stumble across a widget or an application that we've built using Sidewinder and formsPlayer, but for one reason or another we didn't get round to putting on the site. (Good old Google Desktop Search!)&lt;br /&gt;&lt;br /&gt;Actually, there is only the one reason they haven't been added and that is that we've been incredibly busy, but over the next period we're going to make a concerted effort to get some of these goodies out, so that people can start playing with them.&lt;br /&gt;&lt;br /&gt;We'll be adding them to the &lt;a href="/about-sidewinder"&gt;Sidewinder handbook&lt;/a&gt;, along with descriptions and tutorials.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/mark-birbeck/230970304/" title="Photo Sharing"&gt;&lt;img src="http://static.flickr.com/85/230970304_13f3ce4704_o.png" width="300" height="173" alt="red-led-clock" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/mark-birbeck/230975082/" title="Photo Sharing"&gt;&lt;img src="http://static.flickr.com/81/230975082_43371e85eb_o.png" width="204" height="231" alt="analogue-clock" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://skimstone.x-port.net/files/xbl-map-widget.PNG" alt="Screenshot of the map custom control" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/webapps" rel="tag"&gt;webapps&lt;/a&gt; | &lt;a href="http://technorati.com/tag/programming" rel="tag"&gt;programming&lt;/a&gt; | &lt;a href="http://technorati.com/tag/web+standards" rel="tag"&gt;web standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/standards" rel="tag"&gt;standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/browser" rel="tag"&gt;browser&lt;/a&gt; | &lt;a href="http://technorati.com/tag/javascript" rel="tag"&gt;javascript&lt;/a&gt; | &lt;a href="http://technorati.com/tag/ajax" rel="tag"&gt;Ajax&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xml" rel="tag"&gt;XML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/HTML" rel="tag"&gt;HTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML" rel="tag"&gt;XHTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML2" rel="tag"&gt;XHTML 2&lt;/a&gt; | &lt;a href="http://technorati.com/tag/web2.0" rel="tag"&gt;Web2.0&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xforms" rel="tag"&gt;XForms&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xbl" rel="tag"&gt;XBL&lt;/a&gt; | &lt;a href="http://technorati.com/tag/svg" rel="tag"&gt;SVG&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-5006506432357134845?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/5006506432357134845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=5006506432357134845' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/5006506432357134845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/5006506432357134845'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/09/time-for-widget-spring-clean.html' title='Time for a widget spring clean'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-2798537606542809290</id><published>2006-09-01T13:32:00.000Z</published><updated>2006-09-01T13:36:44.428Z</updated><title type='text'>Creative Commons' Firefox plug-in now supports RDFa</title><content type='html'>A &lt;a href="http://creativecommons.org/weblog/entry/6039"&gt;recent announcement&lt;/a&gt; on the CC site says that MozCC 2.2 now supports RDFa.&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/webapps" rel="tag"&gt;webapps&lt;/a&gt; | &lt;a href="http://technorati.com/tag/programming" rel="tag"&gt;programming&lt;/a&gt; | &lt;a href="http://technorati.com/tag/standards" rel="tag"&gt;standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/browser" rel="tag"&gt;browser&lt;/a&gt; | &lt;a href="http://technorati.com/tag/rdf" rel="tag"&gt;RDF&lt;/a&gt; | &lt;a href="http://technorati.com/tag/rdfa" rel="tag"&gt;RDFa&lt;/a&gt; | &lt;a href="http://technorati.com/tag/metadata" rel="tag"&gt;Metadata&lt;/a&gt; | &lt;a href="http://technorati.com/tag/semweb" rel="tag"&gt;SemWeb&lt;/a&gt; | &lt;a href="http://technorati.com/tag/semanticweb" rel="tag"&gt;Semantic Web&lt;/a&gt; | &lt;a href="http://technorati.com/tag/semantic+web" rel="tag"&gt;Semantic Web&lt;/a&gt; | &lt;a href="http://technorati.com/tag/semantic-web" rel="tag"&gt;Semantic Web&lt;/a&gt; | &lt;a href="http://technorati.com/tag/microformats" rel="tag"&gt;Microformats&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xml" rel="tag"&gt;XML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/HTML" rel="tag"&gt;HTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML" rel="tag"&gt;XHTML&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-2798537606542809290?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/2798537606542809290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=2798537606542809290' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/2798537606542809290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/2798537606542809290'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/09/creative-commons-firefox-plug-in-now.html' title='Creative Commons&apos; Firefox plug-in now supports RDFa'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-3839224074723560121</id><published>2006-08-31T16:46:00.000Z</published><updated>2006-08-31T16:54:54.482Z</updated><title type='text'>Editing XForms documents with the xH schemas</title><content type='html'>The schemas used to validate XHTML documents in Sidewinder are now &lt;a href="http://skimstone.x-port.net/xh"&gt;available for separate download&lt;/a&gt;. This is particularly useful if you use an XML editor to create XHTML + XForms documents, since many XML editors can use schemas to guide the editing process. (Instructions are available, showing &lt;a href="http://skimstone.x-port.net/node/394"&gt;how to configure oXygen&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;The current collection of schemas uses &lt;a href="http://www.w3.org/TR/xhtml-modularization/"&gt;XHTML 1.1 Modularisation&lt;/a&gt; techniques to incorporate XForms, SVG and MathML into XHTML, and we've called the complete combination &lt;a href="http://skimstone.x-port.net/xh"&gt;xH&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/webapps" rel="tag"&gt;webapps&lt;/a&gt; | &lt;a href="http://technorati.com/tag/programming" rel="tag"&gt;programming&lt;/a&gt; | &lt;a href="http://technorati.com/tag/web+standards" rel="tag"&gt;web standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/standards" rel="tag"&gt;standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/browser" rel="tag"&gt;browser&lt;/a&gt; | &lt;a href="http://technorati.com/tag/cdf" rel="tag"&gt;CDF&lt;/a&gt; | &lt;a href="http://technorati.com/tag/compound+documents" rel="tag"&gt;Compound Documents&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xml" rel="tag"&gt;XML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/HTML" rel="tag"&gt;HTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML" rel="tag"&gt;XHTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML2" rel="tag"&gt;XHTML 2&lt;/a&gt; | &lt;a href="http://technorati.com/tag/w3c" rel="tag"&gt;W3C&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xforms" rel="tag"&gt;XForms&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-3839224074723560121?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/3839224074723560121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=3839224074723560121' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3839224074723560121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/3839224074723560121'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/08/editing-xforms-documents-with-xh.html' title='Editing XForms documents with the xH schemas'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-115637815701165784</id><published>2006-08-23T22:56:00.000Z</published><updated>2006-08-30T00:54:08.273Z</updated><title type='text'>Sidewinder and GCal desktop applications</title><content type='html'>The latest release of &lt;a href="http://skimstone.x-port.net/about-sidewinder"&gt;Sidewinder&lt;/a&gt; sports some interesting features which should go a long way to enabling desktop applications to be built with HTML and Ajax. For example, it is now possible to dock any number of windows to the same edge of the screen, and have them auto-hide independently. (Previously you could only have one window per edge.)&lt;br /&gt;&lt;br /&gt;It's also possible to intercept requests for new browser windows that are made by Ajax applications running in Sidewinder. The JavaScript application that invoked the Ajax application (it's &lt;a href="http://skimstone.x-port.net/node/317"&gt;actually pretty simple&lt;/a&gt;!) then gets the chance to create any type of window it wants--transparent, docked, autohiding, etc.--before returning it to the Ajax application.&lt;br /&gt;&lt;br /&gt;Phil Booth has written a couple of blog entries that illustrate the new features, and has included sample code. The first explains &lt;a href="http://skimstone.x-port.net/node/374"&gt;how to create multiple docking windows&lt;/a&gt; at postions that are calculated at run-time, and it builds on the &lt;a href="/2006/08/making-desktop-chat-client-from.html"&gt;JS application for Kool IM&lt;/a&gt;. The second, and most recent, shows how &lt;a href="http://skimstone.x-port.net/node/376"&gt;multiple GCal windows&lt;/a&gt; can be created, giving a great deal of flexibility (and control) over how you organise your desktop.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/89857293@N00/222934844/"&gt;&lt;img src="http://static.flickr.com/89/222934844_99fd46fe8f_m.jpg" alt="Google Calendar in the Sidewinder Viewer" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/89857293@N00/222103249/"&gt;&lt;img src="http://static.flickr.com/86/222103249_89f0bf7e65_m.jpg" alt="Kool IM in the Sidewinder Viewer" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/webapps" rel="tag"&gt;webapps&lt;/a&gt; | &lt;a href="http://technorati.com/tag/programming" rel="tag"&gt;programming&lt;/a&gt; | &lt;a href="http://technorati.com/tag/web+standards" rel="tag"&gt;web standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/standards" rel="tag"&gt;standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/browser" rel="tag"&gt;browser&lt;/a&gt; | &lt;a href="http://technorati.com/tag/javascript" rel="tag"&gt;javascript&lt;/a&gt; | &lt;a href="http://technorati.com/tag/ajax" rel="tag"&gt;Ajax&lt;/a&gt; | &lt;a href="http://technorati.com/tag/koolim" rel="tag"&gt;KoolIM&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xml" rel="tag"&gt;XML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/HTML" rel="tag"&gt;HTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML" rel="tag"&gt;XHTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML2" rel="tag"&gt;XHTML 2&lt;/a&gt; | &lt;a href="http://technorati.com/tag/web2.0" rel="tag"&gt;Web2.0&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xforms" rel="tag"&gt;XForms&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xbl" rel="tag"&gt;XBL&lt;/a&gt; | &lt;a href="http://technorati.com/tag/gcal" rel="tag"&gt;GCal&lt;/a&gt; | &lt;a href="http://technorati.com/tag/googlecalendar" rel="tag"&gt;GoogleCalendar&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-115637815701165784?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/115637815701165784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=115637815701165784' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115637815701165784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115637815701165784'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/08/sidewinder-and-gcal-desktop.html' title='Sidewinder and GCal desktop applications'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-115616438957870912</id><published>2006-08-21T10:07:00.000Z</published><updated>2006-08-21T12:55:32.026Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='role'/><title type='text'>Using the role attribute to extend XHTML</title><content type='html'>An interesting suggestion came up recently on the &lt;code&gt;www-html&lt;/code&gt; mailing-list. &lt;a href="http://lists.w3.org/Archives/Public/www-html/2006Aug/0124"&gt;Ahmed Saad suggested that an attribute could be added to HTML which when placed on an element would tell the browser not to execute any script contained within&lt;/a&gt;. This could be used to wrap comments added to a blog, and so prevent executable code from being uploaded. Ahmed gave an example of his proposal in action:&lt;pre&gt;&amp;lt;div id="comment123" nocode="true"&amp;gt;&lt;br /&gt;  &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;    alert('This piece of code will not be executed even ¿&lt;br /&gt;    though it evaded the server-side filter');&lt;br /&gt;  &amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;It's certainly a great suggestion, but it's also the kind of thing that is just so easy to do with the &lt;a href="http://www.w3.org/TR/xhtml-role/"&gt;proposed &lt;code&gt;role&lt;/code&gt; attribute&lt;/a&gt;, that I thought I'd use it to illustrate how some of the new hooks being added to XHTML allow to be easily extended in a decentralised way, giving different interest groups the ability to bend XHTML to their own purposes.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;The &lt;code&gt;role&lt;/code&gt; attribute&lt;/h2&gt;The &lt;code&gt;role&lt;/code&gt; attribute is a new feature in &lt;a href="http://www.w3.org/TR/xhtml2/"&gt;XHTML 2&lt;/a&gt; that is being made available via a &lt;a href="http://skimstone.x-port.net/node/179"&gt;module&lt;/a&gt; so that it can be used in XHTML 1.x. (You might also be interested in &lt;a href="http://internet-apps.blogspot.com/2006/07/xhtml-role-attribute-small-and.html"&gt; The XHTML role attribute: small and perfectly formed&lt;/a&gt;, and &lt;a href="http://internet-apps.blogspot.com/2006/07/xhtml-2-and-semantic-web-are-we-nearly.html"&gt;XHTML 2 and the Semantic Web: Are we nearly there yet?&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Adding functionality&lt;/h2&gt;We generally need two things to implement an idea like Ahmed's in XHTML:&lt;ul&gt;&lt;li&gt;some agreed mark-up to allow the author to signal that they want to make use of the feature;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;a description of exactly what the behaviour should be.&lt;/li&gt;&lt;/ul&gt;Traditionally both of these parts of the requirement would have come from members of the HTML Working Group, after much discussion at meetings and conferences, on phone calls and of course with other interested parties, on mailing-lists. But there is no reason for this to be the &lt;em&gt;only&lt;/em&gt; way to grow the language, particularly when it comes to 'light-weight' features such as the one being proposed here.&lt;br /&gt;&lt;br /&gt;To illustrate, I'll show one way that Ahmed's requirement might be implemented, using the new hooks.&lt;br /&gt;&lt;h2&gt;The mark-up&lt;/h2&gt;To flag up the use of the feature in the mark-up, we could simply use an agreed value in the &lt;code&gt;role&lt;/code&gt; attribute, with Ahmed's &lt;code&gt;nocode="true"&lt;/code&gt; suggestion becoming &lt;code&gt;role="nocode"&lt;/code&gt;:&lt;pre&gt;&amp;lt;div id="comment123" &lt;span style="color: red;"&gt;role="nocode"&lt;/span&gt;&amp;gt;&lt;br /&gt;  &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;    alert('This piece of code will not be executed even ¿&lt;br /&gt;    though it evaded the server-side filter');&lt;br /&gt;  &amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;Even better, we could actually define this block as what it really is--a comment--and let the fact that code should not be executed be a consequence of the block being a comment, rather than some 'floating' property:&lt;pre&gt;&amp;lt;div id="comment123" &lt;span style="color: red;"&gt;role="comment"&lt;/span&gt;&amp;gt;&lt;br /&gt;  &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;    alert('This piece of code will not be executed even ¿&lt;br /&gt;    though it evaded the server-side filter');&lt;br /&gt;  &amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;h3&gt;Globally unique&lt;/h3&gt;One of the key ideas of the &lt;code&gt;role&lt;/code&gt; proposal is that is makes use of QNames to allow for the clear identification of concepts. There may be some systems in which a comment should contain executable code, for example--in other words, your &lt;code&gt;comment&lt;/code&gt;s may not be the same as mine. For the sake of our illustration, let's pretend that part of the &lt;a href="http://www.atomenabled.org/"&gt;Atom&lt;/a&gt; suite of specifications is a set of terms that can be used in situations such as this, and it includes the definition of &lt;code&gt;atom:comment&lt;/code&gt;:&lt;pre&gt;&amp;lt;div id="comment123" role="&lt;span style="color: red;"&gt;atom:comment&lt;/span&gt;"&amp;gt;&lt;br /&gt;  &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;    alert('This piece of code will not be executed even ¿&lt;br /&gt;    though it evaded the server-side filter');&lt;br /&gt;  &amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;Now we have a way of uniquely identifying 'Atom comments' in any XHTML mark-up, without having to extend XHTML (beyond the addition of the &lt;code&gt;@role&lt;/code&gt; attribute, that is).&lt;br /&gt;&lt;h2&gt;Defining features&lt;/h2&gt;Now that we've created a way for an author to tag different parts of their documents, we also need to define what these tags mean. This is usually done in the HTML specifications themselves, but the &lt;code&gt;role&lt;/code&gt; attribute gives us a &lt;strong&gt;decentralised&lt;/strong&gt; way to add functionality to XHTML.&lt;br /&gt;&lt;br /&gt;The easiest way to define the functionality is in prose. We might say that 'an &lt;em&gt;Atom comment&lt;/em&gt; is any text added to an entry, and any mark-up contained in the comment is to be rendered as if it was in a CDATA section'. Or we might say 'any &lt;code&gt;script&lt;/code&gt; elements can be ignored'. The actual definition is not important here, the key point is simply that somewhere there would be definition of an &lt;code&gt;atom:comment&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;code&gt;role&lt;/code&gt; specification goes further than allowing simple text definitions for objects, and allows the use of RDF to give more precise, machine-processable instructions. We won't go into the mechanism here, but a trail is already being blazed in this space (with a particular focus on accessibility), by Lisa Seeman and Richard Schwerdfeger; look at their &lt;a href="http://www.w3.org/WAI/PF/GUI/"&gt;Role Taxonomy for Accessible Adaptable Applications&lt;/a&gt;. In particular, they have a great &lt;a href="http://www.w3.org/WAI/PF/GUI/roleTaxonomy-20060508.html#Example"&gt;example&lt;/a&gt; that shows &lt;code&gt;role&lt;/code&gt; being used to indicate that a &lt;code&gt;span&lt;/code&gt; is actually serving the purpose of a tri-state check-box.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;None of this is to say that we need never extend HTML again, but there are certainly an enormous number of features that could be easily added via the new extensibility hooks added to XHTML--something that vertical markets and distinct interest groups will find useful.&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/webapps" rel="tag"&gt;webapps&lt;/a&gt; | &lt;a href="http://technorati.com/tag/semantic+web" rel="tag"&gt;Semantic Web&lt;/a&gt; | &lt;a href="http://technorati.com/tag/semweb" rel="tag"&gt;semweb&lt;/a&gt; | &lt;a href="http://technorati.com/tag/programming" rel="tag"&gt;programming&lt;/a&gt; | &lt;a href="http://technorati.com/tag/web+standards" rel="tag"&gt;web standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/standards" rel="tag"&gt;standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/browser" rel="tag"&gt;browser&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xml" rel="tag"&gt;XML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/rdf" rel="tag"&gt;RDF&lt;/a&gt; | &lt;a href="http://technorati.com/tag/HTML" rel="tag"&gt;HTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML" rel="tag"&gt;XHTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML2" rel="tag"&gt;XHTML 2&lt;/a&gt; | &lt;a href="http://technorati.com/tag/accessibility" rel="tag"&gt;Accessibility&lt;/a&gt; | &lt;a href="http://technorati.com/tag/wai" rel="tag"&gt;WAI&lt;/a&gt; | &lt;a href="http://technorati.com/tag/w3c" rel="tag"&gt;W3C&lt;/a&gt; | &lt;a href="http://technorati.com/tag/role" rel="tag"&gt;role&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xforms" rel="tag"&gt;XForms&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-115616438957870912?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/115616438957870912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=115616438957870912' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115616438957870912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115616438957870912'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/08/using-role-attribute-to-extend-xhtml.html' title='Using the role attribute to extend XHTML'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-115500195487480582</id><published>2006-08-08T01:31:00.000Z</published><updated>2006-08-21T15:48:23.803Z</updated><title type='text'>Making a desktop chat client from Sidewinder and KoolIM</title><content type='html'>&lt;a href="http://www.koolim.com/"&gt;KoolIM&lt;/a&gt; is a very impressive web application that allows you to chat with people via any of the popular messaging protocols. The KoolIM servers do all the work of translating the protocols, which means that the user interface need only communicate over HTTP to the KoolIM servers. It's therefore possible to build chat clients with HTML, which of course means that users do not need to install any special software and can chat with friends and colleagues from almost anywhere.&lt;br /&gt;&lt;br /&gt;Since KoolIM supports so many protocols it's an extremely strong candidate to be used as your main chat software, following the trend set by Google web applications for email, diary and spreadsheets. Although the applications themselves are incredibly powerful, you still feel like you are running a web page in a browser--and that's the problem that Sidewinder aims to solve.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://skimstone.x-port.net/about-sidewinder"&gt;Sidewinder is a framework&lt;/a&gt; which makes web applications look like desktop applications, by providing features such as docking to the side of the display, auto-hiding, opacity, transparency, and so on.&lt;br /&gt;&lt;br /&gt;The latest release of Sidewinder sports an extremely useful feature which is an event that tells an application when a new window is being created, and then allows a renderer object to be provided instead of the usual browser window.&lt;br /&gt;&lt;br /&gt;Since the KoolIM web application creates new windows whenever a new conversation is started, then substituting a renderer window allows us to make the already professional looking KoolIM feel that bit more slick; with a few lines of code it's possible to provide KoolIM with a window that docks to the left side of the screen and automatically hides when the mouse is moved away, or to alter the position of successive windows so that they are all visible, or even to create a semi-transparent window that will always be visible in a corner of your desktop.&lt;br /&gt;&lt;br /&gt;We've provided &lt;a href="http://skimstone.x-port.net/node/367"&gt;full details in a skimstone article&lt;/a&gt;, along with details on &lt;a href="http://skimstone.x-port.net/node/318"&gt;creating a desktop calendar with Google Calendar&lt;/a&gt;. If you want to give these applications a try you'll need the &lt;a href="http://skimstone.x-port.net/project/swviewer"&gt;latest release of the Sidewinder beta&lt;/a&gt;, and it would be worth reading the &lt;a href="http://skimstone.x-port.net/node/317"&gt;notes on writing applications with JavaScript&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/webapps" rel="tag"&gt;webapps&lt;/a&gt; | &lt;a href="http://technorati.com/tag/programming" rel="tag"&gt;programming&lt;/a&gt; | &lt;a href="http://technorati.com/tag/web+standards" rel="tag"&gt;web standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/standards" rel="tag"&gt;standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/browser" rel="tag"&gt;browser&lt;/a&gt; | &lt;a href="http://technorati.com/tag/javascript" rel="tag"&gt;javascript&lt;/a&gt; | &lt;a href="http://technorati.com/tag/ajax" rel="tag"&gt;Ajax&lt;/a&gt; | &lt;a href="http://technorati.com/tag/koolim" rel="tag"&gt;KoolIM&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xml" rel="tag"&gt;XML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/HTML" rel="tag"&gt;HTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML" rel="tag"&gt;XHTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML2" rel="tag"&gt;XHTML 2&lt;/a&gt; | &lt;a href="http://technorati.com/tag/web2.0" rel="tag"&gt;Web2.0&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xforms" rel="tag"&gt;XForms&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xbl" rel="tag"&gt;XBL&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-115500195487480582?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/115500195487480582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=115500195487480582' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115500195487480582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115500195487480582'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/08/making-desktop-chat-client-from.html' title='Making a desktop chat client from Sidewinder and KoolIM'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-115478809635707622</id><published>2006-08-05T14:10:00.000Z</published><updated>2006-08-06T15:28:38.606Z</updated><title type='text'>Application development with XML objects</title><content type='html'>An XML language that allows for the definition of objects with methods, properties, and event handlers is a key component of the &lt;a href="http://www.w3.org/2004/04/webapps-cdf-ws/papers/webapps-workshop-standards-based-vm.pdf"&gt;web application architecture that we are trying to build&lt;/a&gt;. The general idea is that an XML DOM node can be treated as a kind of base class, and some declarative language is then used to specify additional features to add to that class. By allowing more than one of these &lt;em&gt;XML objects&lt;/em&gt; to be bound at a time to a DOM node, we overcome the problems and limitations that arise from multiple inheritance in OO languages like C++.&lt;br /&gt;&lt;br /&gt;But most significantly, by allowing the selection of these objects to be determined dynamically, at run-time, as the DOM itself is changing, we create &lt;a href="http://internet-apps.blogspot.com/2005/11/xforms-flickrbar-and-flickr-strips.html"&gt;a powerful and effective application-building environment&lt;/a&gt;; it's as if our application is recompiling itself into new shapes as it runs.&lt;br /&gt;&lt;br /&gt;To fully make use of such a technology we need two components, one to describe the XML objects themselves, and the second to indicate when to use them--i.e., which XML objects to 'attach' to which DOM nodes, and when.&lt;br /&gt;&lt;br /&gt;I'll look at the selection language in a separate post; in this one I'd like to look at how we might actually specify the XML objects themselves.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;XBL as an object definition language&lt;/h2&gt;XBL is a pretty good candidate for being the 'XML object definition language' part of the equation. It's been around for a while, and has been &lt;a href="http://www.mozilla.org/catalog/architecture/xbl/"&gt;used in Mozilla browsers&lt;/a&gt; for a number of years. &lt;a href="http://www.w3.org/TR/xbl/"&gt;Attempts are underway to update and formalise the language under the banner of the W3C&lt;/a&gt;, although whether this will happen or not is unfortunately less about the appropriateness of the specification, and more about the personalities involved.&lt;br /&gt;&lt;br /&gt;Having said that, it's not completely obvious that XBL &lt;em&gt;is&lt;/em&gt; the right tool for the job anyway. Although the advantages of XBL are in its maturity--it has been implemented for a number of years in Mozilla-based browsers, and we have also implemented an XBL processor for IE as part of formsPlayer--the disadvantages are that it requires a new language, and this language is tightly integrated with CSS. Given that we already have a language for defining 'web objects' with which far more people are familiar than XBL--XHTML--it's worth considering whether is is more efficient to use that.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;XHTML documents as objects&lt;/h2&gt;Making use of XHTML itself requires only a very small leap in our mindsets, since XHTML already defines web applications as a combination of script and mark-up. All we would need to do to make use of XHTML as an XML object definition language would be to specify the process by which an XHTML document is in turn used as a component within another XHTML web application.&lt;br /&gt;&lt;br /&gt;As it happens, we can do a little better than that, and make it easier to specify script-related functionality in mark-up. This would be of some benefit anyway in our normal documents, regardless of whether those documents are embedded in others.&lt;br /&gt;&lt;br /&gt;(There is of course a precedent for this, and that is &lt;a href="http://www.w3.org/TR/NOTE-HTMLComponents"&gt;HTC&lt;/a&gt; from Microsoft, and its successor &lt;a href="http://www.w3.org/TR/becss"&gt;Behavioral Extensions to CSS&lt;/a&gt;. This language never really took off, most probably because it smacked too much of being Microsoft-only, although Mozilla producing something separate wouldn't have helped. Either way, some might argue that XAML is Microsoft's updated solution to the same problem.)&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Properties and methods&lt;/h3&gt;To give an example of how this might work, take a script in which we declare a variable that can be used by other scripts in the same web application:&lt;br /&gt;&lt;pre&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;  var gInitialised = false;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;br /&gt;This could easily be expressed as something like:&lt;br /&gt;&lt;pre&gt;&amp;lt;property name="gInitialised" initial="false" /&amp;gt;&lt;/pre&gt;&lt;br /&gt;Similarly, we often declare functions in the following style:&lt;br /&gt;&lt;pre&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;  function animate(el, attr, from, to, dur)&lt;br /&gt;  {&lt;br /&gt;  }&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;br /&gt;This could be expressed as follows:&lt;br /&gt;&lt;pre&gt;&amp;lt;method name="animate"&amp;gt;&lt;br /&gt;  &amp;lt;parameter name="el" /&amp;gt;&lt;br /&gt;  &amp;lt;parameter name="attr" /&amp;gt;&lt;br /&gt;  &amp;lt;parameter name="from" /&amp;gt;&lt;br /&gt;  &amp;lt;parameter name="to" /&amp;gt;&lt;br /&gt;  &amp;lt;parameter name="dur" /&amp;gt;&lt;br /&gt;  &amp;lt;implementation type="application/x-javascript"&amp;gt;&lt;br /&gt;    ...&lt;br /&gt;  &amp;lt;/implementation&amp;gt;&lt;br /&gt;  &amp;lt;implementation type="application/x-python"&amp;gt;&lt;br /&gt;    ...&lt;br /&gt;  &amp;lt;/implementation&amp;gt;&lt;br /&gt;&amp;lt;/method&gt;&lt;/pre&gt;&lt;br /&gt;This is by no means a concrete proposal, but even from this 'mock-up mark-up' you can see that there are many advantages to be had over using the normal 'inline script' approach. The most obvious is that we can easily locate the methods we are using in our applications, making them available to other tools. But note also how we have provided different implementations for the method, allowing the client application to choose from them based on what languages they support. This is an idea proposed by Steven Pemberton in his XML Handlers draft (at the moment only &lt;a href="http://www.w3.org/MarkUp/Group/xml-handlers"&gt;available to W3C members&lt;/a&gt;) but seems to fit nicely with the general definition of methods.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;As I say, I'm just playing with the syntax here, but the key point is that since XHTML &lt;em&gt;already&lt;/em&gt; defines complex objects using XML, then why not use it define objects that can be used recursively? By adding an &lt;a href="http://www.w3.org/TR/xhtml-modularization/"&gt;XHTML 1.1 Modularisation&lt;/a&gt; module we could easily obtain the ability to define methods and properties in top level XHTML documents, and the same technique is obviously usable for bound objects.&lt;br /&gt;&lt;br /&gt;And one final bonus from using XHTML to recursively extend itself is that we immediately have at our disposal an enormous resource of readily available objects and components...the current web.&lt;br /&gt;&lt;br /&gt;(I've written on our skimstone site about &lt;a href="http://skimstone.x-port.net/node/184"&gt;using XHTML as a programming language&lt;/a&gt;, as well as an older blog about XHTML as a &lt;a href="http://internet-apps.blogspot.com/2005/01/xhtml-2-as-universal-document.html"&gt;base for web languages&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/webapps" rel="tag"&gt;webapps&lt;/a&gt; | &lt;a href="http://technorati.com/tag/programming" rel="tag"&gt;programming&lt;/a&gt; | &lt;a href="http://technorati.com/tag/web+standards" rel="tag"&gt;web standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/standards" rel="tag"&gt;standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/browser" rel="tag"&gt;browser&lt;/a&gt; | &lt;a href="http://technorati.com/tag/cdf" rel="tag"&gt;CDF&lt;/a&gt; | &lt;a href="http://technorati.com/tag/compound+documents" rel="tag"&gt;Compound Documents&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xml" rel="tag"&gt;XML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/HTML" rel="tag"&gt;HTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML" rel="tag"&gt;XHTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML2" rel="tag"&gt;XHTML 2&lt;/a&gt; | &lt;a href="http://technorati.com/tag/w3c" rel="tag"&gt;W3C&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xforms" rel="tag"&gt;XForms&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xbl" rel="tag"&gt;XBL&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-115478809635707622?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/115478809635707622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=115478809635707622' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115478809635707622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115478809635707622'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/08/application-development-with-xml.html' title='Application development with XML objects'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-115447268886338452</id><published>2006-08-01T22:10:00.000Z</published><updated>2006-08-01T22:57:29.010Z</updated><title type='text'>Using subforms in XForms</title><content type='html'>Over they years I've had cause to write many different kinds of form-based applications. At one time I had to write them in C++ or Java, but that was a long time ago! For simple applications that had to be produced quickly (and could change a lot) I had to use VB or Microsoft Access. But like most people nowadays, most of the recent decade has been spent using one kind of server-based application after another to produce HTML user interfaces.&lt;br /&gt;&lt;br /&gt;But no matter which language was used, the same problem always presented itself; how do we make big forms out of small forms?&lt;br /&gt;&lt;br /&gt;We've been working on this a lot lately, because some of the forms in a current project are very big. Of course, they could be made smaller, and we could get our users to move from one form to another as they perform their tasks. But doing this would require us to pass state information between forms, either in cookies on the client, or via the server, and the latter approach binds us in far too tightly to the server software. (See &lt;a href="http://skimstone.x-port.net/about"&gt;skimming&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;The ideal technique is of course to only load parts of the form as they are needed. But this is not as easy as it sounds, and keeping track of this at design and build time, especially in a scripted environment, is next to impossible.&lt;br /&gt;&lt;br /&gt;In all the years I've been building applications, I've never managed to find a decent solution, but I feel that XForms may finally provide a reasonable way.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Extending the &lt;code&gt;load&lt;/code&gt; action&lt;/h2&gt;The technique we used on the current project is to extend the XForms &lt;code&gt;&lt;a href="http://www.w3.org/TR/xforms/slice10.html#action-load"&gt;load&lt;/a&gt;&lt;/code&gt; action to include:&lt;ul&gt;&lt;li&gt;a &lt;code&gt;target&lt;/code&gt; attribute to indicate where to place the sub-form;&lt;/li&gt;&lt;li&gt;an additional value in the &lt;code&gt;show&lt;/code&gt; attribute of &lt;code&gt;embed&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;To show how it works, here is an example of how we place a sub-form into a &lt;code&gt;case&lt;/code&gt; when the user toggles that &lt;code&gt;case&lt;/code&gt;:&lt;pre&gt;&amp;lt;xf:load&lt;br /&gt; target="div-work-list-choose"&lt;br /&gt; ev:observer="case-work-list-choose" ev:event="xforms-select"&lt;br /&gt; show="embed" resource="subforms/sf-work-list.xml"&lt;br /&gt;/&amp;gt;&lt;/pre&gt;We use the term &lt;em&gt;sub-form&lt;/em&gt; to describe the document that is loaded because it may have more than just controls; it may include its own models, submissions, bind statements, and so on.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Using XLink&lt;/h2&gt;The extensions to &lt;code&gt;load&lt;/code&gt; are of course non-standard, and this is still very experimental. But it is worth saying that there is logic behind the way we've done this. For a start, XForms really should support a &lt;code&gt;target&lt;/code&gt; attribute on the &lt;code&gt;load&lt;/code&gt; action anyway, which would allow new documents to be loaded into frames or other locations.&lt;br /&gt;&lt;br /&gt;But also, the &lt;code&gt;show&lt;/code&gt; attribute in XForms is actually modelled on the &lt;a href="http://www.w3.org/TR/xlink/#link-behaviors"&gt;XLink &lt;code&gt;show&lt;/code&gt; attribute&lt;/a&gt;, and the currently supported values--&lt;code&gt;replace&lt;/code&gt; and &lt;code&gt;new&lt;/code&gt;--come from that...as does &lt;code&gt;embed&lt;/code&gt;. In other words, all we're suggesting here is that XForms supports a little bit more of &lt;a href="http://www.w3.org/TR/xlink/"&gt;XLink&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As it happens, our first version of this functionality achieved it using raw XLink, but the problem is that XLink says nothing about &lt;em&gt;when&lt;/em&gt; to load the sub-form. Once we started looking at attaching event listeners, we quickly came to the conclusion that &lt;code&gt;load&lt;/code&gt; was much more appropriate, particularly because it already made use of XLink.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;However we do this in the future, and whatever mark-up is used, XForms definitely provides the hooks for a flexible way to build complex forms on the fly. Defining the loading of sub-forms using declarative mark-up makes it intuitive for authors to use this feature, and makes the management of the components much easier.&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/webapps" rel="tag"&gt;webapps&lt;/a&gt; | &lt;a href="http://technorati.com/tag/programming" rel="tag"&gt;programming&lt;/a&gt; | &lt;a href="http://technorati.com/tag/web+standards" rel="tag"&gt;web standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/standards" rel="tag"&gt;standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/browser" rel="tag"&gt;browser&lt;/a&gt; | &lt;a href="http://technorati.com/tag/cdf" rel="tag"&gt;CDF&lt;/a&gt; | &lt;a href="http://technorati.com/tag/compound+documents" rel="tag"&gt;Compound Documents&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xml" rel="tag"&gt;XML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/HTML" rel="tag"&gt;HTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML" rel="tag"&gt;XHTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML2" rel="tag"&gt;XHTML 2&lt;/a&gt; | &lt;a href="http://technorati.com/tag/w3c" rel="tag"&gt;W3C&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xforms" rel="tag"&gt;XForms&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xinclude" rel="tag"&gt;XInclude&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xforms" rel="tag"&gt;XForms&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-115447268886338452?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/115447268886338452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=115447268886338452' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115447268886338452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115447268886338452'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/08/using-subforms-in-xforms.html' title='Using subforms in XForms'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-115411206451630082</id><published>2006-07-28T15:46:00.000Z</published><updated>2006-08-24T03:16:54.393Z</updated><title type='text'>Why Microsoft might not embrace XHTML (and then again they might)</title><content type='html'>As usual I've had my thoughts provoked by Kurt Cagle. I missed the post originally, but T. V. Raman pointed out to me that a month or so ago Kurt wrote about &lt;a href="http://www.oreillynet.com/xml/blog/2006/05/why_xhtml_can_save_internet_ex.html"&gt;why Microsoft should embrace XHTML&lt;/a&gt;. Actually, the post is entitled &lt;em&gt;Why XHTML Can Save Internet Explorer&lt;/em&gt;, but since I'm not really sure what IE is being saved &lt;em&gt;from&lt;/em&gt;, I'm sticking to Kurt's main point which is that IE developers have an opportunity to move their browser on, but only if they embrace XHTML.&lt;br /&gt;&lt;br /&gt;I think there is a lot of merit in Kurt's argument, but it might not be as clear cut as he presents; I certainly think that if the W3C was to get its act together and &lt;a href="http://internet-apps.blogspot.com/2006/07/rich-web-application-backplane.html"&gt;turn its collection of disparate languages into a coherent whole&lt;/a&gt;, then XHTML could be a serious challenger to XAML, and that might make it less attractive for Microsoft to support.&lt;br /&gt;&lt;br /&gt;Of course, it might make it &lt;em&gt;more&lt;/em&gt; attractive to support, too. Standards are a double-edged sword for the big guys like Microsoft, since they would all ideally like us to only use their proprietary formats, but they generally realise that this isn't the way of the new internet. It's interesting that we haven't heard much about XAML in the recent period, which either means that MS are taking advantage of the 'current obsession with Ajax' to quietly get XAML ready, or they realise that the 'current obsession with Ajax' means that people actually like standards.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;MIME types&lt;/h2&gt;The core of Kurt's argument is that since a new MIME type is used for XHTML documents (&lt;code&gt;application/xhtml+xml&lt;/code&gt;) then Microsoft can shift to this mark-up language without the usual fear of 'legacy' problems.&lt;br /&gt;&lt;br /&gt;Kurt's argument is exactly right, and it's the basic reason for the separate MIME type in the first place. It's also worth stressing that this is also the reason why people such as Ian Hixie have for a long time urged a clean separation between HTML and XHTML, and &lt;a href="http://hixie.ch/advocacy/xhtml"&gt;discouraged people from using incorrect MIME types&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Sidewinder&lt;/h2&gt;The 'separate paths' approach is interesting to me also, since it is what has allowed us to support the &lt;code&gt;application/xhtml+xml&lt;/code&gt; MIME type in &lt;a href="http://skimstone.x-port.net/about-sidewinder"&gt;Sidewinder&lt;/a&gt;, our rich web application client.&lt;br /&gt;&lt;br /&gt;With Sidewinder installed, Internet Explorer will advertise to web servers that it supports XHTML documents. Should a server actually send one, then Sidewinder will be invoked to do the work of processing it, and will run embedded in the browser. In this it is no different to how you might interact with a PDF file, for example, but we generally don't tend to think of documents from the HTML family as being as distinct as a Word document or an Excel spreadsheet; having separate MIME types for the different branches of HTML allows us to treat them in this way.&lt;br /&gt;&lt;br /&gt;Although Sidewinder runs within IE, it manages its own communications (via the impressive &lt;a href="http://curl.haxx.se/libcurl/"&gt;libCURL&lt;/a&gt; open source library), and this makes Sidewinder independent of the browser framework, which in turn means we can do all sorts of things with the document during processing.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;XHTML Compound Document Validation&lt;/h3&gt;For example, Sidewinder validates the XHTML document being loaded; we use schemas created using the principles in &lt;a href="http://www.w3.org/TR/xhtml-modularization/"&gt;XHTML 1.1 Modularisation&lt;/a&gt;, with extension modules that provide support for XForms, RDFa and SVG. (The skimstone site has &lt;a href="http://skimstone.x-port.net/node/179"&gt;more information about the schemas used in Sidewinder&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;XHTML Compound Document Rendering&lt;/h3&gt;As well as validating compound documents, Sidewinder can render them; if you have installed one or more of:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;the Adobe SVG Viewer;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;our own formsPlayer;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Design Science's MathPlayer&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;then compound documents that include SVG, XForms and MathML will be completely rendered.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;XHTML as a web application language&lt;/h2&gt;One of the reasons we've developed Sidewinder in the way that we have is that we believe that building internet-facing applications is made much easier by using internet-related languages.&lt;br /&gt;&lt;br /&gt;It would be unusual today for a desktop application to be independent of the internet; even an accounts package will use the web to save data, retrieve news items about your industry, and automatically obtain upgrades. But it doesn't just 'connect' to the internet; most modern applications use an embedded web browser at some point to render reports and forms, making the connection between an application and web-focused technologies extremely tight.&lt;br /&gt;&lt;br /&gt;The growth in the list of impressive web applications that cover email, spreadsheets, online chat, and so on, demonstrates that even with the current limitations of HTML, it can still be cajolled into making software people want to use. But everything we're working on--from software like Sidewinder, to our involvement in standards organisations--is about saying "why stop here"; why not make XHTML even better for building internet applications?&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Advancing XHTML&lt;/h2&gt;In our view, if the mark-up is powerful enough, at a certain point it becomes a lot easier to build these kinds of applications using XHTML and XForms than it is to create them with C++ or Java. This is partly because the languages are internet-oriented, but also due to their &lt;a href="http://www.w3.org/2006/Talks/05-24-steven-declarative/"&gt;declarative nature&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Sidewinder is a &lt;a href="http://skimstone.x-port.net/node/184"&gt;framework that makes this even easier&lt;/a&gt;; it provides a desktop environment in which to run XHTML and JavaScript applications, with dockable windows, autohiding, transparency, and so on. (It's even possible to run &lt;a href="http://skimstone.x-port.net/node/317"&gt;applications that are Javascript-only&lt;/a&gt;.) Sidewinder provides a rich &lt;em&gt;container&lt;/em&gt; for web applications, but we're actively pushing standard mark-up languages as far as we can,  to make them deliver the kind of functionality that is needed.&lt;br /&gt;&lt;br /&gt;(Some other features of our approach are discussed in &lt;a href="http://internet-apps.blogspot.com/2006/01/web-20-copernicus-and-spartacus-moving.html"&gt; Web 2.0, Copernicus and Spartacus: Moving the centre of the web&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;XHTML v. XAML&lt;/h2&gt;So to return to Kurt's point, given what XHTML &lt;em&gt;could be&lt;/em&gt;, it's certainly possible that Microsoft won't want to support it at all. It's certainly possible that all of the things that Kurt is talking about--and indeed those that I am talking about, too--&lt;em&gt;will&lt;/em&gt; be implemented, but only in order to support XAML. XAML will be the language of choice for Microsoft, and they will push it for use as both a web application language, and a desktop application language.&lt;br /&gt;&lt;br /&gt;But then the last year or so has been quite a surprise for everyone, and one of the key messages is the groundswell of support for open standards and consistent browsers. In today's climate it would take an incredible marketing effort to 'sell' XAML as the 'new language' of the web, and you do wonder what exactly it would gain them anyway.&lt;br /&gt;&lt;br /&gt;Of course it wouldn't be the first time, but Kurt might just be right. And if he is, then XHTML could really take off.&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/webapps" rel="tag"&gt;webapps&lt;/a&gt; | &lt;a href="http://technorati.com/tag/programming" rel="tag"&gt;programming&lt;/a&gt; | &lt;a href="http://technorati.com/tag/web+standards" rel="tag"&gt;web standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/standards" rel="tag"&gt;standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/browser" rel="tag"&gt;browser&lt;/a&gt; | &lt;a href="http://technorati.com/tag/cdf" rel="tag"&gt;CDF&lt;/a&gt; | &lt;a href="http://technorati.com/tag/compound+documents" rel="tag"&gt;Compound Documents&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xml" rel="tag"&gt;XML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XAML" rel="tag"&gt;XAML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/HTML" rel="tag"&gt;HTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML" rel="tag"&gt;XHTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML2" rel="tag"&gt;XHTML 2&lt;/a&gt; | &lt;a href="http://technorati.com/tag/w3c" rel="tag"&gt;W3C&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xforms" rel="tag"&gt;XForms&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-115411206451630082?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/115411206451630082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=115411206451630082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115411206451630082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115411206451630082'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/07/why-microsoft-might-not-embrace-xhtml.html' title='Why Microsoft might not embrace XHTML (and then again they might)'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-115394745370224666</id><published>2006-07-26T20:49:00.000Z</published><updated>2006-08-24T03:14:31.883Z</updated><title type='text'>XHTML 2 and the Semantic Web: Are we nearly there yet?</title><content type='html'>For me one of the more interesting aspects of the new wave of web applications is the way that developers are increasingly seeing the benefits of taking a more 'semantic approach'. By this I mean that instead of creating a menu (for example) from a JavaScript library or a collection of &lt;code&gt;div&lt;/code&gt; elements, authors are more and more using the HTML element that comes closest to what they want, and then using CSS or attached behaviours to achieve the functionality they desire. (In the case of a menu that might be &lt;code&gt;li&lt;/code&gt;.)&lt;br /&gt;&lt;br /&gt;This has many advantages, from improved accessibility, through to easier code development, maintenance and re-use.&lt;br /&gt;&lt;br /&gt;I mention this because an important step along this path is provided by XHTML 2, the next generation of the W3C's XHTML mark-up language, and a &lt;a href="http://www.w3.org/TR/2006/WD-xhtml2-20060726/"&gt;new working draft&lt;/a&gt; has just been made available.&lt;br /&gt;&lt;br /&gt;XHTML 2 takes the ubiquitous mark-up language back to its HTML roots, being both cleaner and more semantic than previous versions. In particular, the incorporation of &lt;a href="/2006/05/rdfa-gathers-momentum.html"&gt;RDFa&lt;/a&gt; and the &lt;a href="/2006/07/xhtml-role-attribute-small-and.html"&gt;&lt;code&gt;role&lt;/code&gt; attribute&lt;/a&gt; position XHTML 2 to provide the &lt;a href="/2005/01/xhtml-2-as-universal-document.html"&gt;'missing link' to the creation of the semantic web&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;(The &lt;code&gt;role&lt;/code&gt; attribute allows systems to understand the &lt;em&gt;purpose&lt;/em&gt; of some mark-up, and so make decisions about providing alternative means to achieve the same end, whilst RDFa is "microformats done right", as &lt;a href="http://www.snee.com/bobdc.blog/2006/03/xhtml_2_for_storing_content.html"&gt;Bob DuCharme said&lt;/a&gt;, and makes it possible to add powerful metadata from any vocabulary, without having to wait for a committee to approve your tags.)&lt;br /&gt;&lt;br /&gt;No doubt this will trigger the usual questions of "will IE10.5/Opera 12/Firefox 3 support XHTML 2?", and of course, the answer is "who knows"! But I would urge anyone involved in building web applications to take a look, since it's the &lt;em&gt;approach&lt;/em&gt; that is most exciting, and it may just give you some ideas to use in your own work.&lt;br /&gt;&lt;br /&gt;The web is changing...&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/webapps" rel="tag"&gt;webapps&lt;/a&gt; | &lt;a href="http://technorati.com/tag/semantic+web" rel="tag"&gt;Semantic Web&lt;/a&gt; | &lt;a href="http://technorati.com/tag/semweb" rel="tag"&gt;semweb&lt;/a&gt; | &lt;a href="http://technorati.com/tag/programming" rel="tag"&gt;programming&lt;/a&gt; | &lt;a href="http://technorati.com/tag/web+standards" rel="tag"&gt;web standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/standards" rel="tag"&gt;standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/browser" rel="tag"&gt;browser&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xml" rel="tag"&gt;XML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/rdf" rel="tag"&gt;RDF&lt;/a&gt; | &lt;a href="http://technorati.com/tag/HTML" rel="tag"&gt;HTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML" rel="tag"&gt;XHTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML2" rel="tag"&gt;XHTML 2&lt;/a&gt; | &lt;a href="http://technorati.com/tag/accessibility" rel="tag"&gt;Accessibility&lt;/a&gt; | &lt;a href="http://technorati.com/tag/wai" rel="tag"&gt;WAI&lt;/a&gt; | &lt;a href="http://technorati.com/tag/w3c" rel="tag"&gt;W3C&lt;/a&gt; | &lt;a href="http://technorati.com/tag/role" rel="tag"&gt;role&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xforms" rel="tag"&gt;XForms&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-115394745370224666?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/115394745370224666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=115394745370224666' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115394745370224666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115394745370224666'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/07/xhtml-2-and-semantic-web-are-we-nearly.html' title='XHTML 2 and the Semantic Web: Are we nearly there yet?'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-115386333162868593</id><published>2006-07-25T20:54:00.000Z</published><updated>2006-07-25T21:51:02.800Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='semanticweb'/><category scheme='http://www.blogger.com/atom/ns#' term='role'/><title type='text'>The XHTML role attribute: small and perfectly formed</title><content type='html'>What, more publications! Indeed it's true.&lt;br /&gt;&lt;br /&gt;The W3C have released the &lt;a href="http://www.w3.org/TR/xhtml-role/"&gt;XHTML Role Attribute Module&lt;/a&gt;. It originated as an idea from T. V. Raman and Steven Pemberton, was then folded into XHTML 2 (although not before I'd managed to sneak a healthy dose of RDF into it), and has now come back out of XHTML 2 as a standalone module. (RDF intact, you'll be pleased to hear.)&lt;br /&gt;&lt;br /&gt;The idea is that it can be used in languages based on &lt;a href="http://www.w3.org/TR/xhtml-modularization/"&gt;XHTML Modularisation&lt;/a&gt;, to provide information about the &lt;em&gt;purpose&lt;/em&gt; of some part of a web page. (The problem with using &lt;code&gt;@class&lt;/code&gt; is that you can't be sure whether the author really means what they say. It's not the author's fault...it's just that @class has been used for many things over the years.)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;@role&lt;/code&gt; has already been well received by both the accessibility community and mobile operators producing content for small devices. Indeed Firefox is &lt;a href="http://developer.mozilla.org/en/docs/Accessible_DHTML"&gt;already implementing and supporting the attribute&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;And it has to be said that it's an ideal spec...one attribute, a few values, a little bit of prose, and then convey the entire idea in one example:&lt;pre&gt;&lt;br /&gt;&amp;lt;ul role="navigation wai:sitemap"&amp;gt;&lt;br /&gt;    &amp;lt;li href="downloads"&gt;Downloads&amp;lt;/li&amp;gt;&lt;br /&gt;    &amp;lt;li href="docs"&gt;Documentation&amp;lt;/li&amp;gt;&lt;br /&gt;    &amp;lt;li href="news"&gt;News&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In fact, the spec is so compact that the list of editors is the longest part. :)&lt;br /&gt;&lt;br /&gt;But as you can see, you really don't need much more than this one example to immediately see that &lt;code&gt;role&lt;/code&gt; can be used for many purposes; from creating accessible content, to triggering server-side transformations of content prior to multi-device delivery.&lt;br /&gt;&lt;br /&gt;I'm looking forward to seeing other uses of this simple idea, and complementary work to produce &lt;a href="http://www.w3.org/WAI/PF/GUI/roleTaxonomy-20060508.html"&gt;a taxonomy for accessible components&lt;/a&gt; is already well advanced, thanks to Lisa Seeman and Richard Schwerdfeger's efforts.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Postscript&lt;/b&gt;: If you work in the area of accessibility, then you are probably already aware that Raman has had &lt;a href="http://news.google.co.uk/news?q=t+v+raman+google+accessibility&amp;hl=en&amp;hs=2Ko&amp;lr=&amp;client=firefox-a&amp;rls=org.mozilla:en-US:official&amp;sa=X&amp;oi=news&amp;ct=title"&gt;far too much press coverage this week&lt;/a&gt;. I won't draw attention to it, since it will only encourage him. Instead, here is a &lt;a href="http://emacspeak.sourceforge.net/raman/hubbell-labrador/ny-www-2004/img_0200.jpg"&gt;link to a picture of his talented dog Hubble, flying an aeroplane&lt;/a&gt;. More pictures are &lt;a href="http://emacspeak.sourceforge.net/raman/hubbell-labrador/ny-www-2004/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/webapps" rel="tag"&gt;webapps&lt;/a&gt; | &lt;a href="http://technorati.com/tag/programming" rel="tag"&gt;programming&lt;/a&gt; | &lt;a href="http://technorati.com/tag/web+standards" rel="tag"&gt;web standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/standards" rel="tag"&gt;standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/browser" rel="tag"&gt;browser&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xml" rel="tag"&gt;XML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/rdf" rel="tag"&gt;RDF&lt;/a&gt; | &lt;a href="http://technorati.com/tag/HTML" rel="tag"&gt;HTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML" rel="tag"&gt;XHTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/accessibility" rel="tag"&gt;Accessibility&lt;/a&gt; | &lt;a href="http://technorati.com/tag/wai" rel="tag"&gt;WAI&lt;/a&gt; | &lt;a href="http://technorati.com/tag/w3c" rel="tag"&gt;W3C&lt;/a&gt; | &lt;a href="http://technorati.com/tag/role" rel="tag"&gt;role&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xforms" rel="tag"&gt;XForms&lt;/a&gt; | &lt;a href="http://technorati.com/tag/flying+dogs" rel="tag"&gt;Flying Dogs&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-115386333162868593?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/115386333162868593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=115386333162868593' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115386333162868593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115386333162868593'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/07/xhtml-role-attribute-small-and.html' title='The XHTML role attribute: small and perfectly formed'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-115340006188137009</id><published>2006-07-20T11:32:00.000Z</published><updated>2006-07-20T13:20:44.480Z</updated><title type='text'>Rich Web Application Backplane</title><content type='html'>I was pleased to see the publication yesterday of a note from the W3C entitled &lt;a href="http://www.w3.org/MarkUp/Forms/2006/backplane/"&gt;Rich Web Application Backplane&lt;/a&gt;. I was involved with the production of this document, writing one of the sections, but the strength of the note comes from the way that Charlie Wiecha has pulled all of the pieces together. It's an early draft, and there is plenty more work to be done, but I think it's a good start.&lt;br /&gt;&lt;br /&gt;The document argues that standardising interfaces and finding common components--what software developers might call factoring--will benefit everyone, particularly if applied to W3C standards. All contributors to the document are people who have pursued, written or spoken about this kind of work, and it's great to see some 'cross-discipline' effort going on.&lt;br /&gt;&lt;br /&gt;Other contributors are:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;John Boyer, co-chair of the W3C XForms Working Group;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Steven Pemberton, co-chair of the W3C XForms Working Group, and chair of the W3C HTML Working Group;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Kevin Kelly, chair of the W3C Compound Document Working Group;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;and Al Gilman, chair of the W3C Protocols and Formats Working Group.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/webapps" rel="tag"&gt;webapps&lt;/a&gt; | &lt;a href="http://technorati.com/tag/programming" rel="tag"&gt;programming&lt;/a&gt; | &lt;a href="http://technorati.com/tag/standards" rel="tag"&gt;standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/browser" rel="tag"&gt;browser&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xml" rel="tag"&gt;XML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/HTML" rel="tag"&gt;HTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML" rel="tag"&gt;XHTML&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-115340006188137009?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/115340006188137009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=115340006188137009' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115340006188137009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115340006188137009'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/07/rich-web-application-backplane.html' title='Rich Web Application Backplane'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-115327521006640642</id><published>2006-07-19T01:46:00.000Z</published><updated>2006-07-25T19:44:36.243Z</updated><title type='text'>Declarative Ajax...Now we're talking!</title><content type='html'>We've been so busy here in the office working on an exciting project for a customer that I haven't had a moment to raise my head above the parapet. I'm desperately trying to find some time to write about how easy it is to use XForms to drive &lt;a href="http://web.openwfe.org/display/openwfe/Home"&gt;OpenWFE&lt;/a&gt; and &lt;a href="http://exist.sourceforge.net/"&gt;eXist&lt;/a&gt;. That's three technologies in one place that I'm besotted by, but it looks like it may have to wait just a little longer before I can write about it.&lt;br /&gt;&lt;br /&gt;(Uncannily, I've just been asked to give a presentation on real-life uses of XML access languages, at a joint meeting of XML UK and the W3C Office for UK and Ireland, so I'm going to talk on "XForms and XQuery, via REST". I'll try to put some slides and sample code up in advance of that.)&lt;br /&gt;&lt;br /&gt;Anyway...the point is that it just shows how busy we are that I completely missed a great post from Duncan Cragg entitled &lt;em&gt;&lt;a href="http://duncan-cragg.org/blog/post/right-way-to-do-ajax-is-declaratively/"&gt;The Right Way to do Ajax is Declaratively&lt;/a&gt;&lt;/em&gt;! What more can I say? Duncan's own views are, as always, very interesting, and what's more it contains a large number of links that are jumping-off points to lots of other articles and presentations on the subject.&lt;br /&gt;&lt;br /&gt;I think it's well worth a look if you haven't already seen it, and is a useful summary of some of the ideas and software that are becoming important.&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/webapps" rel="tag"&gt;webapps&lt;/a&gt; | &lt;a href="http://technorati.com/tag/programming" rel="tag"&gt;programming&lt;/a&gt; | &lt;a href="http://technorati.com/tag/standards" rel="tag"&gt;standards&lt;/a&gt; | &lt;a href="http://technorati.com/tag/browser" rel="tag"&gt;browser&lt;/a&gt; | &lt;a href="http://technorati.com/tag/workflow" rel="tag"&gt;Workflow&lt;/a&gt; | &lt;a href="http://technorati.com/tag/openwef" rel="tag"&gt;OpenWFE&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xml" rel="tag"&gt;XML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/xml+databases" rel="tag"&gt;XML Databases&lt;/a&gt; | &lt;a href="http://technorati.com/tag/HTML" rel="tag"&gt;HTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XHTML" rel="tag"&gt;XHTML&lt;/a&gt; | &lt;a href="http://technorati.com/tag/XQuery" rel="tag"&gt;XQuery&lt;/a&gt; | &lt;a href="http://technorati.com/tag/eXist" rel="tag"&gt;eXist&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8029070-115327521006640642?l=internet-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://internet-apps.blogspot.com/feeds/115327521006640642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8029070&amp;postID=115327521006640642' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115327521006640642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8029070/posts/default/115327521006640642'/><link rel='alternate' type='text/html' href='http://internet-apps.blogspot.com/2006/07/declarative-ajaxnow-were-talking.html' title='Declarative Ajax...Now we&apos;re talking!'/><author><name>Mark Birbeck</name><uri>https://profiles.google.com/113414575693949302488</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-ovMRrEdz7qs/AAAAAAAAAAI/AAAAAAAAAGE/Z2SRuaOARrQ/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8029070.post-114874702760132576</id><published>2006-05-27T13:16:00.000Z</published><updated>2006-05-27T16:41:01.146Z</updated><title type='text'>RDFa Gathers Momentum</title><content type='html'>In the past couple of weeks myself, Ben Adida and Steven Pemberton have had the opportunity to present on RDFa in a number of different forums, and I have to say that RDFa rose to the challenge and showed itself to be sufficiently mature for primetime. In particular, people found compelling the fact that RDFa can make use of &lt;em&gt;any&lt;/em&gt; existing vocabulary, yet is no more difficult to mark up than ordinary XHTML.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Reusing vocabularies&lt;/h2&gt;The web is a decentralised medium, and this applies not just to web pages but also to things like vocabularies (or taxonomies). For example, librarians will have one set of terms they want to use in their documents, and structural engineers another. Just as the architecture and philosophy of the web says that anyone can set up a web-server and start publishing web-pages, so too people and organisations need to have full control over the 'publication' of vocabularies that are applicable to their industries.&lt;br /&gt;&lt;br /&gt;This means that any solution to the problem of putting metadata into XHTML must look at how to provide a generic solution into which people can put their own terms. It took a lot of work to get here, but RDFa does exactly this.&lt;br /&gt;&lt;br /&gt;I was particularly pleased that a number of attendees at &lt;a href="http://skimstone.x-port.net/node/341"&gt;my talk at XTech 2006&lt;/a&gt; found this aspect of RDFa to be significant, particularly because many of them had grappled with the problems of using very syntax-specific formats such as microformats. &lt;a href="http://xtech06.usefulinc.com/schedule/detail/148"&gt;Ryan King's presentation&lt;/a&gt; just before me explained the microformat approach, and outlined simple rules that should be followed to control the production of vocabularies. But trying to control and centralise an inherently uncontrollable and decentralised process is surely doomed.&lt;br /&gt;&lt;br /&gt;(And, if I might say in passing...perhaps a little patronising! Many vocabularies and taxonomies are produced by specialists in their field who have been doing this kind of work for years; it is unlikely that laymen would be able to produce a pharmaceutical or architectural microformat, for example.)&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;The mark-up&lt;/h2&gt;What also surprised people at the various sessions was how simple RDFa is. Of course, it can also be complex, since it has the power to cope with all of RDF. This was a key requirement in the design, since organisations such as the &lt;a href="http://www.iptc.org/"&gt;IPTC&lt;/a&gt; needed to have a way to put complex metadata into their &lt;a href="http://www.newsml.org/"&gt;NewsML&lt;/a&gt; documents, and we were keen to get them using RDFa! To achieve that we ensured that the same techniques used to mark-up their NewsML documents could also work in other langauges such as XHTML.&lt;br /&gt;&lt;br /&gt;But just because RDFa has this power it doesn't mean that it makes the easy things difficult. In fact another key design feature of RDFa was to leverage basic principles of metadata that people already knew--that is, to leverage mindshare.&lt;br /&gt;&lt;br /&gt;There is no need to be scared to innovate, or to avoid introducing new things, and I've never understood why some people seem to make a virtue out of &lt;em&gt;not&lt;/em&gt; innovating--a particularly odd concept in the world of computing and the internet. But it's certainly true that people will find any new ideas a lot easier to use if they can be shown to be based on things that they already understand, and so RDFa does both--it introduces new things, but by building them on things that people already understand, it makes them seem familiar.&lt;br /&gt;&lt;br /&gt;I introduced a couple of these concepts in &lt;a href="http://skimstone.x-port.net/node/341"&gt;my presentation&lt;/a&gt;, the first being that in RDFa &lt;code&gt;meta&lt;/code&gt; and &lt;code&gt;link&lt;/code&gt; can be used anywhere in a document, and the second being that the &lt;code&gt;rel&lt;/code&gt; and &lt;code&gt;rev&lt;/code&gt; attributes need to be dusted off and take their rightful places at the fore.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Meta and link everywhere&lt;/h3&gt;Most people who use XHTML will know that &lt;code&gt;meta&lt;/code&gt; and &lt;code&gt;link&lt;/code&gt; can be used to place metadata into a document. RDFa builds on that knowledge in an intuitive way, but says that &lt;code&gt;meta&lt;/code&gt; and &lt;code&gt;link&lt;/code&gt; can now appear anywhere in a document. For example:&lt;pre&gt;&lt;br /&gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;  &lt;span style="color: red;"&gt;&amp;lt;link rel="dc:source" href="urn:isbn:0140449132" /&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: red;"&gt;&amp;lt;meta property="dc:creator" content="Fyodor Dostoevsky" /&amp;gt;&lt;/span&gt;&lt;br /&gt;  &amp;lt;p&a
