Experience in giving DFDL training via daffodil is that our standard schema
project layout <https://daffodil.apache.org/dfdl-layout/> is much too deep
(directory wise) for many users to conveniently navigate and use. It gets
in the way of learning.

Our layout was designed to follow sbt conventions that enable automated
dependency management, packaging, etc. It is easy to use if you are
accustomed to using an IDE like Eclipse or IntelliJ.  It is also
extraordinarily valuable (and underappreciated) that 'sbt test' does a
built-in-self-test on a schema, and that 'sbt publishLocal' creates a Jar
of a DFDL schema for managed dependencies use between schemas.

But new users are mostly coming to DFDL/Daffodil from a command-line prompt
and a text editor (e.g., VIM).

I am wondering if we can have our cake and eat it too, without too much
added sbt complexity, and without losing 'sbt test' and 'sbt publishLocal'
working their magic for us.

E.g., what if a simplified layout was:

mySchema/schema - takes the place of src/main/*. Also no package-style
directory folder structure.
mySchema/test - takes the place of src/test/*. No package-style directory
folder structure.

It would be optional if users want to user mySchema/test/data and
mySchema/test/infosets to separate infosets and data, or just put all those
files in the same place and use file extensions (.dat vs. .dat.xml vs.
.tdml, etc.) to distinguish the kinds of content.

Such a flattened tree structure requires that the schema file names are
well chosen to be unlikely to conflict with other users chosen names, so a
name like common.dfdl.xsd or main.dfdl.xsd would be no good as there is no
package directory structure to make them unique.

But names like common-mySchema.dfdl.xsd and main-mySchema.dfdl.xsd would
still be quite convenient to use, particularly if the mySchema name is well
chosen. (Note how I've put the unique part of the name first, so that
name-completion will work most easily on command line.)

I think this would still work with sbt if we simply override the default
paths (and perhaps file patterns) used for specifying source and resources.

Thoughts?

Reply via email to