Applying XML to Describing User Interface Layouts and Behavior and Constraints.

This is a message I sent to Paul Haberli a several years ago, brainstorming some ideas for an XML based scripting language. More recently, after discovering OpenLaszlo, I ran across this email, and it made me realize why I was so happy to find Laszlo, which embodies many of these ideas!

From: Hopkins, Don [mailto:Hopkins, Don]
Sent: Sunday, November 08, 1998 3:06 AM
To: paul@isdn-balla.corp.sgi.com
Cc: dhopkins@maxis.com
Subject: RE: http://reality.sgi.com/grafica/motion/

I think something cool to do, would be to apply XML to describing user interface layouts and behavior and constraints.

It would have to describe the interfaces and connections between the components, as well as the graphical layout and properties.

It should have a general purpose message passing model that is independant of any scripting language, and you could also embed scripts in the xml in different language like is currently done with html.

But you should be able to do a lot without even resorting to scripts, just hooking components together.

And then if course I want to design a visual programming language in XML.

XML is certainly expressive enough to describe the syntax of a complete programming language.

So we could define a language for describing and invoking interfaces in XML, with some control flow expressions, primitive data types, and basic math and string processing functions.

Something really simple and essential like Lisp, but with XML as the basic code and data type.

I imagine a free form visual graph-like data flow language, less tree structured than Lisp, and manipulating (and representing programs as) xml trees and properties instead of s-expressions.

The signatures of functions and interfaces would all be described by metadata in xml.

So it would be possible to write a good visual editor and browser for the language, and use it to construct and program all kinds of user interfaces.

The user interfaces could be mapped from xml to dynamic html, and there could be other mappings to different user interface platforms.

How would you visually represent lisp's "apply" function, in a visual programming language using icons connected by wires?

You would be able to pass a reference to an icon with disconnected inputs (to be satisfied by apply), along a wire.

Apply would take an input that was a function to be applied, and some more inputs that were the arguments to pass to the function.

Inside the apply icon you might see an image of another icon representing the function passed to apply, and wires going from the inside inputs of apply to the outside inputs of the passed in function. The function passed into apply could change over time, but the signature would have to stay the same, unless the visual language had a way to deal with dynamically reconfiguring the wires between icons! (Or you could simply bundle a variably sized array of arguments in a "cable").