----- Original Message -----
From: "Torsten Curdt" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>; "Ivelin Ivanov" <[EMAIL PROTECTED]>
Sent: Sunday, March 17, 2002 9:11 AM
Subject: Re: Dynamic Schematron validation works!
> > > 2) AFAIU validation happens inside the XSLT transformer. IMHO this
should
> > > happen inside an action. Otherwise we have to choose what page to
show
> > > from the XML *content*. Only way I see do this is to create another
> > > transformer for this. But still you are not able to react on the
> > > validation result inside the sitemap... Or am I missing here
something?
> > > (Could a transformer set a request attribute that can become
available
> > > in the sitemap?)
> >
> > I've come up with 2 possible solutions to this problem so far.
> > (It seems that you came to the same yourself. )
> >
> > 1) I think we can do a specialized "Validation" transformer, which
extends
> > from XSLT transformer, but also sticks in the sitemap a
"validationResult"
> > attribute, which a subsequent selector can use. The idea seems feasible
> > based on the behaviour of the WritingDomTransformer which sticks in the
> > sitemap a DOM object representing the SAX stream.
>
> this is the only way I see for this approach. but Ivelin: isn't there a
> way of using schematron more in a java way? as long as you want schematron
> only to display some errors fine. But ussually I check my business
> objects again before I save them inside an action. Something like:
>
> save-action() {
> if (bo comforms to XSD) {
> save to whatever
> }
> else {
> error: bo does not conform to XSD
> }
> }
>
> How would you do this with schematron inside an action. I'd be glad if we
> could find a way to do this with schemtron, too.
Before I answer, I'd make a note that I am not aware of a XSD validator
which can go directly against a JavaBean.
So I assume that this line
> if (bo comforms to XSD) {
actuall assumes an implicit transition from BO to XMLSource to XSD
validation.
If we want to stick to the XSLT implementation of Schematron, then
XMLSource myBOasXML = Castor.marshall (bo) ;
save-action() {
// XSD validation
if (myBOasXML comforms to XSD) {
// Schematron validation
XMLSource schemtraonResultAsXML = XSLT.process( myBO,
mySchematronStylesheet )
CastorOrJAXB.unmarshall ( schemtraonResultAsXML,
schematronResultJavaBean );
if ( schematronResultJavaBean.errors > 0 )
{
DING, ERROR, display errors and diagnostics
}
else
save to whatever
}
else {
error: bo does not conform to XSD
}
}
Maybe it's preferable though to use the Java implementation of Schematron:
http://www.informatik.hu-berlin.de/~obecker/SchematronAPI/
It works fine against DOM. It shouldn't be too hard to extend it to work
directly with BOs by replacing the XPath calls to a DOM with JXPath calls to
the BO.
>
> > 2) How about a XPath selector, whose when attribute will be a valid
XPath
> > test expression executed against the SAX stream?
> > then you can possible do something like:
> >
> > <transformer src="validating-schematron-report.xsl">
> > <selector type="xpath">
> > <selector when="/validatingResult/pattern">
> > ... go back to the same page
> > <selector otherwise>
> > ... move on with life
> >
> >
> > So which one of the two (if any) is better ?
>
> AFAIK this is not possible without creating a DOM.... we have had a
> discussion on this topic lately...
What if we implement only the subset of XPath which satisfies 90% of the
needs and can work with a SAX stream.
Many times the test would be like:
1) Does element A exist, or
2) Does element A have value b, or
3) Does element A appear n times, or
4) similar tests against attributes
All of the above can work with SAX stream without the need to remember the
whole document.
> --
> Torsten
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, email: [EMAIL PROTECTED]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]