Comments inline blue with SL...


> I expect parameters will map to Daffodil variables. How this mapping
occurs will be implementation-defined.

Daffodil also has another kind of parameter called "tunables". I imagine
there could be an implementation defined way to define a variable vs a
tunable via the parameters option. For example, maybe parameters in the
"daf" namespace are used as Daffodil tunables, and parameters in the dfdl
or other namespaces are used as variables.

JND: On the question of tunables, processors like MorganaXProc allow
for configuration
files to
<https://www.xml-project.com/manual/ch02.html#configuration_s1_1_s2_4> be
passed at runtime. A parameter such as –dfdl-config could be provided to
fill these values.

SL: Makes sense and seems perfectly reasonable. The DFDL config files allow
passing in both variables and tunables.

> fail-on-error indicates whether or not processing should continue if a
recoverable error is encountered. I’m not sure what this would be.

Daffodil has a few different kinds of potentially recoverable errors:

1) Daffodil can perform optional validation, either "limited" which is
implemented by Daffodil as it parses, or "full" via Xerces at the end of a
parse. While these show up as errors in the Daffodil API, they can be
differentiated from "Parse Errors" vs "Validation Errors". Parse errors are
always fatal since you do not get an infoset, but you could consider
validation errors as either non-fatal or not. The Daffodil CLI currently
considers both kinds of errors as fatal, though its not unreasonable for an
XProc implementation to consider validation errors as recoverable. That
said, I imagine most XProc pipelines wouldn't even enable Daffodil
validation, instead doing it as a separate step in the pipeline.

JND: Are these “validation” errors against the DFDL/XSD Schema (i.e.
confirming the validity of the schema) or the input? XProc already has an
optional validation step for XSD validation, p:validate-with-xml-schema
<https://spec.xproc.org/master/head/validation/#c.validate-with-xml-schema>,
which can use a variety of validators including Xerces.

We could add output report port which would contain the list of errors (if
any) in the XVRL (another new XProc 3.0 feature) vocabulary
<https://github.com/xproc/xvrl>. This is what other validation steps do.

But I want to understand your larger point about handling validation as a
separate step, what advantages does that entail? It appears that validation
is an optional DFDL feature. I worry about creating a separate step that
only some DFDL implementations could meet.

SL: Regarding validation as a separate step, I was suggesting something
like p:validation-with-xml-schema be used. I didn't mean to imply that we
need something like a p:dfdl-validate step.

The validation errors that Daffodil can create are normal XSD validation
checks based on the DFDL/XSD schema. They can be enabled or disabled, but
usually systems that already have XSD validation capabilities disable
Daffodil validation and use the built-in ones instead. I would maybe
suggest that the dfdl-parse step says something like "the p:dfdl-parse step
does not perform XSD validation, if it is needed then
p:validation-with-xm-schema should be used."

I think an output report could be useful, not only for the dfdl:assert, but
also for diagnostics when parse failures happen. When a parse fails, it's
very difficult to know why, and Daffodil tries to create helpful
diagnostics that make it more clear. Making these available in a consistent
report seems like a good idea. Though, can XVRL reports be used for
diagnostics about input failures (e.g. "failed to find delimiter in the
data"), or are they fairly specific to validation diagnostics?

2) DFDL allows for assertions while parsing (dfdl:assert). Normally a
failed assertion causes backtracking while speculatively parsing. You can
specify that an assertion is "recoverable", which just means it does not
backtrack and parsing will continue as if the the error didn't occur, and
the error is treated like a validation error (see above). A non-recoverable
assertion causes backtracking, which could lead to any outcome (e.g. fatal
parse error, successful infoset, etc).

3) It is possible for Daffodil to successfully parse but not consume all
the input data. In this case there are no errors reported by the Daffodil
API and you do get an infoset. But most people expect this to be an error
so the CLI and Daffodil NiFi implementations both consider this a fatal
error, but in theory one could consider this a recoverable error, or not an
error at all.

I guess the "fail-on-error" property lets implementations define which of
these failures (and maybe others I've forgotten) can still allow pipeline
processing as long as an infoset is created?

JND: XProc has a try/catch <https://spec.xproc.org/3.0/xproc/#p.try>
structure. However, if fail-on-error was set then the output would be lost.
Should we leave it as implementation-defined what is a recoverable vs
unrecoverable error?

SL: Yeah, I think it makes sense to allow implementations to define what is
recoverable or not and how to handle fail-on-errors. Though, it's still not
entirely clear to me how fail-on-error works if set to true vs false. Most
Daffodil errors are not recoverable (e.g. you don't get an infoset), so if
fail-on-error is false but there is no infoset what should the dfdl-parse
step do?

> There is no explicit support for parser files. I assume these are
proprietary representations to Daffodil and cannot interoperate with other
DFDL implementations.

We are finding more and more that parser files (which as you assume are
specific to Daffodil) are very useful. Some schemas take a relatively long
time to compile so this can drastically reduce startup time if they are
pre-compiled. It also makes distributing large complex schemas much easier.

Would it be possible to change the content-type of the "schema" property to
"any" with a restriction that implementations must support "xml"
content-type, and support for other content types are implementation
defined? Or are implementations free to ignore the content and support
non-standard content types if it wanted?

This would require the XProc to be able to “detect” whether the input is a
XSD or Parser file (whose structure I do know). If you think this is
practical let me know and I’ll relax the content types.

SL: The first handful of bytes in a Daffodil pre-compiled parser is the
string "DAFFODIL", so an implementation could check the first handful of
bytes to differentiate XSD vs a parser. I think it also feels fine to
require the content-type to be XML (I imagine most DFDL implementations
don't have a concept of a pre-compiled parser), as long as ignoring the
content type is something implements sometimes do. If that's not normal, I
think it would be helpful to relax the resriction.

One other thought is Daffodil has a concept of plugins, which are just
specially crafted jars put on the classpath. I imagine providing these jars
is outside the scope of the step and is implementation defined how they end
up on the classpath.

Generally processors such as MorganaXProc will make available any jars on
their classpath.

SL: Makes sense.

Reply via email to