So the trick I think is I need 2 independent validation statuses. I need to know whether the internal limited validation passed/failed independently of the schematron validation.
The only way I can tell those apart would be to search the diagnostics and recognize the error message text in some reliable way, and if there are any from the basic Limited validation, then the data is "malformed", whereas if they are all schematron validation messages, then it was well-formed, but invalid. ________________________________ From: Steve Lawrence <slawre...@apache.org> Sent: Thursday, January 21, 2021 12:28 PM To: dev@daffodil.apache.org <dev@daffodil.apache.org> Subject: Re: [apache/incubator-daffodil] Embedded Schematron (#463) Yes, the two validation methods are completely separate. "limited" validation is essentially Daffodil calling dfdl:checkConstraints() immediately after every element is finished being parsed: https://github.com/apache/incubator-daffodil/blob/master/daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/parsers/ElementCombinator1.scala#L70-L95 And we always perform this validation as long as validation mode is not Off. So whether it's, limited, full, or custom, we will always do our "limited" checkConstraint() validation. https://github.com/apache/incubator-daffodil/blob/master/daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/parsers/ElementCombinator1.scala#L266-L271 The way "full" validation works is we tee all infoset events to a second InfosetOutputter (as XML text), and at the end of parsing we send those XML bytes to Xerces/Schematron/custom validator for additional validation. https://github.com/apache/incubator-daffodil/blob/master/daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/DataProcessor.scala#L703-L718 From what I've seen, the new schematron functionality doesn't change any of this. So I think this accomplishes exactly what you want. Restriction facets will be be checked by limited validation during parse and create appropriate validation errors, and schematron can be used at the end to support more complicated validation like co-constraints. On 1/21/21 12:13 PM, Beckerle, Mike wrote: > > Question on schematron or really the new validator system generally. > > Can I use both Daffodil's built in "limited" validation AND also use > schematron or other validation, or is it an either or? > > I have a need to use both Limited validation AND would still like to also use > schematron. > > It has to do with a strategy for error recovery > > <choice> > <!-- first branch --> > .... first branch of choice is the data format > > <!-- second branch is used for error recovery --> > <xs:element name="malformed" type="tns:invalidByte"/> > </choice> > > <simpleType name="invalidByte" dfdl:representation="binary" > dfdl:lengthKind="implicit"> > <restriction base="xs:unsignedByte"> > <maxExclusive value="0"/> <!-- can never pass. Always will be > invalid. --> > </restriction> > </simpleType> > > So if the data format can't be parsed (it's malformed), Daffodil will > backtrack to this malformed element which will consume 1 byte of data. And an > infoset containing these <malformed>N</malformed> elements will be considered > well-formed, but it will not pass validation checks that check the facet on > the invalidByte type. > > So this validation will fail, indicating that the data contains "malformed" > elements explicitly. This validation isn't really about validation at all, > it's being used as part of recognizing malformed data but in a way that we > can recover from the error, and try to parse again, having consumed one byte. > > Hence, I want this validation that is used to look for the elements that > indicate the data is malformed, but for "real" data validation I'd like to > also use schematron rules. > > That's the motivation anyway. > ________________________________ > From: John Wass <notificati...@github.com> > Sent: Wednesday, January 20, 2021 7:20 AM > To: apache/incubator-daffodil <incubator-daffo...@noreply.github.com> > Cc: Beckerle, Mike <mbecke...@owlcyberdefense.com>; Push > <p...@noreply.github.com> > Subject: Re: [apache/incubator-daffodil] Embedded Schematron (#463) > > > @jw3<https://github.com/jw3> pushed 1 commit. > > * > dfb3711<https://github.com/apache/incubator-daffodil/commit/dfb3711f1167173e4f31929e589d9d4ea4fce6cf> > Support embedding Schematron rules in DFDL schemas. > > — > You are receiving this because you are subscribed to this thread. > View it on > GitHub<https://github.com/apache/incubator-daffodil/pull/463/files/bb6073d979f3334be10188bcc3d0d41cdaa2528f..dfb3711f1167173e4f31929e589d9d4ea4fce6cf> > or > unsubscribe<https://github.com/notifications/unsubscribe-auth/AALUDAZHQFNNJYWEWLHFQXTS23C7RANCNFSM4UBVTVAQ>. >