Michael,

Why don't you consider donating some of your "twisted" examples to the
mount/xmlform sitemap?


----- Original Message -----
From: <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, May 17, 2002 4:16 AM
Subject: Re: [Announcement] XMLForm 0.8.2 released


>
> Ivelin,
>
>
> >Thanks for hammering on XMLForm and sending more valuable feedback.
>
> Glad you understand I'm trying to help make XMLForm better. I plan to
> be much more critical when I get caught up; I've been doing lots of
> twisted things with XMLForm I haven't had time to discuss.  Of course,
> I wouldn't be expending all this effort if I didn't think XMLForm
> was *very* cool:
>       1) Amazing, hard-to-believe, validation speed.  Sometimes I
> validate things just to watch it happen.  Seems 5-10 times faster
> than anything else I have used. Really, really fast.

That was the reason why I've opted to replace the original xslt based
implementation
with a java version. Kudos to Dmitri and his JXPath.

>       2) Easy to learn Schematron rules. I'm not entirely convinced
> Schematron is the total answer, but at least you can get validation
> "up and running" with a minimum of effort.

Exactly. That's the gist of Schematron. Start easy and grow on demand.

>       3) Flexible, loosely coupled violation reporting.  Presentation
> component is just given a <violations> container and can decide for itself
> what to do with its contents: display violations at top of the screen,
> next to widget, inside a javascript alert, within a separate window,
inside
> a pop-up layer, etc, etc. Nice SoC.
>       4) Demo's well.  This is more important than you would think
> because of Cocoon's "unpolished" appearance, lack of documentation,
> white papers, market "presence" etc.  Non-techies aren't interested in
> Cocoon's intellectual beauty.  They just want to see impressive results.

Agreed. Heidi is writing a Howto document, which I can't wait to commit.

>       5) Overall "potential".  I mention this only because I have
> been able to trick XMLForm into doing things you probably never intended
> it to do. This makes me believe that other, more clever individuals
> could develop XMLForm into a really complete forms solution. Sort of
> a "critical app" for the web-application-server side of cocoon.

Very curious to see these "tricks".


>
> But all this is sort of OT...
>
> >> I am having problems writing Schematron rules for multiple-select
widgets.For
> >> example, imagine you have an <xf:selectMany ref="/color"> widget which
> presents
> >> as a set of four checkboxes whose captions are "red", "blue", "green",
and
> >> yellow".  You want to write two validation rules 1) At least one color
must
> be
> >> selected and 2) No more than two colors may be selected.
> >
> >As a side note, you may consider using a radio button group.
>
> I need a many-of-many selector. Radio button group is one-of-many
(selectOne).

Silly me.

>
> >You might not have noticed, but I have patched XMLForm to support
selectMany
> >for multiple select controls,
> >but not for a set of checkboxes. It seemed like a set of checkboxes
cannot
> >be universally rendered because of the layout issue you pointed out
(which
> >side of the box to place the text).
>
> Yeah, didn't notice that.  Don't think you can avoid implementing
selectMany
> as checkbox set.  Almost none of our customers use multiple select listbox
> for selectMany:  they all use checkbox sets.  And the reason is *because*
> of the flexible (i.e., nightmarish) layout possibilities.  You can arrange
> checkbox sets horizontal or vertical, have lots of white-space or
explanatory
> text where needed, align them to arbitrary grids, etc, etc.  The result is
> that they convey information visually better than multiple-select lists.


Understood. I have an idea how to refactor the implementation and patch it
back in.
Will send a notification when ready.

>
> But implementation is painful.
>
> ><xf:repeat nodeset="/color">
> >  <xf:selectBoolean ref="selected"/>
> >  <xf:output ref="displayText"/>
> ></xf:repeat>
>
> >Provided that you have a collection of Color objects with 2 attributes:
> >selected: boolean and
> >displayText: String
>
> Clever.  But shouldn't this just be a collection of simple boolean
objects?
> You're not saying to put displayText (==caption?) in the data model are
you?

Actually the displayText will have to be in the model in order for the
repeat to match the checkboxes correctly to their labels.

>
> >The sample markup can be transformed in whatever layout is desired and it
> >has a predictable serialization to html.
>
> Actually, anything that presents as a uncontained widget (a widget not in
> its own bounding box) creates layout issues.  So select list, multiple
> select-list,
> textarea, and textbox are pretty easy to deal with, because each has its
own
> bounding rectangle circumscribing the content.  But all radio-button sets,
> checkbox
> sets, or boolean widgets have layout issues because they can be rendered
in
> so many ways.  I have seen radio buttons arranged every which way; same
with
> checkboxes.  Even booleans:  "click here to toggle foo" where widget may
be
> above, below, right, or left of caption, and seperated from caption
> by arbitrary amount of "white space" !

True.
We can use the multi box tag as a reality check for introducing such
controls within the framework vs. custom implementations.

>
> <snip />
>
> >If you the example above suites your needs. The rules can be rewritten
to:
> >
> >       <rule context="/">
> >             <assert test="count(color[selected='true'])=1">Exactly one
> >color must be
> > selected.</assert>
> >      </rule>
> >
> >This is a global rule which applies for all nodes and logicly belongs to
the
> >global context.
> >If you need a rule that is specific for each color, then we can think of
a
> >local color context.
>
> I understand your argument about this being a global rule, but I don't
entirely
> agree.  The rule is not about a relationship among completely unrelated
instance
> nodes.  The nodes are part of one logical group (and are often presented
as
> such).
> So a rule that says "CLASS_RANK must be <= CLASS_SIZE" I see as "global"
because
> 1) two different instance nodes and 2) not possible to decide whether to
display
> the violation message near CLASS_RANK widget or near CLASS_SIZE widget.
But
> checkbox
> group is often a logical and visual unit, so even though there *may* be
> different
> instance nodes, it is usually possible to decide where to display
violation
> message.
> Which is just what I want to do:
>
>       <xf:selectMany selectUIType="checkboxGroup">
>             <xf:item>...</xf:item>
>             <violations class="error" />
>       </xf:selectMany>
>
> It seems to me that I should be able to bind a "violations" container to
this
> widget
> without regard to its presentation style (selectUIType).

Agreed. Point taken.


>
> >> Is there a compelling reason to use a SortedSet for violations?
(cursory
> >> examination of code suggests "yes", but...).  Global violations end up
> >sorted
> >> alphabetically.  Makes it difficult to display them in document order
(the
> >> "natural" order IMHO).
>
> >The driving force was that it is easy to enumerate all violations related
to
> >a node when they are kept in a sorted set.
>
> Thought it might be something like that.  But I have this beautiful form
wherein
> all errors are displayed in a nicely formatted section at top of page.
Each
> violation message serves as a link which 1) takes user right to the place
on the
> form where the error occurred, 2) selects the contents of the widget, and
3)
> places
> the text-insert cursor at the appropriate location.  Trouble is, everybody
I
> have
> showed this to expects list of error messages to be in *document* order:
they
> don't
> understand why they are in alphabetical order.  If you retained document
order,
> user could apply <xsl:sort> to impose any order they wish:  once you
destroy
> the original ordering information there is no going back...

Good point.
I was thinking that when you want to highlight the association, you would
place the violations near the
failing fields.
Will consider an implementation which preserves the document order.


>
> >> Do you plan to support Schematron <report> element?  Would make it
easierto
> >> write rules like "/foo is invalid if it contains any of the following
> >> characters: #, &, *, %",  or "/foo may contain only digits 0-9 and
decimal
> >> point".
>
> >>Report is supported. Report is simply a negation of assert.
>
> Just double checked this again.  Report doesn't work for me.  This works:
>       <assert test="contains(not(.,'$'))">
> but this doesn't:
>       <report test="contains(.,'$')">

I've tested it a bit but maybe there is a bug. Feel free to save XMLForm
again :)
The implementation is one line, so I can't immediately see where the problem
might be.


>
> I realize report is just not(assert). But sometimes it is more clear to
describe
> what should *not* be in a field than what *should* be in a field. Like
"any char
> but one of {!,@,#,$,%,^,&,*,(,),_,+.=,-.}"  You may also wish to use
*both*
> assert
> and report, for example /PHONE must *include* {0,1,2,3,4,5,6,7,8,9} and
> *exclude*
> "555" in chars 1-3 (No U.S. phone numbers begin with a "555" exchange).
>
> Does <report> work for you?
>
> >>
> >> Is there any way to implement Schematron <name> and <value-of>
elements?
>
> <snip/>
>
> >You should be able to use xml markup withing the assert and then
transform
> >it into the actual node value.
> >
> ><assert >cannot contain <myns:name/> </assert>
>
> This would be *great* !! But unfortunately, doesn't work for me. Thought
it
> might be because I my tags didn't have their own namespace so I tried:
>       <assert test=".!=''">Please provide a <cnet:some_tag /></assert>
> but the <some_tag> element just gets stripped out (by the validation
> transformer?).

Strange. Not intentional. Maybe another bug that waits to be busted.


Thanks for all your cooperation,

Ivelin



>
>
> Cheers,
> --Michael
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, email: [EMAIL PROTECTED]
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to