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]