Hello,
Let's say I have an instance data node called MOTHERS_STREET_ADDRESS. I want to
create a constraint that says these characters are illegal: ^ # *( ), but these
are ok . (period) @ &. The xf:caption of the xf:textbox is "Street"
I would like to write rule that looks like:
<rule context="/MOTHERS_STREET_ADDRESS">
<assert><value-of select="xf:caption"/> contains an illegal
character.</assert>
</rule>
AFAIK, "normal" Schematron implementation would produce "Street contains an
illegal character." But XMLForm is vaidating against the data model, not the
form description, so there is no <xf:caption> child to get the <value-of>.
I thought this was big problem last night at 2:30 AM, but now I think I just
need to get more sleep :-) Why not assert "contains an illegal character" and
have some downstream xslt "violation template" append the proper <xf:caption>,
or whatever else is needed . Duh! Of course, each UI widget might have to
invoke a different violation template...
A lesser problem: I want a more detailed message than "contains an illegal
character." This message leaves the user wondering "which character is
illegal?" Period? Ampersand?, Number-sign (#)?. I wish there were a way to
produce:
Street cannot contain a "#" or "Street cannot contain a "^"; or Street
cannot contain a "(" etc.
without resorting to:
<assert test="not(contains(.,'*')">Street cannot contain an asterisk
(*)</assert>
<assert test="not(contains(.,'^')">Street cannot conatain a caret
(^)</assert>
<assert test="not(contains(.,'(')">Street cannot contain a parenthesis "
("</assert>...etc.
which would become very tedious with a large number of exceptions.
But this is maybe asking too much of Schematron?
<snip>
>If we make ai18n-enabled form then this approach can be a problem as we
>should have translations for all the possible cases and values. Haven't yet
>time to investigate the possibilities better, but I think that one can use
>dictionary keys instead of a real message, e.g.:
><rule context="/email">
> <assert test="contains( string(.),'@')">
> error.email.wrongformat
> </assert>
></rule>
>
>and have a translation like this in dictionary:
><message key="error.email.wrongformat">Wrong email format. Email should look
>like {0}.</message>
>
>then have this in the form:
><i18n:translate>
> <i18n:text><xf:violation ref="/email"/></i18n:text>
> <i18n:param>[EMAIL PROTECTED]</i18n:param>
></i18n:translate>
>
>The other problem here would be to know what are the needed params for a
>particular case.
</snip>
Didn't get the part about "needed params". Haven't had time to study the i18n
stuff yet, but all this looks *very* cool.
Cheers,
--Michael
"Konstantin
Piroumian" To: <[EMAIL PROTECTED]>
<kpiroumian@apach cc:
e.org> Subject: Re: [Announcement] XMLForm
0.8.2 released
05/16/02 04:50 AM
Please respond to
cocoon-dev
Hi!
From: <[EMAIL PROTECTED]>
>
I'd like to comment on this:
>
> Do you plan to support Schematron <report> element? Would make it easier
to
> 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".
>
> Is there any way to implement Schematron <name> and <value-of> elements?
Since
> XMLForm validates against instance data rather than the entire form
description,
> I don't see how it can retrieve this sort of context. Still, it would be
nice
> to be able to write rules like this:
> <name ref="../xf:caption> cannot contain <value-of select
> ="/some/xpath/expression">
> to produce a violation like this:
> "Street Name cannot contain a "$"
If we make ai18n-enabled form then this approach can be a problem as we
should have translations for all the possible cases and values. Haven't yet
time to investigate the possibilities better, but I think that one can use
dictionary keys instead of a real message, e.g.:
<rule context="/email">
<assert test="contains( string(.),'@')">
error.email.wrongformat
</assert>
</rule>
and have a translation like this in dictionary:
<message key="error.email.wrongformat">Wrong email format. Email should look
like {0}.</message>
then have this in the form:
<i18n:translate>
<i18n:text><xf:violation ref="/email"/></i18n:text>
<i18n:param>[EMAIL PROTECTED]</i18n:param>
</i18n:translate>
The other problem here would be to know what are the needed params for a
particular case.
Regards,
Konstantin
>
> 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]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]