<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.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" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-6819462794293857673</id><updated>2012-05-30T13:56:56.762-07:00</updated><category term="scala" /><category term="javascript" /><category term="General" /><category term="coffeescript" /><category term="News" /><category term="xtech" /><category term="xforms" /><title type="text">Orbeon Forms — XForms Everywhere</title><subtitle type="html">Web Forms for the Enterprise, Done the Right Way</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.orbeon.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.orbeon.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default?start-index=26&amp;max-results=25" /><author><name>Orbeon</name><uri>http://www.blogger.com/profile/01293304925754192850</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_E4TwuERt52E/SwdYHeo5cII/AAAAAAAAAAU/dGmtfP18UL8/S220/Picture_1_bigger.png" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>237</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/xml-web-apps" /><feedburner:info uri="xml-web-apps" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-3980475887148533097</id><published>2012-05-30T11:26:00.002-07:00</published><updated>2012-05-30T13:55:25.920-07:00</updated><title type="text">What happens after users fill out a form?</title><content type="html">Orbeon Forms focuses on making it easy for form authors to create and deploy forms, and for end users to fill out those forms. When you create and deploy a form with Form Builder, you get the URL of a &lt;i&gt;new page&lt;/i&gt; for that form. You can point users to that page, so they can fill out the form.&lt;br /&gt;
But what happens when users are done filling out the form? There are several ways to setup Orbeon Forms, but we’ll cover here the common use case where you want to have a &lt;i&gt;Submit&lt;/i&gt; button that:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Saves the data in a database, per your configuration. (For more details, see which &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/form-runner/persistence-api#TOC-Existing-persistence-layers"&gt;databases Orbeon Forms supports&lt;/a&gt; out of the box.)&lt;/li&gt;
&lt;li&gt;Takes users to another page.&lt;/li&gt;
&lt;/ol&gt;
You can do this by setting the following 3 properties. If you haven’t setup properties before, you might find this &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/configuration-properties"&gt;overview of properties useful&lt;/a&gt;.&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;property as="xs:string"  name="oxf.fr.detail.buttons.*.*" value="submit"/&amp;gt;
&amp;lt;property as="xs:string"  name="oxf.fr.detail.submit.buttons.*.*" value="go"/&amp;gt;
&amp;lt;property as="xs:string"  name="oxf.fr.detail.submit.go.uri-xpath.*.*"
                          value="'http://www.your-site.com/form-submitted'"/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
Let’s go through those 3 properties:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;The first property defines which &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/configuration-properties/configuration-properties-form-runner#TOC-Buttons-on-the-detail-page"&gt;buttons are shown on the form&lt;/a&gt;; here we only include the &lt;i&gt;Submit&lt;/i&gt; button, as this is the one we’re interested in, but you might want to include additional buttons.&lt;/li&gt;
&lt;li&gt;The second property configures the &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/configuration-properties/configuration-properties-form-runner#TOC-Submit-Button"&gt;dialog that shows upon submission&lt;/a&gt;, which you can see in the screenshot below. Here include one button, taking users to a page of your choosing.&lt;/li&gt;
&lt;li&gt;The third property defines the page users are taken to. To put a static value, add single quote inside the double quotes as done here. (The value can also be dynamic: you can provide an XPath expression returning a URL, which runs on the data entered by users.)&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;figure&gt;
&lt;img alt="Dialog upon submission" src="http://4.bp.blogspot.com/-IZd5kuBhwAE/T8Zdeh3ZQuI/AAAAAAAAD8Q/teNeWovyd6I/s400/Screen%2BShot%2B2012-05-30%2Bat%2B10.22.37%2BAM.png" /&gt;
&lt;figcaption&gt;Dialog upon submission&lt;/figcaption&gt;&lt;/figure&gt;



&lt;br /&gt;
What if this form is part of a workflow, and that depending on the data users entered, you want to take them to a different page? Then the &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/configuration-properties/configuration-properties-form-runner#TOC-Workflow-send-button"&gt;&lt;i&gt;workflow send&lt;/i&gt; button&lt;/a&gt; is what you are looking for. To end users, the &lt;i&gt;workflow send&lt;/i&gt; button looks like a regular &lt;i&gt;Submit&lt;/i&gt; button. But it is one that you can configure to do much more; for instance, it can:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Optionally, generate a PDF of the form, with the data entered by users.&lt;/li&gt;
&lt;li&gt;Optionally, send out an email, with the XML data and/or the PDF.&lt;/li&gt;
&lt;li&gt;Optionally, store the XML data and/or the PDF in Alfresco.&lt;/li&gt;
&lt;li&gt;Take the user to a page, either sending the XML data or the PDF to that page.&lt;/li&gt;
&lt;/ul&gt;
The page mentioned in this last step is one you provide. That page receives an HTTP POST with the data entered by users, so you can implement it outside of Orbeon Forms using the technology of your choice (servlet, PHP…). Maybe based on the information entered by users, you can implement it to direct users to the next step in their workflow, which may involve filling out another form. For more details, see the documentation for the &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/configuration-properties/configuration-properties-form-runner#TOC-Workflow-send-button"&gt;&lt;i&gt;workflow send&lt;/i&gt; button&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-3980475887148533097?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/U--dVWdqCVM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/3980475887148533097/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/05/what-happens-after-users-filled-out.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/3980475887148533097" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/3980475887148533097" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/U--dVWdqCVM/what-happens-after-users-filled-out.html" title="What happens after users fill out a form?" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-IZd5kuBhwAE/T8Zdeh3ZQuI/AAAAAAAAD8Q/teNeWovyd6I/s72-c/Screen%2BShot%2B2012-05-30%2Bat%2B10.22.37%2BAM.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/05/what-happens-after-users-filled-out.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-3265967968954700026</id><published>2012-05-23T21:53:00.000-07:00</published><updated>2012-05-23T21:53:20.410-07:00</updated><title type="text">Orbeon Forms 4.0 M1</title><content type="html">Today we released Orbeon Forms 4.0 M1 (Milestone 1). As the name implies, this is &lt;b&gt;not a final release&lt;/b&gt;, but a release aimed at people who want to have a preview of what's going to be in the upcoming 4.0 release and, hopefully, send us some feedback.&lt;br /&gt;
&lt;br /&gt;
Most features planned for 4.0 are in, including:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Form Builder&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;repeats&lt;/li&gt;
&lt;li&gt;nested sections&lt;/li&gt;
&lt;li&gt;live XBL components&lt;/li&gt;
&lt;li&gt;improved and more responsive editor&lt;/li&gt;
&lt;li&gt;custom XML (PE only)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Form Runner&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;improved Liferay support (PE only)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Tons of bug-fixes and improvements!&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
What's not in it?&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Landing pages and some look and feel improvements&lt;/li&gt;
&lt;li&gt;Form Builder IE 8/9 support (so for now use Chrome, Firefox, Safari or Opera)&lt;/li&gt;
&lt;li&gt;Fixes for the remaining issues:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/orbeon/orbeon-forms/issues?milestone=4&amp;amp;state=open"&gt;4.0 M1.2 (internal Milestone)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/orbeon/orbeon-forms/issues?milestone=2&amp;amp;page=1&amp;amp;state=open"&gt;4.0 Release (other remaining issues)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
You can download the builds using these links:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;PE version: &lt;a href="http://download.forge.objectweb.org/ops/orbeon-4.0.0.m1.201205232241-PE.zip"&gt;orbeon-4.0.0.m1.201205232241-PE.zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CE version: &lt;a href="http://download.forge.objectweb.org/ops/orbeon-4.0.0.m1.201205232300-CE.zip"&gt;orbeon-4.0.0.m1.201205232300-CE.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Don't forget to&amp;nbsp;&lt;a href="http://www.orbeon.com/orbeon/fr/orbeon/register/new"&gt;grab a trial license&lt;/a&gt;&amp;nbsp;for the PE version.&lt;br /&gt;
&lt;br /&gt;
Also check the&amp;nbsp;&lt;a href="https://sites.google.com/a/orbeon.com/forms/doc/developer-guide/release-notes/40"&gt;release notes&lt;/a&gt; for 4.0, which are a work in progress.&lt;br /&gt;
&lt;br /&gt;
Please send feedback preferably to the &lt;a href="http://www.orbeon.com/forms/community"&gt;ops-users&lt;/a&gt; list or via &lt;a href="http://twitter.com/orbeon"&gt;twitter&lt;/a&gt; (if short!), or feel free to comment on this blog entry if appropriate.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-3265967968954700026?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/Gd_p4y8OgAM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/3265967968954700026/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/05/orbeon-forms-40-m1.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/3265967968954700026" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/3265967968954700026" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/Gd_p4y8OgAM/orbeon-forms-40-m1.html" title="Orbeon Forms 4.0 M1" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/05/orbeon-forms-40-m1.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-4602022738038268252</id><published>2012-05-22T22:23:00.001-07:00</published><updated>2012-05-22T22:24:35.906-07:00</updated><title type="text">Run modes</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/--CpEHgR95Y8/T7xwz9YcOSI/AAAAAAAAAkQ/DA5iPxRjAX0/s1600/running-hi.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="249" src="http://3.bp.blogspot.com/--CpEHgR95Y8/T7xwz9YcOSI/AAAAAAAAAkQ/DA5iPxRjAX0/s320/running-hi.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
Recently, we implemented support for &lt;i&gt;run modes&lt;/i&gt; in Orbeon Forms.&lt;br /&gt;
&lt;br /&gt;
The idea is not new and it comes down to this: sometimes you want to run Orbeon Forms with development settings, and sometimes with production settings.&lt;br /&gt;
&lt;br /&gt;
So far, to achieve this, you had to play with your &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;properties-local.xml&lt;/span&gt; file, either commenting and uncommenting properties, or maybe switching between property files.&lt;br /&gt;
&lt;br /&gt;
Now, you can simply change your run mode in &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;web.xml&lt;/span&gt;.&amp;nbsp;You can still use the good old&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;properties-local.xml&lt;/span&gt;, which impacts all modes, but you can also use the new&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;properties-local-prod.xml&lt;/span&gt;&amp;nbsp;and&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;properties-local-dev.xml&lt;/span&gt;, which are used depending on the mode.&lt;br /&gt;
&lt;br /&gt;
Orbeon Forms also comes out of the box with slightly different settings depending on the run mode, including:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;whether exceptions are shown to the user&lt;/li&gt;
&lt;li&gt;whether JavaScript and CSS resources are combined and minimized&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Oh, and the feature is&amp;nbsp;&lt;a href="https://github.com/orbeon/orbeon-forms/commit/c4f5c1cb11ea259043a683ccdf8896e209e88e4b"&gt;implemented&lt;/a&gt;&amp;nbsp;in a simple and beautiful way by selecting different internal property files, which in turn include different secondary files. That's&amp;nbsp;just a few lines of code, the rest being toying with property files.&lt;br /&gt;
&lt;br /&gt;
We hope you find this useful!&amp;nbsp;For the specifics, see&amp;nbsp;&lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/run-modes"&gt;the documentation&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-4602022738038268252?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/O5S1p6yD4IY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/4602022738038268252/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/05/run-modes.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4602022738038268252" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4602022738038268252" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/O5S1p6yD4IY/run-modes.html" title="Run modes" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/--CpEHgR95Y8/T7xwz9YcOSI/AAAAAAAAAkQ/DA5iPxRjAX0/s72-c/running-hi.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/05/run-modes.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-8811886247268688325</id><published>2012-05-17T16:47:00.000-07:00</published><updated>2012-05-17T16:47:26.786-07:00</updated><title type="text">Forms access control with Form Builder</title><content type="html">&lt;p&gt;Who can do what with Form Builder? You guessed it: in this post, we&amp;#8217;ll discuss access control, as it relates to Form Builder. More specifically, that question has two facets:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;When it comes to people using Form Builder to create or edit forms, often referred to as &lt;strong&gt;form authors&lt;/strong&gt;, who can create or edit which form?&lt;/li&gt;
&lt;li&gt;When it comes to the &lt;strong&gt;end-users&lt;/strong&gt; of the forms created with Form Builder, who can access which form?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In both cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Permissions are &lt;strong&gt;role-based&lt;/strong&gt;: access isn&amp;#8217;t given based on usernames, but on roles. For instance, for Form Builder permissions (the first case above), you could be defining that only users with the role &lt;code&gt;finance&lt;/code&gt; can access forms in the app &lt;code&gt;payroll&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Users and roles are not defined in Form Builder or Orbeon Forms. Instead, you configure the container (say, Tomcat), in which you&amp;#8217;re running Orbeon to &lt;strong&gt;leverage your existing authentication system&lt;/strong&gt;, say users and roles defined in LDAP. And if you don&amp;#8217;t already have users and roles defined somewhere, Tomcat lets you define them is a simple XML file (&lt;code&gt;tomcat-users.xml&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let&amp;#8217;s get back to the two types of access control mentioned earlier:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Access control to Form Builder itself is done through a property file: &lt;code&gt;form-builder-permissions.xml&lt;/code&gt;. There, you can define which roles have access to which apps, and which forms. This is most often used to partition your forms into group, and give people access to a specific group. For instance, a local government might have different departments, say police, social services, parks, housing… and would like to keep the forms for each department separate. So they will create an app and a role for each department, and will define in &lt;code&gt;form-builder-permissions.xml&lt;/code&gt; that form authors can only access forms of a given app of they have the corresponding role; say, they can only access forms in the &lt;code&gt;social-services&lt;/code&gt; app if they have the &lt;code&gt;social-services&lt;/code&gt; role. For more on this, see how to define &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/form-runner/access-control#TOC-Access-to-specific-apps-forms-in-Form-Builder"&gt;access control to specific apps/forms in Form Builder&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Access control to published forms is a new feature of the upcoming Orbeon Forms 4.0, but you can already give it a try today using a &lt;a href="http://www.orbeon.com/forms/download"&gt;nightly build&lt;/a&gt;. With this new feature, you can, as a form author, define who can access the form you&amp;#8217;re editing right from Form Builder. You do so through a dialog, as shown in the screenshot below. For more on this, see how to define &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/form-runner/access-control#TOC-With-Orbeon-Forms-3.10"&gt;access control for deployed forms with Orbeon Forms 4.0&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;figure&gt;
&lt;img src="http://wiki.orbeon.com/forms/_/rsrc/1311408675345/doc/developer-guide/form-runner/access-control/Screen%20shot%202011-07-23%20at%201.10.30%20AM.png" alt="Screenshot of the Form Builder permissions dialog" /&gt;
&lt;figcaption&gt;Screenshot of the Form Builder permissions dialog&lt;/figcaption&gt;&lt;/figure&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-8811886247268688325?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/1FWSS63jDSw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/8811886247268688325/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/05/forms-access-control-with-form-builder.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/8811886247268688325" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/8811886247268688325" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/1FWSS63jDSw/forms-access-control-with-form-builder.html" title="Forms access control with Form Builder" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/05/forms-access-control-with-form-builder.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-4306272294334758765</id><published>2012-05-08T14:31:00.000-07:00</published><updated>2012-05-08T14:31:37.715-07:00</updated><title type="text">More XForms bindings</title><content type="html">&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://farm1.staticflickr.com/104/315332852_e114657be6.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://farm1.staticflickr.com/104/315332852_e114657be6_m.jpg" width="240" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;i&gt;Photo by&amp;nbsp;&lt;a href="http://www.flickr.com/photos/arfried/315332852/"&gt;preservationgal&lt;/a&gt;&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
In a &lt;a href="http://blog.orbeon.com/2012/05/how-xforms-controls-bind-to-data.html"&gt;previous post&lt;/a&gt;, we covered the basics of controls bindings, where XPath expressions are used to bind a control to XML elements.&amp;nbsp;But it's not always that simple, is it? So now is the time to cover all the cases you can encounter with binding expressions.&lt;br /&gt;
&lt;br /&gt;
First, there is another difference with HTML worth pointing to: if the XML node does not exist, the control becomes non-functional (non-relevant), and appears hidden (or in some implementations grayed out). So it's important to create an instance (XML document) which contains all the elements and attributes your controls are pointing to, unless you want to hide them on purpose.&lt;br /&gt;
&lt;br /&gt;
So now we have covered binding expressions pointing to a &lt;b&gt;single element&lt;/b&gt;, or pointing to &lt;b&gt;nothing&lt;/b&gt;. Are there other possibilities? Well yes!&lt;br /&gt;
&lt;br /&gt;
1. Attributes&lt;br /&gt;
&lt;br /&gt;
Obviously, a control can bind to an XML &lt;b&gt;attribute&lt;/b&gt;&amp;nbsp;too:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:input ref="@tag"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
Here the input field reads and writes to a "tag" attribute:&lt;br /&gt;
&lt;br /&gt;
2. Multiple nodes&lt;br /&gt;
&lt;br /&gt;
What if the XPath expression returns &lt;b&gt;more than one node&lt;/b&gt;? For example, assuming the document from the &lt;a href="http://blog.orbeon.com/2012/05/how-xforms-controls-bind-to-data.html"&gt;previous post&lt;/a&gt;, the following would return &lt;i&gt;two&lt;/i&gt; elements:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:input ref="instance('zoo')/animal/nickname"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
XForms solves this by saying that you just take &lt;i&gt;the first node returned&lt;/i&gt;. Except, that is, for bindings that support multiple nodes. The only control which supports this is&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:repeat&amp;gt;&lt;/span&gt;&amp;nbsp;(but other XForms constructs support multiple nodes:&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:itemset&amp;gt;&lt;/span&gt;,&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:bind&amp;gt;&lt;/span&gt;,&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:header&amp;gt;&lt;/span&gt;, and the&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:insert&amp;gt;&lt;/span&gt;&amp;nbsp;and&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:delete&amp;gt;&lt;/span&gt;&amp;nbsp;actions.&lt;br /&gt;
&lt;br /&gt;
3. Atomic values&lt;br /&gt;
&lt;br /&gt;
What if the binding expression returns &lt;b&gt;something other than a node&lt;/b&gt;, like a number? In XForms 1.1, this was disallowed and the binding would throw an error. XForms 2 changes this because XPath 2 deals more generally with &lt;i&gt;items&lt;/i&gt;, which&amp;nbsp;can be nodes but also &lt;i&gt;atomic values&lt;/i&gt;.&amp;nbsp;Also, and maybe more importantly, there are some&amp;nbsp;interesting use cases to bind to atomic values, in particular with &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:repeat&amp;gt;&lt;/span&gt; and &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:itemset&amp;gt;&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
So XForms 2 says that it's ok to bind to &lt;b&gt;atomic values&lt;/b&gt;. For example this will work:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:input ref="42"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
However, the input control appears read-only, because in XPath it doesn't make sense to &lt;i&gt;write to&lt;/i&gt; an atomic value.&lt;br /&gt;
&lt;br /&gt;
In general, it's not very useful to bind controls such as &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:input&amp;gt;&lt;/span&gt; to atomic values. It's ok for &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:output&amp;gt;&lt;/span&gt;, although that control already had a &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;value&lt;/span&gt; attribute for that purpose. Where this really shines is for repeats or itemsets:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:repeat ref="1 to 10"&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;xforms:output value="."/&amp;gt;&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;/forms:repeat&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
Then there are a couple of &amp;nbsp;things you probably shouldn't do:&lt;br /&gt;
&lt;br /&gt;
1. Binding to text nodes&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:input ref="instance('zoo')/animal/nickname/text()"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
This is allowed but discouraged. Why? First, there might not &lt;i&gt;be&lt;/i&gt; a text node, and then the control won't show. Second, if there is one, and the user enters a blank string, the text node will go away (because XForms and other specifications like the &lt;a href="http://www.w3.org/TR/xpath-datamodel/"&gt;XPath data model&lt;/a&gt; say you can't have empty text nodes), and the control will hide. Not very useful!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Comment nodes and processing instruction nodes&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:input ref="comment()"&amp;gt;&lt;br /&gt;&amp;lt;xforms:input ref="processing-instruction()"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
XForms doesn't prevent you from doing this, but not all implementations might support it, and XForms doesn't say what must happen. Since&amp;nbsp;&lt;a href="https://github.com/orbeon/orbeon-forms/commit/582a5dde74b264786f5d48c148a4b160f3029e27"&gt;recently&lt;/a&gt;, Orbeon Forms allows you do do that, and the control will read and write the comment text or the processing instruction value. It's unlikely you will need that, and it's not guaranteed to be portable between implementations, but at least XForms allows it and if you need it you'll be a happy camper!&lt;br /&gt;
&lt;br /&gt;
Finally, there are things&amp;nbsp;that are outright prohibited:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Binding to elements that contain other elements&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:input ref="instance('zoo')/animal"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
This is not allowed. Why? Probably because there are a few ways this could be understood. For example, the control could read and write text at the beginning of the element, or at the end. Or, it could read the XPath string value, but overwrite everything when writing back! Also, XML Schema doesn't validate values in such elements with so-called &lt;i&gt;complex content&lt;/i&gt;. To make things clearer, XForms says there that if you do that, the binding will throw an error.&lt;br /&gt;
&lt;br /&gt;
2. Binding to a document node&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:input ref="instance('zoo')/.."&amp;gt;&lt;br /&gt;
&amp;lt;xforms:input ref="instance('zoo')/root()"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
This is not allowed.&amp;nbsp;Why? Because in XML it's not possible to have non-blank character data at the top of an XML document, so the control wouldn't be able to write data there. Here again, the binding will throw an error.&lt;br /&gt;
&lt;br /&gt;
In both these prohibited cases, Orbeon Forms now uses its new &lt;a href="http://wiki.orbeon.com/forms/welcome/xforms-error-handling"&gt;error handling behavior&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Please let us know if we missed any aspects of control bindings!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-4306272294334758765?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/gW_6uprgiBY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/4306272294334758765/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/05/more-xforms-bindings.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4306272294334758765" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4306272294334758765" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/gW_6uprgiBY/more-xforms-bindings.html" title="More XForms bindings" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/05/more-xforms-bindings.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-6124464398056166992</id><published>2012-05-02T14:40:00.000-07:00</published><updated>2012-05-08T14:32:35.479-07:00</updated><title type="text">How XForms controls bind to data</title><content type="html">&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/hippie/2475849569/" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://farm4.staticflickr.com/3080/2475849569_514e542c25_m.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;i&gt;Photo by&amp;nbsp;Philippa Willitts&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Take the most basic HTML input field:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;input name="nickname"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
Then, compare to the equivalent XForms:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:input ref="nickname"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
Both look pretty much the same, right? Well yes, but only on the surface!&lt;br /&gt;
&lt;br /&gt;
In HTML, you just specify a &lt;i&gt;name&lt;/i&gt;, which is later used by form submission (or to query form fields). In XForms, on the other hand, the&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;ref&lt;/span&gt;&amp;nbsp;attribute&amp;nbsp;holds &lt;a href="http://blog.orbeon.com/2012/04/xforms-20-goodbye-nodeset.html"&gt;an &lt;i&gt;XPath expression&lt;/i&gt; pointing to zero, one or more XML element or attribute nodes&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Often, XPath binding expressions are very simple and look just like a plain name, like above, where the expression in fact says "under the curent XPath context, point to&amp;nbsp;the XML element called &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;nickname&lt;/span&gt;".&lt;br /&gt;
&lt;br /&gt;
Where are those XML elements defined? In&amp;nbsp;XML documents (called &lt;i&gt;instances&lt;/i&gt; in XForms) defined in the XForms &lt;i&gt;model&lt;/i&gt;. For example:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:model&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;xforms:instance&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;animal&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;nickname&amp;gt;Batman&amp;lt;/nickname&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/animal&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/xforms:instance&amp;gt;&lt;br /&gt;&amp;lt;/xforms:model&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
Because the expressions are XPath, they can be more fancy when needed. In fact they allow you to point&amp;nbsp;to any node in an instance. Consider the more complex:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:instance id="zoo"&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;zoo&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;animal&amp;nbsp;tag="42"&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;nickname&amp;gt;Thika&amp;lt;/nickname&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/animal&amp;nbsp;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;animal&amp;nbsp;tag="43"&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;nickname&amp;gt;Iringa&amp;lt;/nickname&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/animal&amp;nbsp;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;/zoo&amp;gt;&lt;br /&gt;
&amp;lt;/xforms:instance&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
Here we point to a very specific&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;nickname&lt;/span&gt;&amp;nbsp;element:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:input ref="instance('zoo')/animal[@tag = '42']/nickname"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
Now once your control points to a node, what does it do? It is pretty simple:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;When the user enters data into the field, the data is written to the XML document.&lt;/li&gt;
&lt;li&gt;If the data changes in the XML document, the control is updated with that data.&lt;/li&gt;
&lt;/ol&gt;
It's a nice example of the&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller"&gt;MVC pattern&lt;/a&gt;, where the model is made of hierarchical XML documents, the view is made of controls, and where data flows in both directions between model and view.&lt;br /&gt;
&lt;br /&gt;
In &lt;a href="http://blog.orbeon.com/2012/05/more-xforms-bindings.html"&gt;a subsequent post&lt;/a&gt;&amp;nbsp;we cover in more details what kind of things you can bind controls to!&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-6124464398056166992?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/cMaoRmSpyS8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/6124464398056166992/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/05/how-xforms-controls-bind-to-data.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/6124464398056166992" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/6124464398056166992" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/cMaoRmSpyS8/how-xforms-controls-bind-to-data.html" title="How XForms controls bind to data" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/05/how-xforms-controls-bind-to-data.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-8358475752383604937</id><published>2012-04-26T19:42:00.000-07:00</published><updated>2012-04-26T19:42:49.690-07:00</updated><title type="text">Form Runner gets a home page</title><content type="html">&lt;div class="separator" style="clear: both; text-align: left;"&gt;
For every form you create with Form Builder, after you deploy the form, Orbeon Forms exposes two pages:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;A &lt;i&gt;new&lt;/i&gt; page, which end users go to to fill out the form. When a form is filled out and saved, it creates what we refer to as &lt;i&gt;form data&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;A &lt;i&gt;summary&lt;/i&gt; page, which lists all the saved &lt;i&gt;form data&lt;/i&gt; for a given form. Depending on your workflow, access to this page is typically limited to admins or users in charge of processing the submitted &lt;i&gt;form data&lt;/i&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Each one of those pages has its own URL. In a typical deployment, you would link to those pages from a site your users are accustomed to go to. For instance, a city might have a site with a description of the parks in the city, which contains a &lt;i&gt;Reserve picknick area&lt;/i&gt; link, taking citizens to the &lt;i&gt;new&lt;/i&gt; page of a form created with Form Builder.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
There are cases, however, where it is useful to have a list of the deployed forms, without the need to add links to the &lt;i&gt;new&lt;/i&gt; or &lt;i&gt;summary&lt;/i&gt; pages from another site. And this is precisely what the new &lt;a href="http://wiki.orbeon.com/forms/doc/user-guide/form-runner-user-guide/home-page"&gt;Form Runner home page&lt;/a&gt; does.&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-P_1xSgTTzLU/T5n-ikvtxOI/AAAAAAAAD6A/JFSomesS-Fw/s1600/Screen+shot+2011-07-23+at+5.22.18+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="95" src="http://4.bp.blogspot.com/-P_1xSgTTzLU/T5n-ikvtxOI/AAAAAAAAD6A/JFSomesS-Fw/s640/Screen+shot+2011-07-23+at+5.22.18+PM.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
As you can see from the above screenshot, forms listed on the home page depend on the&amp;nbsp;permissions&amp;nbsp;you've been granted. For instance, you may be able to fill out a form, but not to see all the data saved for that form. Or maybe you don't have access at all to a given form, in which case it won't get listed. This permission system is new as well in Form Builder, and we'll cover it in more details in a future post here.&lt;br /&gt;
&lt;br /&gt;
You can already experiment with the new home page today by&amp;nbsp;&lt;a href="http://www.orbeon.com/forms/download"&gt;downloading a nightly build&lt;/a&gt;. And this is just a start: we have big plans to improve this new Form Runner home page to make it even more useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-8358475752383604937?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/xXgvsVapILk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/8358475752383604937/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/04/form-runner-gets-home-page.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/8358475752383604937" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/8358475752383604937" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/xXgvsVapILk/form-runner-gets-home-page.html" title="Form Runner gets a home page" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-P_1xSgTTzLU/T5n-ikvtxOI/AAAAAAAAD6A/JFSomesS-Fw/s72-c/Screen+shot+2011-07-23+at+5.22.18+PM.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/04/form-runner-gets-home-page.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-3120614602000253450</id><published>2012-04-18T22:27:00.000-07:00</published><updated>2012-04-18T22:27:41.770-07:00</updated><title type="text">XForms 2.0: goodbye nodeset</title><content type="html">XForms 1.1 makes a distinction between two commonly-used attributes: &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;ref&lt;/span&gt; and &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;nodeset&lt;/span&gt;. Both are &lt;i&gt;binding&lt;/i&gt;&amp;nbsp;attributes, and they hold an XPath expression pointing to&amp;nbsp;zero, one or more&amp;nbsp;XML element or attribute nodes:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;ref&lt;/span&gt;&amp;nbsp;points to a single node ("single-node binding").&amp;nbsp;Its most frequent use is to bind a&amp;nbsp;control such as&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;xforms:input&lt;/span&gt;&amp;nbsp;to XML data.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;nodeset&lt;/span&gt;&amp;nbsp;points to any number of nodes ("node-set binding"). This is used for example by&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;xforms:repeat&lt;/span&gt;&amp;nbsp;and &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;xforms:itemset&lt;/span&gt;, which iterate over multiple nodes.&lt;/li&gt;
&lt;/ul&gt;
While working on the upcoming&amp;nbsp;XForms 2.0 specification, which fully supports XPath 2.0, the XForms Working Group noticed a problem:&amp;nbsp;&lt;i&gt;node-set&lt;/i&gt;&amp;nbsp;is terminology from XPath 1.0, and XPath 2.0 instead uses the more general notion of&amp;nbsp;&lt;i&gt;sequence&lt;/i&gt;.&amp;nbsp;So keeping&amp;nbsp;an attribute named&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;nodeset&lt;/span&gt;&amp;nbsp;in XForms 2.0 would be quirky!&lt;br /&gt;
&lt;br /&gt;
The good news is that the solution is very simple, because it turns out that having two separate attributes is not necessary in the first place.&amp;nbsp;So the&amp;nbsp;Working Group has decided that XForms 2.0 will&amp;nbsp;use&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;ref&lt;/span&gt;&amp;nbsp;everywhere and deprecate&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;nodeset&lt;/span&gt;, keeping it around for backward compatibility only.&lt;br /&gt;
&lt;br /&gt;
This has the additional benefits of simplifying the XForms syntax and removing a possible source of confusion for form author (e.g. which attribute should you use on &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;xforms:bind&lt;/span&gt;?).&lt;br /&gt;
&lt;br /&gt;
So get used to write:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:repeat &amp;nbsp;ref="foo"&amp;gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:bind &amp;nbsp; &amp;nbsp;ref="bar"&amp;gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:itemset ref="baz"&amp;gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:delete &amp;nbsp;ref="qux&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
Another good news: Orbeon Form already supports "&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;ref&lt;/span&gt;&amp;nbsp;everywhere" since version 3.9, so feel free to drop good old &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;nodeset&lt;/span&gt;!&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-3120614602000253450?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/wsa00zo38eM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/3120614602000253450/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/04/xforms-20-goodbye-nodeset.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/3120614602000253450" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/3120614602000253450" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/wsa00zo38eM/xforms-20-goodbye-nodeset.html" title="XForms 2.0: goodbye nodeset" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/04/xforms-20-goodbye-nodeset.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-7886529208994719239</id><published>2012-04-11T18:44:00.001-07:00</published><updated>2012-04-11T18:44:04.611-07:00</updated><title type="text">Support for repeats lands in Form Builder</title><content type="html">XForms has a rather powerful feature called &lt;i&gt;repeats&lt;/i&gt;, which allows form authors to easily create forms with sets of fields that can occur multiple times. Repeats have always been supported by the XForms engine in Orbeon Forms, and now, they can also be used directly from&amp;nbsp;Form Builder.&lt;br /&gt;
&lt;br /&gt;
For instance, consider the "DMV 14" form, from the Department of Motor Vehicles in California, which allows you to list multiple vehicles. In the&amp;nbsp;&lt;a href="http://apps.dmv.ca.gov/forms/dmv/dmv14.pdf"&gt;paper version of the DMV 14&lt;/a&gt;, the fields for a vehicle have been repeated 3 times, allowing a maximum of 3 vehicles to be entered. This is how things were on paper, and often today still with PDF, but with web forms, we can do much better: we can enable end users to add or remove vehicles, without even having to impose a limit on the number of vehicles users can enter. And of course, what works for vehicles, works for any set of fields you'd like to see repeated.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-Vpi4dz3kfTU/T4YgopH4NlI/AAAAAAAAD4g/tCA7qScu_xk/s1600/Screen+Shot+2012-04-10+at+5.13.04+PM.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-Vpi4dz3kfTU/T4YgopH4NlI/AAAAAAAAD4g/tCA7qScu_xk/s1600/Screen+Shot+2012-04-10+at+5.13.04+PM.png" /&gt;&lt;/a&gt;Imagine you want to create a conference registration form allowing an organization to suggest talks their members can give. For each talk, you'd like to know the presenter, the topic, and the date/time. In Form Builder, you create a &lt;i&gt;repeat&lt;/i&gt;, by clicking on &lt;i&gt;New Repeat&lt;/i&gt; on the side bar, (see screenshot to the right). You then create columns and add fields, as you normally would in grids. The following screenshot shows how this looks like in Form Builder.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-3zzOCef9nYk/T4YgpB8ZM9I/AAAAAAAAD4k/PQjwna6VAb8/s1600/Screen+Shot+2012-04-11+at+5.23.19+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="80" src="http://3.bp.blogspot.com/-3zzOCef9nYk/T4YgpB8ZM9I/AAAAAAAAD4k/PQjwna6VAb8/s640/Screen+Shot+2012-04-11+at+5.23.19+PM.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
When filling out the form, users add new lines as necessary clicking on the + sign.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-Tp3dAqxzly0/T4Ygpu1OMqI/AAAAAAAAD44/qDBJqvOnwvw/s1600/Screen+Shot+2012-04-11+at+5.23.37+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="72" src="http://4.bp.blogspot.com/-Tp3dAqxzly0/T4Ygpu1OMqI/AAAAAAAAD44/qDBJqvOnwvw/s640/Screen+Shot+2012-04-11+at+5.23.37+PM.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Note how the label for the fields, instead of being repeated on each line, show just once in the table header. Such a &lt;i&gt;table layout&lt;/i&gt; works well when you have a few fields repeated. But as the number of fields grows, you'll want to put them on &lt;i&gt;multiple lines&lt;/i&gt;, and it will then be a &lt;i&gt;block of lines&lt;/i&gt; that gets repeated. This is what we did in the following example, creating a total of 6 fields to be repeated:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-XwvdEzQUEl0/T4YgpWow6_I/AAAAAAAAD4w/IYuxWbh-LnQ/s1600/Screen+Shot+2012-04-11+at+5.23.27+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="162" src="http://4.bp.blogspot.com/-XwvdEzQUEl0/T4YgpWow6_I/AAAAAAAAD4w/IYuxWbh-LnQ/s640/Screen+Shot+2012-04-11+at+5.23.27+PM.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Now note how, both in Form Builder (above) and when users fill out the form (below), the labels for the fields show &lt;i&gt;above each fields&lt;/i&gt;, as having them just once in the table header wouldn't work anymore. And all this is automatically handled for you.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-Xn2ubiZTZcQ/T4YgqP5oEqI/AAAAAAAAD5A/Ww7YScyVkz8/s1600/Screen+Shot+2012-04-11+at+5.23.45+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="210" src="http://2.bp.blogspot.com/-Xn2ubiZTZcQ/T4YgqP5oEqI/AAAAAAAAD5A/Ww7YScyVkz8/s640/Screen+Shot+2012-04-11+at+5.23.45+PM.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Repeats in Form Builder will be part of the next release of Orbeon Forms, and if you feel adventurous, you can try them today by &lt;a href="http://www.orbeon.com/forms/download"&gt;downloading a nightly build&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-7886529208994719239?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/vTP71L0ZtY0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/7886529208994719239/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/04/support-for-repeats-lands-in-form.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/7886529208994719239" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/7886529208994719239" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/vTP71L0ZtY0/support-for-repeats-lands-in-form.html" title="Support for repeats lands in Form Builder" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-Vpi4dz3kfTU/T4YgopH4NlI/AAAAAAAAD4g/tCA7qScu_xk/s72-c/Screen+Shot+2012-04-10+at+5.13.04+PM.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/04/support-for-repeats-lands-in-form.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-2294272939922749211</id><published>2012-04-04T12:09:00.000-07:00</published><updated>2012-04-04T12:09:07.917-07:00</updated><title type="text">Asynchronous submissions</title><content type="html">You might not have heard about it, but XForms supports &lt;i&gt;asynchronous submissions&lt;/i&gt; since version 1.1. In fact, XForms 1.1 even made the&amp;nbsp;asynchronous behavior the&amp;nbsp;default, probably because in the browser &lt;a href="http://www.w3.org/TR/XMLHttpRequest/"&gt;XMLHttpRequest&lt;/a&gt; is asynchronous. [1]&lt;br /&gt;
&lt;br /&gt;
So what does it mean for an XForms submission to be asynchronous? Simply that sending the submission (with an action or&amp;nbsp;the&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;submit&amp;gt;&lt;/span&gt;&amp;nbsp;control)&amp;nbsp;doesn't wait for the submission to be fully completed before returning. For example, consider:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;submission&lt;br /&gt;&amp;nbsp; id="save"&lt;br /&gt;&amp;nbsp; ref="instance()"&lt;br /&gt;&amp;nbsp; &lt;b&gt;mode="asynchronous"&lt;/b&gt;&lt;br /&gt;&amp;nbsp; method="post"&lt;br /&gt;&amp;nbsp; replace="instance"/&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;br /&gt;
And then this sequence of actions:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;send submission="save"&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;setvalue ref="foo" value="42"/&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;div&gt;
The &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;send&amp;gt;&lt;/span&gt; action starts the submission with an &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;xforms-submit&lt;/span&gt; event, instance data is prepared, and then an HTTP request is started with that data as payload. "Soon" after, control returns to the action processing, and the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;setvalue&amp;gt;&lt;/span&gt; action runs. The response from the submission may not have yet happened at that point. In fact, if the submission takes a long time (say, seconds or minutes), the submission will just be hanging there, waiting for a response. Once the response arrives, the submission result is processed.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
With a &lt;i&gt;synchronous&lt;/i&gt; submission, on the other hand, the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;setvalue&amp;gt;&lt;/span&gt; action only runs once the response has arrived (or once an error has occurred). So the submission mode matters when you deal with XForms actions and events, and you have to be aware of the difference in processing between the two types of submissions.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
There are useful practical uses to asynchronous submissions, including:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;running background operations, for example autosaving data&lt;/li&gt;
&lt;li&gt;reducing latency, for example loading initial data from multiple services concurrently&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
Background operations are good because they allow the user to continue working with the application while the operation completes.&amp;nbsp;Reducing latency is good for the user because pages load faster.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Now since Orbeon Forms implements submissions on the server, you might wonder how this works!&amp;nbsp;Orbeon Forms checks for pending asynchronous submissions at the end of page initialization and at the start and end of an Ajax request.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
If page initialization or an Ajax request terminates and submission are still pending, the browser is instructed to poll the server from time to time, to check whether pending submissions have completed. Those which have are then handled appropriately.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
You can find more details in the &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/asynchronous-submissions"&gt;documentation on asynchronous submissions&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
[1]&amp;nbsp;Orbeon Forms has so far kept the default to &lt;i&gt;synchronous&lt;/i&gt; for backward compatibility reasons.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-2294272939922749211?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/b8CB8tBOFfE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/2294272939922749211/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/04/asynchronous-submissions.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/2294272939922749211" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/2294272939922749211" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/b8CB8tBOFfE/asynchronous-submissions.html" title="Asynchronous submissions" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/04/asynchronous-submissions.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-3025285784790076595</id><published>2012-03-28T16:34:00.001-07:00</published><updated>2012-03-28T16:35:31.552-07:00</updated><title type="text">TinyMCE control now in Form Builder, with HTML cleanup</title><content type="html">&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Back in February, we were telling you about the &lt;a href="http://blog.orbeon.com/2012/02/new-tinymce-rich-text-editor-with-ipad.html"&gt;new TinyMCE component&lt;/a&gt;. Since then, we have made a couple of important improvements to this component:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;It is now used in &lt;b&gt;Form Builder&lt;/b&gt; when you insert an &lt;i&gt;HTML text&lt;/i&gt; control, instead of the YUI RTE. The screenshot below shows what the TinyMCE control looks like now in Form Builder. (Doesn't it look exactly like the actual TinyMCE control? It does, because it &lt;i&gt;is&lt;/i&gt; the&amp;nbsp;actual TinyMCE control running there in Form Builder.)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-hqr1u4C_JlU/T3Occrj0YHI/AAAAAAAAD3k/b4u9XX7wAww/s1600/Screen+Shot+2012-03-28+at+4.18.39+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-hqr1u4C_JlU/T3Occrj0YHI/AAAAAAAAD3k/b4u9XX7wAww/s1600/Screen+Shot+2012-03-28+at+4.18.39+PM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;The TinyMCE component now does automatic &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/xforms-controls/textarea-control#TOC-HTML-cleanup"&gt;HTML cleanup&lt;/a&gt;. This avoid having a &lt;a href="http://en.wikipedia.org/wiki/Tag_soup"&gt;tag soup&lt;/a&gt;&amp;nbsp;in your data, and, more importantly,&amp;nbsp;&lt;b&gt;improves security&lt;/b&gt; by preventing &lt;a href="http://en.wikipedia.org/wiki/Cross-site_scripting"&gt;XSS&lt;/a&gt; attacks. As a bonus, the code doing the tag soup parsing is now available in a processor: the &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/processors-other#TOC-TagSoup-processor"&gt;TagSoup processor&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-3025285784790076595?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/RX0wx3bgOj8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/3025285784790076595/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/03/tinymce-control-now-in-form-builder.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/3025285784790076595" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/3025285784790076595" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/RX0wx3bgOj8/tinymce-control-now-in-form-builder.html" title="TinyMCE control now in Form Builder, with HTML cleanup" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-hqr1u4C_JlU/T3Occrj0YHI/AAAAAAAAD3k/b4u9XX7wAww/s72-c/Screen+Shot+2012-03-28+at+4.18.39+PM.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/03/tinymce-control-now-in-form-builder.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-5439188419488536911</id><published>2012-03-21T17:40:00.000-07:00</published><updated>2012-03-21T17:41:14.807-07:00</updated><title type="text">Be focused!</title><content type="html">Contrary to what the title might suggest, this isn't a post on personal productivity or self-realization! Instead, we will be talking about &lt;i&gt;keyboard&lt;/i&gt; focus.&lt;br /&gt;
&lt;br /&gt;
We recently made a number of improvements to focus handling in Orbeon Forms, on two fronts:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;The XForms engine is more aware of which control owns focus.&lt;/li&gt;
&lt;li&gt;Focus in/out events are now handling container controls.&lt;/li&gt;
&lt;/ol&gt;
Say you have a group containing two fields:&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;name&lt;/span&gt;&amp;nbsp;and&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;email&lt;/span&gt;, followed by a&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;save&lt;/span&gt;&amp;nbsp;button:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-LLjnwbGyPj0/T2pzC_XNImI/AAAAAAAAAis/sXwQo5Y_-dw/s1600/group-shadow.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-LLjnwbGyPj0/T2pzC_XNImI/AAAAAAAAAis/sXwQo5Y_-dw/s1600/group-shadow.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;br /&gt;
This corresponds to the following simplified XForms:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;group id="name-and-email"&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;input id="name" ref="name"/&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;input id="email" ref="email"/&amp;gt;&lt;br /&gt;
&amp;lt;/group&amp;gt;&lt;br /&gt;
&amp;lt;trigger id="save"/&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
Starting with initial focus on&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;name&lt;/span&gt;, when you navigate from the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;name&lt;/span&gt; field to the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;email&lt;/span&gt;&amp;nbsp;field to the&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;save&lt;/span&gt;&amp;nbsp;button, focus events used to be dispatched as follows:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;DOMFocusOut on&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;name&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;DOMFocusIn on&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;email&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;DOMFocusOut on&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;email&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;DOMFocusIn on&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;save&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
With the recent changes, you are also informed of the fact that focus has left the group:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;DOMFocusOut on&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;name&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;DOMFocusIn on&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;email&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;DOMFocusOut on&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;email&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;DOMFocusOut on&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;name-and-email&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;DOMFocusIn on&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;save&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
Of course this works for DOMFocusIn as well, nested groups, and in fact&amp;nbsp;any grouping control, including repeats, switches, and XBL controls. Focus is not only updated upon the user navigating between controls, but also when the user interface updates following UI refreshes and actions such as &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;setfocus&lt;/span&gt;, &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;setindex&lt;/span&gt;, &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;toggle&lt;/span&gt;, &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;show&lt;/span&gt;/&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;hide&lt;/span&gt;, and &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;insert&lt;/span&gt;/&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;delete&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
This behavior also makes perfect sense for XBL controls which are composites of other XForms controls. Say you have a composite control for dates with multiple fields:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-6JZJk6q2B_c/T2pzWJA-ksI/AAAAAAAAAi0/Ssnww8h-gxg/s1600/fields-shadow.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-6JZJk6q2B_c/T2pzWJA-ksI/AAAAAAAAAi0/Ssnww8h-gxg/s1600/fields-shadow.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
You use this control this way in Orben Forms:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;fr:fields-date ref="date"/&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
From the component user's perspective,&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;fr:fields-date&lt;/span&gt; gets focus in/out events as if the composite control was a a single control. This satisfies the requirements for abstraction that come with XBL components, and in effect works like event retargeting specified by &lt;a href="http://www.w3.org/TR/xbl/"&gt;XBL 2&lt;/a&gt; and the &lt;a href="http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html"&gt;HTML Shadow DOM&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
To learn all the little details, see the &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/xforms-focus"&gt;documentation&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-5439188419488536911?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/IfTuleaSQxk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/5439188419488536911/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/03/be-focused.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/5439188419488536911" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/5439188419488536911" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/IfTuleaSQxk/be-focused.html" title="Be focused!" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-LLjnwbGyPj0/T2pzC_XNImI/AAAAAAAAAis/sXwQo5Y_-dw/s72-c/group-shadow.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/03/be-focused.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-794455382855539163</id><published>2012-03-19T11:48:00.000-07:00</published><updated>2012-03-20T17:27:43.036-07:00</updated><title type="text">The autocomplete gets a new labelref attribute</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-SyjamoE-RO0/T2d2dDCEqMI/AAAAAAAAD2o/-yB9qL_S_o8/s1600/autocomplete.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-SyjamoE-RO0/T2d2dDCEqMI/AAAAAAAAD2o/-yB9qL_S_o8/s1600/autocomplete.png" /&gt;&lt;/a&gt;&lt;/div&gt;
The &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/xbl-components/autocomplete"&gt;autocomplete&lt;/a&gt; is a quite powerful but also fairly involved component. We've looked at how form authors use the autocomplete in Orbeon Forms, and found that in most cases they use it as an &lt;b&gt;alternative to a combo box&lt;/b&gt; or radio buttons, for cases where the number of items to choose from is too large to be displayed in its entirety. The autocomplete then acts as a &lt;b&gt;search interface&lt;/b&gt; to locate one specific item amongst many. In some cases, the number of items is so large, that it not only doesn't make sense to display all the items to users: it also wouldn't be reasonable to load them all in Orbeon Forms, on the server-side. In those cases, as users type in the field, you want the form to make a &lt;b&gt;request to a service&lt;/b&gt; to load the items relevant to what users typed so far. To make that use case easier, last year we &lt;a href="http://blog.orbeon.com/2011/07/improved-autocomplete.html"&gt;introduced the &lt;i&gt;resource&lt;/i&gt; mode&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
But the resource mode had one flaw. To see exactly what it is, let's first backtrack a bit. &lt;i&gt;Items&lt;/i&gt;&amp;nbsp;have two components: the &lt;i&gt;label&lt;/i&gt;, which is shown in the UI, say "California", and the &lt;i&gt;value&lt;/i&gt;, which is stored as part of the form data when users make a selection, say "CA". This is consistent with how things are done in XForms for all XForms selection controls. The trouble is that when users load a form where a value has already been selected, say "CA", we &lt;b&gt;didn't know what to show in the autocomplete&lt;/b&gt;. Of course, you say, &lt;i&gt;show "California"!&lt;/i&gt;&amp;nbsp;But how can the autocomplete know that the label for "CA" is "California"? In &lt;i&gt;resource&lt;/i&gt; mode, form authors give the autocomplete a service allowing the component to find items based on labels; but here we want to do the opposite: find a label based on the value. We could have asked form authors to provide another service, returning the label for a value. But this would have put more burden on form authors and could have caused performance problems on forms with several autocompletes, causing many service calls. So instead, we added a new &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;labelref&lt;/span&gt; attribute, simply pointing to a node in the instance that will be used to store the label, so the component can &lt;b&gt;store both the value and label&lt;/b&gt; of the selected item.&lt;br /&gt;
&lt;br /&gt;
And for those of you using Form Builder, all of this is &lt;b&gt;entirely transparent&lt;/b&gt;. You can forget what you just read about &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;labelref&lt;/span&gt;, as Form Builder will take care of adding that attribute as well as a corresponding node in the instance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-794455382855539163?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/uGW5MOb7x5M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/794455382855539163/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/03/autocomplete-gets-new-labelref.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/794455382855539163" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/794455382855539163" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/uGW5MOb7x5M/autocomplete-gets-new-labelref.html" title="The autocomplete gets a new labelref attribute" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-SyjamoE-RO0/T2d2dDCEqMI/AAAAAAAAD2o/-yB9qL_S_o8/s72-c/autocomplete.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/03/autocomplete-gets-new-labelref.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-2669835165562454601</id><published>2012-03-12T12:22:00.001-07:00</published><updated>2012-03-12T12:22:41.484-07:00</updated><title type="text">More concise XForms</title><content type="html">Recently we &lt;a href="http://lists.w3.org/Archives/Public/public-forms/2012Feb/0030.html"&gt;made a proposal&lt;/a&gt; to the XForms working group to help reduce the size of XForms code.&lt;br /&gt;
&lt;br /&gt;
The XForms syntax is XML-based. When designing an&amp;nbsp;XML vocabulary,&amp;nbsp;it's often &lt;a href="http://stackoverflow.com/questions/33746/xml-attribute-vs-xml-element"&gt;hard to choose&lt;/a&gt; between using elements or attributes. XForms has historically leaned toward using more nested elements [1], which&amp;nbsp;tend to add&amp;nbsp;more markup (you need pointy brackets and closing tags), and more lines (as you tend to indent nested elements for readability).&lt;br /&gt;
&lt;br /&gt;
For example, compare the following HTML:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;select&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;option&amp;gt;French&amp;lt;/option&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;option&amp;gt;English&amp;lt;/option&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;/select&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
with similar [2] XForms:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;select&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;item&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;label&amp;gt;French&amp;lt;/label&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;value&amp;gt;fr&amp;lt;/value&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/item&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;item&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;label&amp;gt;English&amp;lt;/label&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;value&amp;gt;en&amp;lt;/value&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/item&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;/select&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
You notice how &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;label&amp;gt;&lt;/span&gt; and &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;value&amp;gt;&lt;/span&gt; are defined as nested elements and influence a lot the size of the markup.&lt;br /&gt;
&lt;br /&gt;
The programmer community lately seems to have spoken in favor of concision, witness languages like &lt;a href="http://www.ruby-lang.org/"&gt;Ruby&lt;/a&gt;, &lt;a href="http://coffeescript.org/"&gt;CoffeeScript&lt;/a&gt;, and &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt;, and&amp;nbsp;we agree at Orbeon that concision is a great thing when it removes boilerplate and does not come at the cost of readability.&amp;nbsp;So we propose to use more attributes nested text whenever possible. The XForms above becomes then:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;select&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;item label="English"&amp;gt;en&amp;lt;/item&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;item label="French"&amp;gt;fr&amp;lt;/tem&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;/select&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
That's just an illustration of the idea and the next step is to figure out the details, specifically which new attributes to support and where to allow nested text (like in the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;item&amp;gt;&lt;/span&gt; value above). In addition, we propose to use &lt;a href="http://www.w3.org/TR/xslt20/#attribute-value-templates"&gt;attribute value templates (AVTs)&lt;/a&gt;&amp;nbsp;to handle dynamic values and keep the concise syntax. For example, to retrieve the label from localized resources:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;input ref="name" label="{instance('resources')/name}"/&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
The good news is that the working group has &lt;a href="http://lists.w3.org/Archives/Public/public-forms/2012Feb/att-0034/2012-02-29.html"&gt;received the idea positively&lt;/a&gt;&amp;nbsp;so far!&lt;br /&gt;
&lt;br /&gt;
[1] One exception is the &lt;a href="http://www.w3.org/TR/XForms-for-HTML/"&gt;XForms for HTML Working Draft&lt;/a&gt;, which introduces a set of attributes for the purpose of integration with HTML.&lt;br /&gt;
&lt;br /&gt;
[2]&amp;nbsp;To be fair we are not exactly comparing apples and oranges here as HTML doesn't separate label and value for items. So XForms does a little more, but at the (unnecessary) cost of a lot of extra markup.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-2669835165562454601?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/Frvpn97vcJU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/2669835165562454601/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/03/more-concise-xforms.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/2669835165562454601" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/2669835165562454601" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/Frvpn97vcJU/more-concise-xforms.html" title="More concise XForms" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/03/more-concise-xforms.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-8157212639456837544</id><published>2012-02-29T15:36:00.000-08:00</published><updated>2012-02-29T15:38:32.630-08:00</updated><title type="text">Quickly search code on GitHub with Chrome</title><content type="html">You're looking at a project on GitHub, say &lt;a href="https://github.com/orbeon/orbeon-forms/"&gt;Orbeon Forms&lt;/a&gt;, and would like to do a search in that project. GitHub provides a search field, but it searches through everything on GitHub, not just the current project you're looking at. This unless you click on the &lt;i&gt;Advanced Search&lt;/i&gt;&amp;nbsp;icon,&amp;nbsp;in&amp;nbsp;&lt;i&gt;Search for&amp;nbsp;&lt;/i&gt;select &lt;i&gt;Code&lt;/i&gt;, and prefix your search by &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;repo:orbeon/orbeon-forms&lt;/span&gt;. If you're anything like me, you'll find this too time consuming and won't use the GitHub site for searching.&lt;br /&gt;
&lt;br /&gt;
Luckily, if you're using Chrome, there is a shortcut. With that "shortcut" in place, type&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;o hello world&lt;/span&gt; in the location bar, and you'll see:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-kAEnlowwB50/T06wqOY55GI/AAAAAAAAD1Q/gIgdlmKdFho/s1600/Screen+Shot+2012-02-29+at+3.10.06+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-kAEnlowwB50/T06wqOY55GI/AAAAAAAAD1Q/gIgdlmKdFho/s1600/Screen+Shot+2012-02-29+at+3.10.06+PM.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Press enter, and you'll get the results from GitHub. Now &lt;i&gt;that&lt;/i&gt;&amp;nbsp;is something I'd use!&amp;nbsp;All you need to do:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Go to the Chrome settings (&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;⌘,&lt;/span&gt; on OS X).&lt;/li&gt;
&lt;li&gt;In the &lt;i&gt;Search&lt;/i&gt; section (shown below), click on &lt;i&gt;Manage Search Engines&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-MCOGHd9W-ec/T06r4HjmcNI/AAAAAAAAD1A/EfAviXLVOjU/s1600/Screen+Shot+2012-02-29+at+2.49.36+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-MCOGHd9W-ec/T06r4HjmcNI/AAAAAAAAD1A/EfAviXLVOjU/s1600/Screen+Shot+2012-02-29+at+2.49.36+PM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Scroll to the very bottom of that dialog to add a new entry. In the first field enter a descriptive name, say &lt;i&gt;Orbeon Forms source&lt;/i&gt;. In the second, the keyword you'll use as a prefix when doing a search, say &lt;i&gt;o&lt;/i&gt;&amp;nbsp;for Orbeon. (You can pick a more descriptive keyword, but I'm in a rush, so &lt;i&gt;o&lt;/i&gt;&amp;nbsp;it is.) Finally, the last field put:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;https://github.com/search?type=Code&amp;amp;q=repo%3Aorbeon%2Forbeon-forms+%s&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Note the&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;orbeon%2Forbeon-forms&lt;/span&gt;&amp;nbsp;in that URL, which you can change if you'd like to search another GitHub projects. With this, your new custom search engine will look like:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-KEEanrQ3oQI/T06x78SHQ6I/AAAAAAAAD1g/4qSu7_UupEc/s1600/Screen+Shot+2012-02-29+at+3.15.35+PM.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-KEEanrQ3oQI/T06x78SHQ6I/AAAAAAAAD1g/4qSu7_UupEc/s1600/Screen+Shot+2012-02-29+at+3.15.35+PM.png" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Enjoy!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-8157212639456837544?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/EC5zy9J72qs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/8157212639456837544/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/02/quickly-search-code-on-github-with.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/8157212639456837544" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/8157212639456837544" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/EC5zy9J72qs/quickly-search-code-on-github-with.html" title="Quickly search code on GitHub with Chrome" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-kAEnlowwB50/T06wqOY55GI/AAAAAAAAD1Q/gIgdlmKdFho/s72-c/Screen+Shot+2012-02-29+at+3.10.06+PM.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/02/quickly-search-code-on-github-with.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-4140684728953092597</id><published>2012-02-15T09:22:00.000-08:00</published><updated>2012-02-15T09:22:29.756-08:00</updated><title type="text">An improvement to inline JavaScript in actions</title><content type="html">We just implemented a performance enhancement when using JavaScript from XForms,&amp;nbsp;in particular from XBL components.&lt;br /&gt;
&lt;br /&gt;
In Orbeon Forms, you typically call client-side JavaScript from actions&amp;nbsp;with the&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xxf:script&amp;gt;&lt;/span&gt;&amp;nbsp;extension action or with&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xf:action type="javascript"&amp;gt;&lt;/span&gt;&amp;nbsp;(which is now the preferred way). For example, the &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/xbl-components/currency"&gt;Currency&lt;/a&gt; XBL component has a call like this:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xxf:script&amp;gt;&lt;br /&gt;&amp;nbsp; YAHOO.xbl.fr.Currency.instance(this).setfocus();&lt;br /&gt;&amp;lt;/xxf:script&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
Until now if &amp;nbsp;you used more than one instance of the currency component in your page, the inline scripts would be duplicated multiple times on the client.&lt;br /&gt;
&lt;br /&gt;
Now, with this enhancement, each script body is associated a SHA1 hash based on its content, and a given script body is sent to the browser only once. This means less duplication of code.&lt;br /&gt;
&lt;br /&gt;
Here is the documentation on &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/xforms-actions/actions-script-action"&gt;&amp;lt;script&amp;gt; and &amp;lt;action&amp;gt; actions for scripting&lt;/a&gt;. And&amp;nbsp;if you are interested in the implementation, here is the &lt;a href="https://github.com/orbeon/orbeon-forms/commit/d1b026087807b00438500fd64647a3e01d61b370"&gt;git commit&lt;/a&gt;, in particular&amp;nbsp;&lt;a href="https://github.com/orbeon/orbeon-forms/blob/d1b026087807b00438500fd64647a3e01d61b370/src/scala/org/orbeon/oxf/xforms/analysis/PartEventHandlerAnalysis.scala#L37"&gt;PartEventHandlerAnalysis.scala&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-4140684728953092597?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/Hh3uzQ0343M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/4140684728953092597/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/02/improvement-to-inline-javascript-in.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4140684728953092597" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4140684728953092597" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/Hh3uzQ0343M/improvement-to-inline-javascript-in.html" title="An improvement to inline JavaScript in actions" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/02/improvement-to-inline-javascript-in.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-3689355808264525939</id><published>2012-02-14T09:22:00.001-08:00</published><updated>2012-02-14T09:22:58.915-08:00</updated><title type="text">Does XForms need to be implemented natively in browsers?</title><content type="html">&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-4Vihrcf8nxc/TznIHbAKVrI/AAAAAAAADzs/ZDK_KhIqkHY/s1600/200px-HTML5-logo.svg.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-4Vihrcf8nxc/TznIHbAKVrI/AAAAAAAADzs/ZDK_KhIqkHY/s1600/200px-HTML5-logo.svg.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
For as far as we can remember, we've been getting variants of the following question: "&lt;i&gt;Does XForms, as a technology, really have a future? I wonder, as I don't see browsers making any moves to implement it.&lt;/i&gt;"&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
When considering technologies, it is reasonable to worry about their future. But why would one think XForms has no future if it isn't implemented in browsers?&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
In the late 90s and early 2000s, XML technologies were widely imagined to be the foundation on which future web apps would rely. As part of that vision, browser vendors implemented XML parsing, XPath, XSLT transformations, and even CSS styling of XML documents. XForms too was initially designed to nicely fit in that stack.&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
For better or for worse, that XML-centric vision didn't come to fruition. This in particular means that initial efforts to bring XForms to the browser&amp;nbsp;&lt;i&gt;natively&lt;/i&gt;&amp;nbsp;have been abandoned. Instead today's browsers mostly eschew XML and implement improved, faster and more robust versions of the technology stack we had 10 years ago: HTML, CSS, the DOM and other JavaScript APIs, and of course JavaScript itself.&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
In short, in the browser, JavaScript has won and XML has lost,&amp;nbsp;&lt;i&gt;as part of the native browser stack&lt;/i&gt;. It might be disappointing to some, but at&amp;nbsp;Orbeon, we recognized this many years ago. In 2005 already we implemented the first version of our Ajax-based XForms engine, which shipped in&amp;nbsp;&lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/release-notes/30"&gt;Orbeon PresentationServer 3.0&lt;/a&gt;.&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
So the native XForms ship has sailed a long time ago in our opinion. Instead, the web browser has increasingly shown to be&amp;nbsp;a great platform to build all sorts of application and frameworks, and XForms happens to be just one such technology.&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
This situation in fact has great benefits: nobody waits for browser vendors or all web users to upgrade their browsers to use a newer version of jQuery or Ruby on Rails. So&amp;nbsp;&lt;i&gt;not&amp;nbsp;being a native browser technology&lt;/i&gt;&amp;nbsp;allows us to move faster, and you to benefit from improvements sooner (proof: the Orbeon Forms engine still works in IE 6!). It also allows Orbeon to implement a split architecture, where data can reside on the server, while logic run on either the browser or the server, depending on what is the most appropriate.&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
And what about HTML5 forms? Do HTML5 forms mean that XForms is no longer needed? HTML5 contains welcome incremental improvements over what is available in HTML 4: if you are creating very simple forms, HTML forms and a bit of JavaScript will be just fine. Where XForms has a big edge is for creating complex forms, maybe with sophisticated validation logic, or to manage a large number of forms. And needless to say, if you already deal with XML data, XForms will be a perfect match.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-3689355808264525939?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/LXiZHJTOEK0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/3689355808264525939/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/02/does-xforms-need-to-be-implemented.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/3689355808264525939" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/3689355808264525939" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/LXiZHJTOEK0/does-xforms-need-to-be-implemented.html" title="Does XForms need to be implemented natively in browsers?" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-4Vihrcf8nxc/TznIHbAKVrI/AAAAAAAADzs/ZDK_KhIqkHY/s72-c/200px-HTML5-logo.svg.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/02/does-xforms-need-to-be-implemented.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-1929466734873736539</id><published>2012-02-08T10:55:00.000-08:00</published><updated>2012-02-08T10:55:28.186-08:00</updated><title type="text">Orbeon Forms 3.9.1 PE released</title><content type="html">We are happy to announce the release of Orbeon Forms 3.9.1 Professional Edition (PE).&lt;br /&gt;
&lt;br /&gt;
This release is a stable update to Orbeon Forms 3.9.0 PE.&amp;nbsp;It includes over 40 bug-fixes and select low-risk features.&amp;nbsp;For more information, see &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/release-notes/orbeon-forms-391-pe"&gt;the full list of changes&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Orbeon Forms 3.9.1 PE&amp;nbsp;is available immediately from the&amp;nbsp;&lt;a href="http://www.orbeon.com/forms/download"&gt;downloads page&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-1929466734873736539?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/wqnHbmHEPlk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/1929466734873736539/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/02/orbeon-forms-391-pe-released.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/1929466734873736539" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/1929466734873736539" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/wqnHbmHEPlk/orbeon-forms-391-pe-released.html" title="Orbeon Forms 3.9.1 PE released" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/02/orbeon-forms-391-pe-released.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-8063449640254107413</id><published>2012-02-01T17:40:00.000-08:00</published><updated>2012-02-01T17:40:52.967-08:00</updated><title type="text">New TinyMCE rich text editor, with iPad support</title><content type="html">&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Orbeon Forms has supported rich text editing for the longest time, leveraging the &lt;a href="http://developer.yahoo.com/yui/editor/"&gt;YUI 2 RTE&lt;/a&gt;. However, depending on your situation, the RTE isn't always the best editor. For instance, it doesn't support &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;p&amp;gt;&lt;/span&gt; and instead uses &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;, by design. Also, it can't be use on iPads and iPhones, despite &lt;a href="http://www.midwesternmac.com/blogs/jeff-geerling/wysiwyg-editing"&gt;iOS 5 now supporting HTML5's &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;contentEditable&lt;/span&gt;&lt;/a&gt;. For this reason, we created a new component, which uses the &lt;a href="http://www.tinymce.com/"&gt;TinyMCE&lt;/a&gt; WYSIWYG editor, with the&amp;nbsp;&lt;a href="http://thebigreason.com/blog/2008/09/29/thebigreason-tinymce-skin"&gt;thebigreason skin&lt;/a&gt;.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-NKP897XidMU/Tynnxn1_4eI/AAAAAAAADyo/cuLVL-C1F0M/s1600/Screen+Shot+2012-02-01+at+4.10.13+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-NKP897XidMU/Tynnxn1_4eI/AAAAAAAADyo/cuLVL-C1F0M/s1600/Screen+Shot+2012-02-01+at+4.10.13+PM.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
For more details, see the &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/xbl-components/tinymce"&gt;TinyMCE component documentation&lt;/a&gt;. &amp;nbsp;Our thanks go to Teleflex, who &lt;a href="http://www.orbeon.com/support-services/development"&gt;sponsored&lt;/a&gt; the development of this component, as well as Florian Schmitt, who &lt;a href="http://orbeon-forms-ops-users.24843.n4.nabble.com/TinyMCE-integration-migration-to-YUI-3-tp3320637p3341717.html"&gt;contributed&lt;/a&gt; a first implementation.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-8063449640254107413?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/WaUtdAhakTA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/8063449640254107413/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/02/new-tinymce-rich-text-editor-with-ipad.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/8063449640254107413" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/8063449640254107413" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/WaUtdAhakTA/new-tinymce-rich-text-editor-with-ipad.html" title="New TinyMCE rich text editor, with iPad support" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-NKP897XidMU/Tynnxn1_4eI/AAAAAAAADyo/cuLVL-C1F0M/s72-c/Screen+Shot+2012-02-01+at+4.10.13+PM.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/02/new-tinymce-rich-text-editor-with-ipad.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-4167683347428771794</id><published>2012-01-12T11:46:00.000-08:00</published><updated>2012-01-19T14:04:07.148-08:00</updated><title type="text">Use HTML5 placeholders, in XForms</title><content type="html">When a form is first shown to users, text fields are often empty. So why not use that space, to provide some useful information? For instance, the &lt;a href="https://edit.yahoo.com/registration"&gt;Yahoo! Registration&lt;/a&gt; page leverages this technique:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-_MFLj2Y94-U/Tw8wRZwCvuI/AAAAAAAADwM/Z-ImZpHSKcQ/s1600/Screen+Shot+2012-01-12+at+11.09.45+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-_MFLj2Y94-U/Tw8wRZwCvuI/AAAAAAAADwM/Z-ImZpHSKcQ/s1600/Screen+Shot+2012-01-12+at+11.09.45+AM.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
"First name" or "Last name", in this example, are often referred to as &lt;i&gt;placeholders&lt;/i&gt;, and they disappear when you focus on the specific text field. You can get this behavior by implementing it in JavaScript, and in fact this has become quite popular in the last few years. So much so, that a &lt;a href="http://www.w3.org/TR/html5/common-input-element-attributes.html#the-placeholder-attribute"&gt;placeholder&amp;nbsp;attribute&lt;/a&gt; was been added in HTML5; this way, every web site wouldn't have to re-implement this behavior in JavaScript. This HTML5 feature is now supported by all the major browsers (Chrome, Firefox, Safari, Opera), &lt;a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_(HTML5)#Form_elements_and_attributes"&gt;except IE&lt;/a&gt;&amp;nbsp;up to IE9 (IE10 is &lt;a href="http://msdn.microsoft.com/library/hh673546.aspx#HTML5_Forms"&gt;expected to support&lt;/a&gt; the placeholder attribute).&lt;br /&gt;
&lt;br /&gt;
Placeholders are often used:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Like a &lt;b&gt;label&lt;/b&gt;, as in the above example. HTML5 warns against using placeholders as labels, as the information carried by the label won't be shown if the field isn't empty. So only use placeholders as labels in cases where, even if missing, there is little doubt as to the meaning of the fields. You can tell Orbeon Forms to show a label as a placeholder by setting an&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;appearance="minimal"&lt;/span&gt; on the label, as in:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:input ref="first-name"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;xforms:label &lt;b&gt;appearance="minimal"&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; First name&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/xforms:label&amp;gt;&lt;br /&gt;&amp;lt;/xforms:input&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Like a &lt;b&gt;hint&lt;/b&gt;, placing the&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;appearance="minimal&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;"&lt;/span&gt;&amp;nbsp;on the hint, as in:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xforms:input ref="phone"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;xforms:label&amp;gt;Phone number&amp;lt;/xforms:label&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;xforms:hint &lt;b&gt;appearance="&lt;b&gt;minimal&lt;/b&gt;"&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (555) 555-5555&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/xforms:label&amp;gt;&lt;br /&gt;&amp;lt;/xforms:input&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
When using a &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/xforms-controls/input-control#TOC-Placeholder-for-label-and-hint"&gt;placeholder in XForms&lt;/a&gt;, if users access your form with a browser that:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;does supports&lt;/b&gt; HTML5 placeholders, Orbeon Forms leverages that native feature of the browser;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;does not support&lt;/b&gt;&amp;nbsp;HTML5 placeholders,&amp;nbsp;Orbeon Forms simulates it, with JavaScript.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
This way, you as an XForms author don't have to write different code for different browsers, or worry about browser compatibility, and your end users get the same rich user experience, even on browsers that don't support this HTML5 feature.&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/6819462794293857673-4167683347428771794?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/iEL_4D9zW5Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/4167683347428771794/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/01/use-html5-placeholders-in-xforms.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4167683347428771794" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4167683347428771794" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/iEL_4D9zW5Q/use-html5-placeholders-in-xforms.html" title="Use HTML5 placeholders, in XForms" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-_MFLj2Y94-U/Tw8wRZwCvuI/AAAAAAAADwM/Z-ImZpHSKcQ/s72-c/Screen+Shot+2012-01-12+at+11.09.45+AM.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/01/use-html5-placeholders-in-xforms.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-6593061369785645918</id><published>2011-12-07T15:11:00.001-08:00</published><updated>2011-12-14T09:54:00.875-08:00</updated><title type="text">The state of Orbeon Forms, Part 10.2</title><content type="html">&lt;br /&gt;
This is the second and last part of "The state of Orbeon Forms, Part 10", covering the changes that have taken place since the release of Orbeon Forms 3.9 (part 1 is &lt;a href="http://blog.orbeon.com/2011/12/state-of-orbeon-forms-part-101.html"&gt;available here&lt;/a&gt;). This time we focus on Form&amp;nbsp;Builder&amp;nbsp;and Form Runner improvements:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Form Builder&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Access control for deployed forms.&lt;/b&gt;&amp;nbsp;When using Oracle and MySQL, Form Builder can now specify&amp;nbsp;&lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/form-runner/access-control#TOC-Access-control-for-deployed-forms-"&gt;fine-grained role-based access control for deployed forms&lt;/a&gt;. This will have to be implemented for eXist as well.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Services and actions in section templates.&lt;/b&gt;&amp;nbsp;Form Builder services and actions now work within section templates. This is a long-requested feature! See also the&amp;nbsp;&lt;a href="http://wiki.orbeon.com/forms/doc/user-guide/form-builder-user-guide/section-templates"&gt;section templates documentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Conditional actions.&lt;/b&gt;&amp;nbsp;The Form Builder Action Editor now supports Run always/Run on creation only. See also the&amp;nbsp;&lt;a href="http://wiki.orbeon.com/forms/doc/user-guide/form-builder-user-guide/actions"&gt;Action Editor&amp;nbsp;documentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Grids withs more than 4 columns.&lt;/b&gt;&amp;nbsp;Form Builder grids by default have a maximum of 4 columns. You can now optionally allow Form Builder to support more columns with a new&amp;nbsp;&lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/configuration-properties/configuration-properties-form-builder#TOC-Maximum-number-of-columns"&gt;property&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;"Save as".&lt;/b&gt;&amp;nbsp;Form Builder now has a "Save As…" button to save a form definition as a new document.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Form Runner&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;reCAPTCHA.&lt;span style="font-weight: normal;"&gt;&amp;nbsp;reCAPTCHA is now integrated with Form Runner. See&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;a href="http://blog.orbeon.com/2011/12/stop-spammer-by-adding-captcha-to-your.html"&gt;Stop spammers by adding a CAPTCHA to your forms&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Improved persistence configuration.&lt;/b&gt;&amp;nbsp;The main goal is to allow multiple SQL databases, each using its own datasource. See the&amp;nbsp;&lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/release-notes/310#TOC-Form-Runner-persistence-layer-confi"&gt;compatibility notes&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Excel import.&lt;/b&gt;&amp;nbsp;Quickly import form data from an Excel spreadsheet. See&amp;nbsp;&lt;a href="http://blog.orbeon.com/2011/09/excel-import-in-form-runner.html"&gt;Excel import in Form Runner&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Required fields have an asterisk.&lt;/b&gt;&amp;nbsp;See&amp;nbsp;&lt;a href="http://blog.orbeon.com/2011/08/styling-required-fields-with-star.html"&gt;Styling required fields with a star&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Improved Liferay support.&lt;/b&gt;&amp;nbsp;Liferay support had been improved quite a bit for 3.9, and has improved even more since then. In particular, there is a new&amp;nbsp;&lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/admin/deployment-portlet#TOC-Enabling-asynchronous-portlet-conte"&gt;asynchronous portlet content loading mode&lt;/a&gt;&amp;nbsp;which provides better performance with slower browser, and many bug fixes to both the full portlet and the Form Runner proxy portlet.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;XBL sections and grids.&lt;/b&gt;&amp;nbsp;Form Runner sections and grids used to be implemented in XSLT, back when XBL support was not available. They have now been rewritten using XBL. See &lt;a href="https://github.com/orbeon/orbeon-forms/blob/master/src/resources-packaged/xbl/orbeon/section/section.xbl"&gt;section.xbl&lt;/a&gt; and &lt;a href="https://github.com/orbeon/orbeon-forms/blob/master/src/resources-packaged/xbl/orbeon/grid/grid.xbl"&gt;grid.xbl&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Font embedding in PDF files.&lt;/b&gt;&amp;nbsp;See the&amp;nbsp;&lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/configuration-properties/configuration-properties-form-runner?pli=1#TOC-Font-embedding-in-PDF-in-notemplate"&gt;documentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Third-party Alfresco persistence layer.&amp;nbsp;&lt;/b&gt;See this&amp;nbsp;&lt;a href="http://blog.ossgeeks.org/2011/12/alfresco-persistence-layer-for-orbeon.html"&gt;blog post by Alexey&lt;/a&gt;, this&amp;nbsp;&lt;a href="http://www.slideshare.net/alfresco/using-alfresco-and-orbeon-to-implement-a-local-egovernment-portal"&gt;presentation&lt;/a&gt;, and the&amp;nbsp;&lt;a href="https://github.com/fufler/alfresco-persistence-layer"&gt;source on github&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MongoDB persistence layer.&lt;/b&gt;&amp;nbsp;This is still experimental. We got a nice contribution to support form definitions and attachments. See the&amp;nbsp;&lt;a href="https://github.com/orbeon/orbeon-forms/blob/master/src/scala/org/orbeon/oxf/fr/mongdb/MongoDBPersistence.scala"&gt;source&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Form Builder "next"&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Dynamic XForms architecture.&lt;/b&gt;&amp;nbsp;The next version of Form Builder uses a different approach at edit time. See&amp;nbsp;&lt;a href="http://blog.orbeon.com/2011/06/dynamic-xforms-and-new-grid-editor-for.html"&gt;Dynamic XForms and a new grid editor for Form Builder "next"&lt;/a&gt;. This is cool because it is a solid foundation for nested sections, repeats, tabs, and live XBL controls in the builder.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;New cell editor.&lt;/b&gt;&amp;nbsp;A good part of the cell editor (in charge of editing a control's label and hint in particular) is now written in CoffeeScript on the client, the idea being to make it more responsive.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Nested sections.&lt;/b&gt;&amp;nbsp;Some support for nested sections is now in. See also&amp;nbsp;&lt;a href="http://blog.orbeon.com/2011/08/dealing-with-nested-sections-in-form.html"&gt;Dealing with nested sections in Form Builder&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Repeats.&lt;/b&gt;&amp;nbsp;Support for repeats is partially implemented. Some rough edges still have to be handled.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;div&gt;
As usual this does not include bug-fixes and other smaller improvements which you can &lt;a href="https://github.com/orbeon/orbeon-forms/commits/master"&gt;follow on github&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Right now we are working hard on a couple of things, in particular:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Event handling refactoring.&lt;/b&gt; There are some unfortunate bugs related to event handling, especially in relation with XBL, which are hard to fix at the moment. Now that Form Runner sections and grids are implemented in XBL, it has become important to fix those issues. So we are refactoring the code in charge of events to make things easier to maintain.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Form Builder "next".&lt;/b&gt; This is the big piece! We are learning from our experience with Form Builder over the last few years and building on that for the next major release of Orbeon Forms. Things are starting to fall into place.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Enjoy,&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
-The Orbeon Team&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-6593061369785645918?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/S7ZKgpUSmQ0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/6593061369785645918/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2011/12/state-of-orbeon-forms-part-102.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/6593061369785645918" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/6593061369785645918" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/S7ZKgpUSmQ0/state-of-orbeon-forms-part-102.html" title="The state of Orbeon Forms, Part 10.2" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2011/12/state-of-orbeon-forms-part-102.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-8932200974116283311</id><published>2011-12-07T10:20:00.001-08:00</published><updated>2011-12-12T22:51:11.946-08:00</updated><title type="text">The state of Orbeon Forms, Part 10.1</title><content type="html">&lt;i&gt;NOTE: Orbeon Forms 3.9 CE and PE were released in May 2011. This is a major release with&amp;nbsp;&lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/release-notes/39"&gt;lots of improvements&lt;/a&gt;. You might want to check what's new in that version first.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
A lot has been going on since the&amp;nbsp;&lt;a href="http://blog.orbeon.com/2010/10/state-of-orbeon-forms-part-9.html"&gt;last "The state of Orbeon Forms" post&lt;/a&gt;! This means that this new installment, covering improvements since Orbeon Forms 3.9, is in two parts.&amp;nbsp;Here we focus on everything besides Form Builder and Form Runner:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Security, performance and reliability&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;External XML DTDs.&lt;/b&gt; For security reasons, processing and loading of external DTDs when XML validation is turned off (which is in most cases) is disabled by default.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Better XForms error handling.&lt;/b&gt; Some runtime errors are now handled better and allow the XForms engine to continue processing. See also&amp;nbsp;&lt;a href="http://blog.orbeon.com/2011/11/more-resilient-error-handling-in-xforms.html"&gt;More resilient error handling in XForms&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Aggressive caching for all versioned resources.&lt;/b&gt;&amp;nbsp;Until now, only JavaScript and CSS resources that were &lt;a href="http://blog.orbeon.com/2011/05/orbeon-forms-39-aggregating-css-and.html"&gt;aggregated&lt;/a&gt; by the XForms server had aggressive caching settings. Now this is the case for any resources (typically JavaScript, CSS, images) that is versioned. This can lead to better performance if no further caching is implemented downstream (like by an Apache front-end).&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;XForms engine and components&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Native iPhone/iPad date and time widgets.&lt;/b&gt;&amp;nbsp;This is pretty cool.&amp;nbsp;See the &lt;a href="http://blog.orbeon.com/2011/11/orbeon-forms-now-using-native.html"&gt;blog post&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Input "placeholder".&lt;/b&gt;&amp;nbsp;This&amp;nbsp;causes either the label or the hint to appear on the background of the field when it is empty. The native HTML 5 implementation is used when possible. See the &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/xforms-controls/input-control#TOC-Placeholder-for-label-and-hint"&gt;documentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;New default button style.&lt;/b&gt; You know how buttons look different in every browser? We had a solution for this using the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;fr:button&lt;/span&gt;&amp;nbsp;component based on YUI. Unfortunately this component uses JavaScript which causes some performance issues with older versions of IE. So we have now created a new CSS style for standard buttons which does not require Javascript. This is the default now for every standard button created with &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;xforms:trigger&lt;/span&gt;. See also the &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/xforms-controls/trigger-control#TOC-Appearance"&gt;documentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Improved autocomplete.&lt;/b&gt;&amp;nbsp;The autocomplete control is now&amp;nbsp;&lt;i&gt;simpler for end-users&lt;/i&gt; &amp;nbsp;and&amp;nbsp;&lt;i&gt;easier for form authors&lt;/i&gt;.&amp;nbsp;See&amp;nbsp;&lt;a href="http://blog.orbeon.com/2011/07/improved-autocomplete.html"&gt;Improved Autocomplete&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Improved xxf:valid() XPath function.&lt;/b&gt; This function has been updated to handle relevant nodes in the same way that&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;xf:submission&lt;/span&gt;&amp;nbsp;does. See the &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/xforms-xpath-functions#TOC-xxforms:valid-"&gt;documentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;New xxf:custom-mip() function.&lt;/b&gt;&amp;nbsp;This function allows you to retrieve the value of a custom Model Item Property (MIP). See the &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/xforms-xpath-functions#TOC-xxforms:custom-mip"&gt;documentation&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;XPL pipeline engine&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Multiple XSLT outputs.&lt;/b&gt; You can now use &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;xsl:result-document&lt;/span&gt; and the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;output:&lt;/span&gt; scheme in an XSLT transform placed in a pipeline. This allows an XSLT transform to produce multiple resulting documents for further processing in the pipeline.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Architecture&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Scala and CoffeeScript.&lt;/b&gt;&amp;nbsp;Most of the new server-side code is now written in Scala (using 2.9.1) and most of the new client-side code is written in CoffeeScript.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Refactoring.&lt;/b&gt; &lt;a href="https://github.com/orbeon/orbeon-forms/commit/0d77bc3e6351f0cbf14d0fbbb53dcf8a6c8d5689"&gt;Major refactoring&lt;/a&gt; of the XForms engine so-called static state has taken place to support &lt;a href="http://blog.orbeon.com/2011/06/dynamic-xforms-and-new-grid-editor-for.html"&gt;dynamic XForms&lt;/a&gt;, a feature required for Form Builder "next". And more refactoring is on its way!&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;On the side&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;XForms editorial meetings.&lt;/b&gt;&amp;nbsp;Sub-groups in the XForms Working Group have met a few time to progress on XForms 2.0. In particular, we had a&amp;nbsp;three-day meeting in Palo Alto, where good progress was made towards the XForms 2.0 spec.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;div&gt;
This is for the important stuff, not counting numerous bug-fixes and other smaller improvements. If you are interested in the details, please follow the &lt;a href="https://github.com/orbeon/orbeon-forms/commits/master"&gt;commits on github&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Part 2 will focus on Form Builder and Form&amp;nbsp;Runner.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Enjoy,&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
-The Orbeon Team&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-8932200974116283311?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/YFIIwlPWbvk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/8932200974116283311/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2011/12/state-of-orbeon-forms-part-101.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/8932200974116283311" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/8932200974116283311" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/YFIIwlPWbvk/state-of-orbeon-forms-part-101.html" title="The state of Orbeon Forms, Part 10.1" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.orbeon.com/2011/12/state-of-orbeon-forms-part-101.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-8167013431166839533</id><published>2011-12-06T11:13:00.001-08:00</published><updated>2011-12-06T11:53:38.465-08:00</updated><title type="text">Stop spammers by adding a CAPTCHA to your forms</title><content type="html">If you're creating a form only accessible by members of your organization, chances are you're not worried about spammers. On the other hand, if your form is publicly available, and can be accessed anonymously, your form can easily become the target of spammers, hoping someone will read the content they submitted, or that this content will be published online, giving more &lt;a href="http://en.wikipedia.org/wiki/PageRank"&gt;weight&lt;/a&gt; to their site, through &lt;a href="http://en.wikipedia.org/wiki/Spamdexing"&gt;spamdexing&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Luckily, you can easily prevent spammers from exploiting your forms by adding a&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/CAPTCHA"&gt;CAPTCHA&lt;/a&gt;. If you're writing your forms "by hand", in XForms, you can use the&amp;nbsp;&lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/xbl-components/recaptcha"&gt;reCAPTCHA component&lt;/a&gt;. The component used the free&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/ReCAPTCHA"&gt;reCAPTCHA service&lt;/a&gt;, provided by Google, and will show a challenge to your users filling the form, such as:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-iZq0uzkoMZI/Tt5rl1JEhdI/AAAAAAAADhA/L_Wi452L7P0/s1600/captcha.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-iZq0uzkoMZI/Tt5rl1JEhdI/AAAAAAAADhA/L_Wi452L7P0/s1600/captcha.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
If you're creating your form with &lt;a href="http://www.orbeon.com/forms/orbeon-form-builder"&gt;Form Builder&lt;/a&gt;, just enable CAPTCHAs for your form by setting the&amp;nbsp;&lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/configuration-properties/configuration-properties-form-runner#TOC-Captcha"&gt;captcha-related properties&lt;/a&gt;, and &lt;a href="http://www.orbeon.com/forms/orbeon-form-runner"&gt;Form Runner&lt;/a&gt; will take care of the rest for you, making sure that users entered a correct response before they can save or submit data.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-8167013431166839533?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/UsWqFyW2jQs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/8167013431166839533/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2011/12/stop-spammer-by-adding-captcha-to-your.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/8167013431166839533" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/8167013431166839533" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/UsWqFyW2jQs/stop-spammer-by-adding-captcha-to-your.html" title="Stop spammers by adding a CAPTCHA to your forms" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-iZq0uzkoMZI/Tt5rl1JEhdI/AAAAAAAADhA/L_Wi452L7P0/s72-c/captcha.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2011/12/stop-spammer-by-adding-captcha-to-your.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-5065657840650461812</id><published>2011-11-22T17:45:00.001-08:00</published><updated>2011-11-22T18:21:15.932-08:00</updated><title type="text">Orbeon Forms now using native iPhone/iPad date and time widgets, and more</title><content type="html">With &lt;a href="http://gs.statcounter.com/#mobile_vs_desktop-US-monthly-200812-201111"&gt;mobile browsing on the rise&lt;/a&gt;, we set out to better support mobile devices in Orbeon Forms. We are particularly focused on tablets, as the larger real estate provided by those devices makes them more suitable than phone to fill out forms. And for now, we are doing most of our testing on iOS, since, as of this writing, Apple is&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Tablet_computer#Post-PC_tablet_market_share"&gt;dominating the tablet market&lt;/a&gt;, even though we wouldn't be surprised to see Apple's lead erode given &lt;a href="http://gs.statcounter.com/#mobile_browser-US-monthly-200812-201111"&gt;Android overall success in the mobile space&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Over the last few months, we addressed a few smaller cosmetic issues, for instance to leverage iOS 5 &lt;a href="http://johanbrook.com/browsers/native-momentum-scrolling-ios-5/"&gt;native style momentum scrolling&lt;/a&gt; in text areas, or improving the look and usability of the selection control using the menu appearance. In the last few days, we implemented the support for the &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/xforms-controls/input-control#TOC-On-iOS"&gt;native iOS date and time widgets&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-5qZslM9U4U4/TsxTidx6CWI/AAAAAAAADgA/j6dCbYdopfw/s1600/Screen+Shot+2011-11-22+at+4.54.25+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="183" src="http://1.bp.blogspot.com/-5qZslM9U4U4/TsxTidx6CWI/AAAAAAAADgA/j6dCbYdopfw/s200/Screen+Shot+2011-11-22+at+4.54.25+PM.png" width="200" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-IDSoW9-FrM0/TsxTjbaw0QI/AAAAAAAADgI/5buksXqhTaU/s1600/Screen+Shot+2011-11-22+at+4.55.10+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-IDSoW9-FrM0/TsxTjbaw0QI/AAAAAAAADgI/5buksXqhTaU/s200/Screen+Shot+2011-11-22+at+4.55.10+PM.png" width="165" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
And this is just a beginning: we have more improvements targeted at mobile browsers in the pipeline.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-5065657840650461812?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/bvUuarD3jsE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/5065657840650461812/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2011/11/orbeon-forms-now-using-native.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/5065657840650461812" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/5065657840650461812" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/bvUuarD3jsE/orbeon-forms-now-using-native.html" title="Orbeon Forms now using native iPhone/iPad date and time widgets, and more" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-5qZslM9U4U4/TsxTidx6CWI/AAAAAAAADgA/j6dCbYdopfw/s72-c/Screen+Shot+2011-11-22+at+4.54.25+PM.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2011/11/orbeon-forms-now-using-native.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-7444624344054300686</id><published>2011-11-17T13:25:00.001-08:00</published><updated>2011-11-18T13:52:11.429-08:00</updated><title type="text">More resilient error handling in XForms</title><content type="html">What should your application do when a error occurs?&lt;br /&gt;
&lt;br /&gt;
One approach is to let the application crash and burn (errors are not&amp;nbsp;&lt;i&gt;supposed&lt;/i&gt;&amp;nbsp;to happen, right?).&amp;nbsp;This behavior remains typical of many "native" (C/Objective-C/C++) desktop and mobile applications. Your only hope is that the app has some kind of autosave feature, or you have lost your work.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
On the other hand, some applications are more resilient. For example, Java-based apps like the IntelliJ IDE nicely warn you that something wrong occurred but try their best to stay up.&amp;nbsp;Some web applications also try to recover from JavaScript errors.&amp;nbsp;More often that not the error is not fatal, your data is not lost, and you can even continue working as if nothing had happened.&amp;nbsp;This is made easier with languages that use exception handling.&lt;br /&gt;
&lt;br /&gt;
Now the &lt;a href="http://www.w3.org/TR/xforms11/"&gt;XForms spec&lt;/a&gt; takes kind of a tough stance on this. For certain errors (like referring to the wrong model or bind by id, or an error in an XPath expression), the expected behavior is to "halt processing", and this is not even cancelable by the application author.&lt;br /&gt;
&lt;br /&gt;
This behavior is perfectly fine if those errors are found as the app is initializing: in that case, you haven't had a chance to interact with the app and enter data, so typically nothing is lost.&lt;br /&gt;
&lt;br /&gt;
But if those errors occur later, after you have already spent minutes typing in information, the "crash and burn" approach is going to be a source of frustration.&lt;br /&gt;
&lt;br /&gt;
To alleviate this, an "autosave" feature is a great option, and we hope to add this to Form Runner in the future. But what else can be done? Well, break out of the XForms requirement to halt processing is one thing.&lt;br /&gt;
&lt;br /&gt;
And that's exactly what we have done recently: Orbeon Forms now has the ability to recover from many runtime errors. Recovery has a few aspects:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Defaulting to default values.&lt;/b&gt;&amp;nbsp;Example: a control binding using an XPath expression failing at runtime binds to the XPath empty sequence, in effect making the control hidden.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Not producing any result at all.&lt;/b&gt;&amp;nbsp;Example: a&amp;nbsp;value calculated using&amp;nbsp;an XPath expression failing at runtime is ignored.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Interrupting processing locally.&lt;/b&gt;&amp;nbsp;Example: an action encountering an error stops, but further events and user actions are allowed to proceed.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
In all those cases, errors are logged so&amp;nbsp;the developer can be informed and take action. By default, the user also sees an error dialog, which can be dismissed so that further actions, such as saving data, can be attempted.&lt;br /&gt;
&lt;br /&gt;
We think that this change is good for both users and programmers, and we hope that XForms 2 will standardize some of this behavior.&lt;br /&gt;
&lt;br /&gt;
For more details, see the&amp;nbsp;&lt;a href="http://wiki.orbeon.com/forms/welcome/xforms-error-handling"&gt;documentation&lt;/a&gt; for this feature.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6819462794293857673-7444624344054300686?l=blog.orbeon.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/R5u500_oSVE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/7444624344054300686/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2011/11/more-resilient-error-handling-in-xforms.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/7444624344054300686" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/7444624344054300686" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/R5u500_oSVE/more-resilient-error-handling-in-xforms.html" title="More resilient error handling in XForms" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.orbeon.com/2011/11/more-resilient-error-handling-in-xforms.html</feedburner:origLink></entry></feed>

