[ink] Streaming Brush Properties

I'm currently working on an SVG+InkML profile, and having reasonable 
success.

Something came up for me:
InkML does suggest that brush properties be left to the implementation:
http://www.w3.org/TR/InkML/#brushElement
"Brushes may be used to convey information... all that matters is that 
brushes are distinct so no brush properties are necessary"

It also provides a mechanism to pass metadata about brushes, through the 
brushProperty element:
http://www.w3.org/TR/InkML/#brushPropertyElement

brushProperty works quite well in archived mode, for brush metadata.

However, it doesn't seem that it's been examined for Streaming mode.
Within a stream, we want to minimize the number of defined brushes, and will
likely build-upon a brush, changing its color, size, etc.

While the channels definition allows for some measure of this kind of 
activity,
it has nothing to offer when it comes to brush property meta data.
....

It seems to me that a stream should be able to re-use and replace the 
definitions
construct. This allows inheritance of existing values across boundaries, 
and setting
boundaries for garbage collection of obsolete element information.

The following example is intended for streaming mode.

It sets up a brush called "mybrush", with three brushProperty elements.
Later on in the stream, it re-uses that brush, with its brushProperty 
elements,
but alters a few of them, changing the value of the first element and 
emptying
the value of the third.

By using <definitions> to clear the defined state stack, we're able to allow
streaming implementations to process an unlimited amount of data without
requiring they keep prior definitions in memory; and we allow them to
reference the prior definition set through inheritance.



Example:

<definitions>
<brush xml:id="mybrush">
<brushProperty name="key1" value="val1" />
<brushProperty name="key2" value="val2" />
<brushProperty name="key2" value="val3" />
</brush>
</definitions>
<context brushRef="#mybrush">
<trace> ..... </trace>
<definitions>
<brush xml:id="mybrush" brushRef="#mybrush">
<brushProperty name="key1" value="newValue" />
<brushProperty name="key3" value="" />
</brush>
</definitions>
<context brushRef="#mybrush">
<trace> ..... </trace>

Received on Wednesday, 30 June 2010 19:59:15 UTC