- From: Norman Walsh <ndw@nwalsh.com>
- Date: Thu, 20 Feb 2014 08:08:33 -0600
- To: public-xml-processing-model-wg@w3.org
- Message-ID: <87wqgpg9lq.fsf@nwalsh.com>
Hello world, Notwithstanding the fact that there is considerable discussion occurring right now about how XProc should deal with a variety of large issues, at the Edinburgh face-to-face, those assembled settled on the following proposal for simplifying parameters. Parameters The following proposal attempts to address the use case for parameters in the simplest way possible. Anticipated pre-conditions: a. The XProc expression language adopts the XSLT 3.0 extensions for maps. b. The XProc vocabulary adopts the XSLT 3.0 convention of specifying option (and variable) types with an "as" attribute. c. The XProc language extends the value of shortcut options to include AVTs. AVTs return a string value. In this proposal, there are no parameter ports, there are no special rules associated with parameters. 1. There is a new function, p:parameters. It takes a single string argument and returns a map from QNames to XDM item values. p:parameters() as map:map(xs:Qname, item()*) p:parameters($name as xs:string) as map:map(xs:QName, item()*) The function p:parameters() is a shortcut for p:parameters('') The map returned by the p:parameters function is implementation-defined. An implementation can initialize the XProc environment with any number of such named maps through APIs that are out the scope of the XProc specification. An implementation that is invoked from the command line, for example, might provide command line switches for setting values in the parameter maps. For example: calabash -p foo=bar -p other:foo=baz -p struct=@foo.xml might create two maps. One, named '', containing two keys, 'foo' and 'struct' initialized respectively to the values "bar" and the XML document in foo.xml. The second, named 'other' containing a single key mapping 'foo' to "baz". 2. Steps, like XSLT, that use parameters declare a parameters option for this purpose: <p:declare-step type="p:xslt"> <p:option name="parameters" select="p:parameters()" as="map:map(xs:QName, item()*)?"/> Because the default value of the parameters option is the p:parameters() function, options specified to the pipeline will still, by defualt, pass through to the step. Authors who wish to block this behavior, can do so by setting the value of the parameters option explicitly. <p:xslt> <p:with-option name="parameters" select="()"/> Authors can construct new maps using XPath. XPath provides sufficient expressive power to encompass the current ability to control map behavior. You can, for example, override the value of a parameter: <p:xslt> <p:with-option name="parameters" select="map:new((p:parameters(), map:entry('root.path', '/tmp/x')))"/> or allow a parameter passed from the environment to override a default value: <p:xslt> <p:with-option name="parameters" select="map:new((map:entry('root.path', '/tmp/x'), p:parameters())) Authors have complete freedom to adjust the value of the parameters option in any way that they like. Be seeing you, norm -- Norman Walsh Lead Engineer MarkLogic Corporation Phone: +1 512 761 6676 www.marklogic.com
Received on Thursday, 20 February 2014 14:09:03 UTC