Moving away from an expression language

One of the risks we have is that the use of XPath as an expression
language makes XProc difficult for non-XML environments where no such
implementation exists.

We have several uses of XPath:

1. Projections (e.g., $in//section)
2. replace ($in//section) { ...}
3. variables
4. conditionals

For (1) we make projects a step specific to the data format.

For (2) ... not sure.

For (3): variables are output port variables and we dump let.  You
need to use a step to do manipulations.  We need to make embedding
steps or mapping them to implementations possible.

For (4):

I think we can get rid of the expression language by enhancing the
step description so the expressions can be put into a step as its
implementation and the step gets used in a flow.

So, we currently have this:

if (xs:decimal($1/*/@version) < 2.0)
then [$1,"v1schema.xsd"] → validate-with-xml-schema() ≫ @1
else [$1,"v2schema.xsd"] → validate-with-xml-schema() ≫ @1

we would now have:

step check-version1()
    inputs $source as document-node()
  outputs $result as xs:boolean
  from "my:check-version1" in "script.xq";

$1 → check-version1() ≫ $isv1
if ($isv1)
then [$1,"v1schema.xsd"] → validate-with-xml-schema() ≫ @1
else [$1,"v2schema.xsd"] → validate-with-xml-schema() ≫ @1

and "script.xq" is:

function my:check-version1($source) as xs:boolean
{
   return xs:decimal($1/*/@version) < 2.0 d
}


Now, this is now two files instead of one.  We can fix this by
allowing embedding of the script.  It is unclear how the parsing would
work:

step check-version1()
    inputs $source as document-node()
  outputs $result as xs:boolean
  script "application/xquery"
{
   return xs:decimal($1/*/@version) < 2.0 d
}

Also, when there is more than one output port, the return will be more
complicated and need to be a map.  In other languages, it will be a
similar construct.

We probably want simple literal comparisons to enable steps to return
emulated values that then control which flow is executed.


-- 
--Alex Miłowski
"The excellence of grammar as a guide is proportional to the paucity of the
inflexions, i.e. to the degree of analysis effected by the language
considered."

Bertrand Russell in a footnote of Principles of Mathematics

Received on Friday, 12 February 2016 15:02:21 UTC