Feature #5096
Updated by Reynaud Sylvain about 11 years ago
+Refactoring steps+: 1) replace @path-template with list of <argument> * support <argument> for path() only. * develop XSL to translate @path-template to <argument> (for lavoisier-update-config.sh). 2) replace XPath functions path() and request(). +Replace @path-template with list of <argument>+: * @name="string" * @pattern="regexp | .*" * @path-format=" | VALUE | name/value" * @eval => the default value (_+example+: property('def')_). * text() => the default value (_+NOTE+: not allowed if preceding-sibling::argument[text()='']_). +Example+: <pre><code class="xml"> <view><!-- /vo/{vo=dteam}/{site=CC-IN2P3} --> <argument name="vo" path-format="name/value">dteam</argument> <argument name="site">CC-IN2P3</argument> </view> </code></pre> +Replace XPath functions with+: * STRING *variables* instead of path('k'). * STRING path() and request() with no argument. args() and post()+: * NODESET arguments() with path( ) (_+NOTE+: 'key' no argument. more supported here_). * NODE post() with no argument instead of request('k'). arguments( [<key>] ) => XML or [string] (_+NOTE+: 'path' is a reserved keyword for 'key'_). * NODE current() as post( ) => XML (_+NOTE+: a synonym of post() may be removed because it conflicts with for function current() in eval() ??? current()_). +Modify XPath functions view() and view_request()+: * NODE view(STRING, [<entry> NODESET]) instead of view(STRING, [STRING]). view( <view>, [<entries>] ) => XML. * NODE view_post(STRING, NODE, [<entry> NODESET]) instead of view_request(STRING, NODE, [STRING]). * OBJECT eval(STRING, [NODESET]) instead of eval(STRING, [BOOLEAN]). * NODESET users(['IP | DN | LOGIN']). view_post( <view>, <post>, [<entries>] ) => XML. +Function arguments() is a NODESET of <e:entry> documents, <e:entries> XML document, which contains *ALL* of the following following+: * default values described in this *order*+: list of <argument> * key/values extracted from query fields path * key/values extracted from path query fields * key/values extracted from posted HTML form * default values described in list of <argument> +Function post() is any XML document, which contains *ONLY ONE* of the following+: * posted HTML form * posted XML data * XML data sent by view (_+NOTE+: using function view_post()_) * NULL +Example+: revert priority order or arguments +Examples+: <pre><code class="xml"> <view name="v1" xmlns:str="http://exslt.org/strings"> <argument name="a">666</argument> <argument name="b" eval="6 * 111"/> <argument name="c"/> <argument name="d"/> <argument name="e"/> <connector type="XMLConnector"> <parameter name="content" eval="view('v2', eval('entry(@name, text() | eval(@eval))', view('config')/*/lav:view[@name='v1']/lav:argument[text()!='' or @eval]) | post()/*/* | eval('entry(@name, str:split(path(),"/")[position(current())])', view('config')/*/lav:view[@name='v1']/lav:argument[not(@path-format='')]) | arguments())"/> </connector> </view> <view name="v2"> <argument name="a"/><argument name="b"/><argument name="c"/><argument name="d"/><argument name="e"/> <connector type="StringConnector"> <parameter name="content" eval="concat($a,'/',$b,'/',$c,'/',$d,'/',$e)"/> </connector> </view> </code></pre> If URL is... <pre> POST http://localhost:8080/lavoisier/v1/path/path/path/path?a=query&b=query&c=query&d=query&e=query view('view1') a=post view('view1', arguments()) b=post view('view1', entries(entry('newK',arguments('oldK')))) c=post view_post('view1', post(), arguments()) </pre> Then result is... <pre>666/666/post/path/query