From: <cu...@us...> - 2010-12-27 23:35:51
|
Revision: 13464 http://exist.svn.sourceforge.net/exist/?rev=13464&view=rev Author: cutlass Date: 2010-12-27 23:35:44 +0000 (Mon, 27 Dec 2010) Log Message: ----------- [xproc] added p:variable support Modified Paths: -------------- trunk/eXist/extensions/xprocxq/build.xml trunk/eXist/extensions/xprocxq/main/etc/xproc-component.xml trunk/eXist/extensions/xprocxq/main/scratchpad trunk/eXist/extensions/xprocxq/main/src/xquery/const.xqm trunk/eXist/extensions/xprocxq/main/src/xquery/ext.xqm trunk/eXist/extensions/xprocxq/main/src/xquery/functions.xqm trunk/eXist/extensions/xprocxq/main/src/xquery/opt.xqm trunk/eXist/extensions/xprocxq/main/src/xquery/std.xqm trunk/eXist/extensions/xprocxq/main/src/xquery/util.xqm trunk/eXist/extensions/xprocxq/main/src/xquery/xproc.xqm Modified: trunk/eXist/extensions/xprocxq/build.xml =================================================================== --- trunk/eXist/extensions/xprocxq/build.xml 2010-12-27 20:22:09 UTC (rev 13463) +++ trunk/eXist/extensions/xprocxq/build.xml 2010-12-27 23:35:44 UTC (rev 13464) @@ -8,7 +8,7 @@ <property name="xprocxq.dir" value="main"/> - <target name="all"> + <target name="all" depends="clean"> <echo message="-------------------------------------"/> <echo message="Building XProcXQ"/> <echo message="-------------------------------------"/> Modified: trunk/eXist/extensions/xprocxq/main/etc/xproc-component.xml =================================================================== --- trunk/eXist/extensions/xprocxq/main/etc/xproc-component.xml 2010-12-27 20:22:09 UTC (rev 13463) +++ trunk/eXist/extensions/xprocxq/main/etc/xproc-component.xml 2010-12-27 23:35:44 UTC (rev 13464) @@ -65,7 +65,7 @@ <xproc:element type="p:option" xproc:support="true"/> <xproc:element type="p:with-option" xproc:support="true"/> <xproc:element type="p:with-param"/> - <xproc:element type="p:variable" xproc:support="true"/> + <xproc:element type="p:variable" xproc:step="true" xproc:support="true"/> <!-- //--> Modified: trunk/eXist/extensions/xprocxq/main/scratchpad =================================================================== --- trunk/eXist/extensions/xprocxq/main/scratchpad 2010-12-27 20:22:09 UTC (rev 13463) +++ trunk/eXist/extensions/xprocxq/main/scratchpad 2010-12-27 23:35:44 UTC (rev 13464) @@ -26,7 +26,7 @@ * declare-step/pipeline need require name attribute * sequence issue with input to choose * dont forget I changed p namespace and p1 namespace in util.xqm -* pipelines need name attribute, should default to xproc:defaultname +FIXED * pipelines need name attribute, should default to xproc:defaultname * add primary input to evaluation in u:xquery, instead of passing to each function * fix p:choose deal with xpath-context, each subpipeline must have the same output signature (static check) @@ -147,3 +147,30 @@ * build 'in database' e.g. avoid build/compile cycle * run error tests +---------------------------------------------------------------------- +27/12/10 +---------------------------------------------------------------------- + +prob with validxsd-006 +prob with rename-004 +prob with add-xml-base +prob with Test delete-002 + +64 normal pass +273 normal fail + +337 total normal required tests + +8 normal pass +250 normal fail +258 total normal err required tests + +12% pass rate + +---------------------------------------------------------------------- + + + + for $author in //author[contains(firstname, $local:str)] + order by $author/firstname + return $author \ No newline at end of file Modified: trunk/eXist/extensions/xprocxq/main/src/xquery/const.xqm =================================================================== --- trunk/eXist/extensions/xprocxq/main/src/xquery/const.xqm 2010-12-27 20:22:09 UTC (rev 13463) +++ trunk/eXist/extensions/xprocxq/main/src/xquery/const.xqm 2010-12-27 23:35:44 UTC (rev 13464) @@ -89,10 +89,9 @@ import module namespace std = "http://xproc.net/xproc/std" at "resource:net/xproc/xprocxq/src/xquery/std.xqm"; import module namespace ext = "http://xproc.net/xproc/ext" at "resource:net/xproc/xprocxq/src/xquery/ext.xqm"; - declare namespace xsl="http://www.w3.org/1999/XSL/Transform"; + declare namespace xsl="http://www.w3.org/1999/XSL/Transform"; + declare option exist:serialize "expand-xincludes=no"; - declare option exist:serialize "expand-xincludes=no"; - '; declare variable $const:xpath-imports :=' Modified: trunk/eXist/extensions/xprocxq/main/src/xquery/ext.xqm =================================================================== --- trunk/eXist/extensions/xprocxq/main/src/xquery/ext.xqm 2010-12-27 20:22:09 UTC (rev 13463) +++ trunk/eXist/extensions/xprocxq/main/src/xquery/ext.xqm 2010-12-27 23:35:44 UTC (rev 13464) @@ -21,14 +21,14 @@ (: -------------------------------------------------------------------------- :) (: Module Vars :) -declare variable $ext:pre := util:function(xs:QName("ext:pre"), 3); -declare variable $ext:post := util:function(xs:QName("ext:post"), 3); -declare variable $ext:xproc := util:function(xs:QName("ext:xproc"), 3); -declare variable $ext:xsltforms := util:function(xs:QName("ext:xsltforms"), 3); +declare variable $ext:pre := util:function(xs:QName("ext:pre"), 4); +declare variable $ext:post := util:function(xs:QName("ext:post"), 4); +declare variable $ext:xproc := util:function(xs:QName("ext:xproc"), 4); +declare variable $ext:xsltforms := util:function(xs:QName("ext:xsltforms"), 4); (: -------------------------------------------------------------------------- :) -declare function ext:pre($primary,$secondary,$options){ +declare function ext:pre($primary,$secondary,$options,$variables){ (: -------------------------------------------------------------------------- :) let $v := u:get-primary($primary) return @@ -37,7 +37,7 @@ (: -------------------------------------------------------------------------- :) -declare function ext:post($primary,$secondary,$options){ +declare function ext:post($primary,$secondary,$options,$variables){ (: -------------------------------------------------------------------------- :) let $v := u:get-primary($primary) return @@ -46,7 +46,7 @@ (: -------------------------------------------------------------------------- :) -declare function ext:xproc($primary,$secondary,$options){ +declare function ext:xproc($primary,$secondary,$options,$variables){ (: -------------------------------------------------------------------------- :) (: NOTE - this function needs to be defined here, but use-function in xproc.xqm :) () @@ -54,7 +54,7 @@ (:-------------------------------------------------------------------------- :) -declare function ext:xsltforms($primary,$secondary,$options){ +declare function ext:xsltforms($primary,$secondary,$options,$variables){ (: TODO- unsure about the logic of this :) (: -------------------------------------------------------------------------- :) ( Modified: trunk/eXist/extensions/xprocxq/main/src/xquery/functions.xqm =================================================================== --- trunk/eXist/extensions/xprocxq/main/src/xquery/functions.xqm 2010-12-27 20:22:09 UTC (rev 13463) +++ trunk/eXist/extensions/xprocxq/main/src/xquery/functions.xqm 2010-12-27 23:35:44 UTC (rev 13464) @@ -1,4 +1,4 @@ -xquery version "1.0" encoding "UTF-8"; + xquery version "1.0" encoding "UTF-8"; module namespace func = "http://xproc.net/xproc/functions"; (: ------------------------------------------------------------------------------------- Modified: trunk/eXist/extensions/xprocxq/main/src/xquery/opt.xqm =================================================================== --- trunk/eXist/extensions/xprocxq/main/src/xquery/opt.xqm 2010-12-27 20:22:09 UTC (rev 13463) +++ trunk/eXist/extensions/xprocxq/main/src/xquery/opt.xqm 2010-12-27 23:35:44 UTC (rev 13464) @@ -22,27 +22,27 @@ (: -------------------------------------------------------------------------- :) (: Module Vars :) -declare variable $opt:exec := util:function(xs:QName("opt:exec"), 3); -declare variable $opt:hash := util:function(xs:QName("opt:hash"), 3); -declare variable $opt:uuid := util:function(xs:QName("opt:uuid"), 3); -declare variable $opt:www-form-urldecode := util:function(xs:QName("opt:www-form-urldecode"), 3); -declare variable $opt:www-form-urlencode := util:function(xs:QName("opt:www-form-urlencode"), 3); -declare variable $opt:validate-with-xml-schema := util:function(xs:QName("opt:validate"), 3); -declare variable $opt:validate-with-schematron := util:function(xs:QName("opt:validate"), 3); -declare variable $opt:validate-with-relax-ng := util:function(xs:QName("opt:validate"), 3); -declare variable $opt:xquery := util:function(xs:QName("opt:xquery"), 3); -declare variable $opt:xsl-formatter :=util:function(xs:QName("opt:xsl-formatter"), 3); +declare variable $opt:exec := util:function(xs:QName("opt:exec"), 4); +declare variable $opt:hash := util:function(xs:QName("opt:hash"), 4); +declare variable $opt:uuid := util:function(xs:QName("opt:uuid"), 4); +declare variable $opt:www-form-urldecode := util:function(xs:QName("opt:www-form-urldecode"), 4); +declare variable $opt:www-form-urlencode := util:function(xs:QName("opt:www-form-urlencode"), 4); +declare variable $opt:validate-with-xml-schema := util:function(xs:QName("opt:validate"), 4); +declare variable $opt:validate-with-schematron := util:function(xs:QName("opt:validate"), 4); +declare variable $opt:validate-with-relax-ng := util:function(xs:QName("opt:validate"), 4); +declare variable $opt:xquery := util:function(xs:QName("opt:xquery"), 4); +declare variable $opt:xsl-formatter :=util:function(xs:QName("opt:xsl-formatter"), 4); (: -------------------------------------------------------------------------- :) -declare function opt:exec($primary,$secondary,$options) { +declare function opt:exec($primary,$secondary,$options,$variables) { (: -------------------------------------------------------------------------- :) u:outputResultElement(<test3/>) }; (: -------------------------------------------------------------------------- :) -declare function opt:hash($primary,$secondary,$options) { +declare function opt:hash($primary,$secondary,$options,$variables) { (: -------------------------------------------------------------------------- :) let $v := u:get-primary($primary) let $match := u:get-option('match',$options,$v) @@ -59,7 +59,7 @@ (: -------------------------------------------------------------------------- :) -declare function opt:uuid($primary,$secondary,$options) { +declare function opt:uuid($primary,$secondary,$options,$variables) { (: -------------------------------------------------------------------------- :) let $v := u:get-primary($primary) let $match := u:get-option('match',$options,$v) @@ -75,7 +75,7 @@ (: -------------------------------------------------------------------------- :) -declare function opt:www-form-urldecode($primary,$secondary,$options) { +declare function opt:www-form-urldecode($primary,$secondary,$options,$variables) { (: -------------------------------------------------------------------------- :) let $v := u:get-primary($primary) let $value := u:get-option('value',$options,$v) @@ -92,7 +92,7 @@ (: -------------------------------------------------------------------------- :) -declare function opt:www-form-urlencode($primary,$secondary,$options) { +declare function opt:www-form-urlencode($primary,$secondary,$options,$variables) { (: -------------------------------------------------------------------------- :) let $v := u:get-primary($primary) return @@ -101,7 +101,7 @@ (: -------------------------------------------------------------------------- :) -declare function opt:validate($primary,$secondary,$options) { +declare function opt:validate($primary,$secondary,$options,$variables) { (: -------------------------------------------------------------------------- :) let $v := u:get-primary($primary) let $schema := u:get-secondary('schema',$secondary) @@ -119,7 +119,7 @@ (: -------------------------------------------------------------------------- :) -declare function opt:xsl-formatter($primary,$secondary,$options) { +declare function opt:xsl-formatter($primary,$secondary,$options,$variables) { (: -------------------------------------------------------------------------- :) let $v := u:get-primary($primary) let $href-uri := u:get-option('href',$options,$v) @@ -149,7 +149,7 @@ (: -------------------------------------------------------------------------- :) -declare function opt:xquery($primary,$secondary,$options) { +declare function opt:xquery($primary,$secondary,$options,$variables) { (: -------------------------------------------------------------------------- :) u:assert(exists(u:get-secondary('query',$secondary)/c:query),'p:input query is required'), (:TODO: need to sort out multiple c:query elements and implied cdata sections :) @@ -162,9 +162,9 @@ let $preserve-context := u:get-option('xproc:preserve-context',$options,$v) return if ($preserve-context eq 'true') then - u:xquery-with-context($query,$v) + u:xquery-with-context($query,$v,$variables) else - u:xquery($query,$v) + u:xquery($query,$v,$variables) }; Modified: trunk/eXist/extensions/xprocxq/main/src/xquery/std.xqm =================================================================== --- trunk/eXist/extensions/xprocxq/main/src/xquery/std.xqm 2010-12-27 20:22:09 UTC (rev 13463) +++ trunk/eXist/extensions/xprocxq/main/src/xquery/std.xqm 2010-12-27 23:35:44 UTC (rev 13464) @@ -26,41 +26,41 @@ (: -------------------------------------------------------------------------- :) (: Module Vars :) -declare variable $std:add-attribute :=util:function(xs:QName("std:add-attribute"), 3); -declare variable $std:add-xml-base :=util:function(xs:QName("std:add-xml-base"), 3); -declare variable $std:count :=util:function(xs:QName("std:count"), 3); -declare variable $std:compare :=util:function(xs:QName("std:compare"),3); -declare variable $std:delete :=util:function(xs:QName("std:delete"),3); -declare variable $std:error :=util:function(xs:QName("std:error"), 3); -declare variable $std:filter :=util:function(xs:QName("std:filter"), 3); -declare variable $std:directory-list :=util:function(xs:QName("std:directory-list"), 3); -declare variable $std:escape-markup :=util:function(xs:QName("std:escape-markup"), 3); -declare variable $std:http-request :=util:function(xs:QName("std:http-request"), 3); -declare variable $std:identity :=util:function(xs:QName("std:identity"), 3); -declare variable $std:insert :=util:function(xs:QName("std:insert"), 3); -declare variable $std:label-elements :=util:function(xs:QName("std:label-elements"), 3); -declare variable $std:load :=util:function(xs:QName("std:load"), 3); -declare variable $std:make-absolute-uris :=util:function(xs:QName("std:make-absolute-uris"), 3); -declare variable $std:namespace-rename :=util:function(xs:QName("std:namespace-rename"), 3); -declare variable $std:pack :=util:function(xs:QName("std:pack"), 3); -declare variable $std:parameters :=util:function(xs:QName("std:parameters"), 3); -declare variable $std:rename :=util:function(xs:QName("std:rename"), 3); -declare variable $std:replace :=util:function(xs:QName("std:replace"), 3); -declare variable $std:set-attributes :=util:function(xs:QName("std:set-attributes"), 3); -declare variable $std:sink :=util:function(xs:QName("std:sink"), 3); -declare variable $std:split-sequence :=util:function(xs:QName("std:split-sequence"), 3); -declare variable $std:store :=util:function(xs:QName("std:store"), 3); -declare variable $std:string-replace :=util:function(xs:QName("std:string-replace"), 3); -declare variable $std:unescape-markup :=util:function(xs:QName("std:unescape-markup"), 3); -declare variable $std:xinclude :=util:function(xs:QName("std:xinclude"), 3); -declare variable $std:wrap :=util:function(xs:QName("std:wrap"), 3); -declare variable $std:wrap-sequence :=util:function(xs:QName("std:wrap-sequence"), 3); -declare variable $std:unwrap :=util:function(xs:QName("std:unwrap"), 3); -declare variable $std:xslt :=util:function(xs:QName("std:xslt"), 3); +declare variable $std:add-attribute :=util:function(xs:QName("std:add-attribute"), 4); +declare variable $std:add-xml-base :=util:function(xs:QName("std:add-xml-base"), 4); +declare variable $std:count :=util:function(xs:QName("std:count"), 4); +declare variable $std:compare :=util:function(xs:QName("std:compare"),4); +declare variable $std:delete :=util:function(xs:QName("std:delete"),4); +declare variable $std:error :=util:function(xs:QName("std:error"), 4); +declare variable $std:filter :=util:function(xs:QName("std:filter"), 4); +declare variable $std:directory-list :=util:function(xs:QName("std:directory-list"), 4); +declare variable $std:escape-markup :=util:function(xs:QName("std:escape-markup"), 4); +declare variable $std:http-request :=util:function(xs:QName("std:http-request"), 4); +declare variable $std:identity :=util:function(xs:QName("std:identity"), 4); +declare variable $std:insert :=util:function(xs:QName("std:insert"), 4); +declare variable $std:label-elements :=util:function(xs:QName("std:label-elements"), 4); +declare variable $std:load :=util:function(xs:QName("std:load"), 4); +declare variable $std:make-absolute-uris :=util:function(xs:QName("std:make-absolute-uris"), 4); +declare variable $std:namespace-rename :=util:function(xs:QName("std:namespace-rename"), 4); +declare variable $std:pack :=util:function(xs:QName("std:pack"), 4); +declare variable $std:parameters :=util:function(xs:QName("std:parameters"), 4); +declare variable $std:rename :=util:function(xs:QName("std:rename"), 4); +declare variable $std:replace :=util:function(xs:QName("std:replace"), 4); +declare variable $std:set-attributes :=util:function(xs:QName("std:set-attributes"), 4); +declare variable $std:sink :=util:function(xs:QName("std:sink"), 4); +declare variable $std:split-sequence :=util:function(xs:QName("std:split-sequence"), 4); +declare variable $std:store :=util:function(xs:QName("std:store"), 4); +declare variable $std:string-replace :=util:function(xs:QName("std:string-replace"), 4); +declare variable $std:unescape-markup :=util:function(xs:QName("std:unescape-markup"), 4); +declare variable $std:xinclude :=util:function(xs:QName("std:xinclude"), 4); +declare variable $std:wrap :=util:function(xs:QName("std:wrap"), 4); +declare variable $std:wrap-sequence :=util:function(xs:QName("std:wrap-sequence"), 4); +declare variable $std:unwrap :=util:function(xs:QName("std:unwrap"), 4); +declare variable $std:xslt :=util:function(xs:QName("std:xslt"), 4); (: -------------------------------------------------------------------------- :) -declare function std:add-attribute($primary,$secondary,$options) { +declare function std:add-attribute($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) let $match := u:get-option('match',$options,$v) @@ -91,7 +91,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:add-xml-base($primary,$secondary,$options) { +declare function std:add-xml-base($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) let $all := u:get-option('all',$options,$v) let $relative := u:get-option('relative',$options,$v) @@ -104,7 +104,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:compare($primary,$secondary,$options) { +declare function std:compare($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) let $alternate : = u:get-secondary('alternate',$secondary) let $strict := xs:boolean(u:get-option('xproc:strict',$options,$v)) (: ext attribute xproc:strict:) @@ -135,7 +135,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:count($primary,$secondary,$options){ +declare function std:count($primary,$secondary,$options,$variables){ let $v := u:get-primary($primary) let $limit := xs:integer(u:get-option('limit',$options,$v)) let $count := count($v/*) @@ -148,7 +148,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:delete($primary,$secondary,$options){ +declare function std:delete($primary,$secondary,$options,$variables){ let $v := u:get-primary($primary) let $match := u:get-option('match',$options,$v) let $query := if (contains($match,'/')) then @@ -162,7 +162,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:directory-list($primary,$secondary,$options) { +declare function std:directory-list($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) let $path := u:get-option('path',$options,$v) let $include-filter := u:get-option('include-filter',$options,$v) @@ -196,7 +196,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:escape-markup($primary,$secondary,$options) { +declare function std:escape-markup($primary,$secondary,$options,$variables) { (: TODO: test with sequences :) let $v := u:get-primary($primary) return @@ -207,7 +207,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:error($primary,$secondary,$options) { +declare function std:error($primary,$secondary,$options,$variables) { (: TODO: this should be generated to the error port:) let $v := u:get-primary($primary) @@ -228,7 +228,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:filter($primary,$secondary,$options) { +declare function std:filter($primary,$secondary,$options,$variables) { (: TODO - broken :) u:assert(exists($options/p:with-option[@name='select']/@select),'p:with-option match is required'), let $v := u:get-primary($primary) @@ -243,7 +243,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:http-request($primary,$secondary,$options) { +declare function std:http-request($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) let $href := $v/c:request/@href let $method := $v/c:request/@method @@ -297,7 +297,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:identity($primary,$secondary,$options) { +declare function std:identity($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) return $v @@ -305,7 +305,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:insert($primary,$secondary,$options) { +declare function std:insert($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) let $match := u:get-option('match',$options,$v) let $position := u:get-option('position',$options,$v) @@ -321,7 +321,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:label-elements($primary,$secondary,$options) { +declare function std:label-elements($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) let $match := u:get-option('match',$options,$v) let $attribute := u:get-option('attribute',$options,$v) @@ -338,7 +338,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:load($primary,$secondary,$options) { +declare function std:load($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) let $href := u:get-option('href',$options,$v) let $xproc:output-uri := u:get-option('xproc:output-uri',$options,$v) @@ -368,7 +368,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:make-absolute-uris($primary,$secondary,$options) { +declare function std:make-absolute-uris($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) return $v @@ -376,7 +376,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:namespace-rename($primary,$secondary,$options) { +declare function std:namespace-rename($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) return $v @@ -385,7 +385,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:pack($primary,$secondary,$options) { +declare function std:pack($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) let $alternate := u:get-secondary('alternate',$secondary) let $wrapper := u:get-option('wrapper',$options,$v) @@ -401,7 +401,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:parameters($primary,$secondary,$options) { +declare function std:parameters($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) return $v @@ -409,7 +409,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:rename($primary,$secondary,$options) { +declare function std:rename($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) let $match := u:get-option('match',$options,$v) let $query := if (contains($match,'/')) then @@ -424,7 +424,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:replace($primary,$secondary,$options) { +declare function std:replace($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) let $match := u:get-option('match',$options,$v) let $query := if (contains($match,'/')) then @@ -439,7 +439,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:set-attributes($primary,$secondary,$options) { +declare function std:set-attributes($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) let $attributes := u:get-secondary('attributes',$secondary) let $match := u:get-option('match',$options,$v) @@ -450,13 +450,13 @@ (: -------------------------------------------------------------------------- :) -declare function std:sink($primary,$secondary,$options) { +declare function std:sink($primary,$secondary,$options,$variables) { (string('')) }; (: -------------------------------------------------------------------------- :) -declare function std:split-sequence($primary,$secondary,$options) { +declare function std:split-sequence($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) let $test := u:get-option('test',$options,$v) let $match := u:evalXPATH($test, $v, $primary) @@ -471,7 +471,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:store($primary,$secondary,$options) { +declare function std:store($primary,$secondary,$options,$variables) { (:TODO - check existence of collection path :) let $v := u:get-primary($primary) let $href-uri := u:get-option('href',$options,$v) @@ -498,7 +498,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:string-replace($primary,$secondary,$options) { +declare function std:string-replace($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) let $match := u:get-option('match',$options,$v) let $query := if (contains($match,'/')) then @@ -514,7 +514,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:unescape-markup($primary,$secondary,$options){ +declare function std:unescape-markup($primary,$secondary,$options,$variables){ (: TODO: test with sequences :) let $v := u:get-primary($primary) return @@ -525,7 +525,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:xinclude($primary,$secondary,$options){ +declare function std:xinclude($primary,$secondary,$options,$variables){ let $v := u:get-primary($primary) return u:parse-string(u:serialize($v,'expand-xincludes=yes')) @@ -533,7 +533,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:wrap($primary,$secondary,$options) { +declare function std:wrap($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) let $match := u:get-option('match',$options,$v) let $query := if(contains($match,'/')) then @@ -554,7 +554,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:wrap-sequence($primary,$secondary,$options){ +declare function std:wrap-sequence($primary,$secondary,$options,$variables){ let $v := u:get-primary($primary) let $wrapper := u:get-option('wrapper',$options,$v) let $group-adjacent := u:get-option('group-adjacent',$options,$v) @@ -566,7 +566,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:unwrap($primary,$secondary,$options) { +declare function std:unwrap($primary,$secondary,$options,$variables) { let $v := u:get-primary($primary) let $match := u:get-option('match',$options,$v) let $query := if (contains($match,'/')) then @@ -580,7 +580,7 @@ (: -------------------------------------------------------------------------- :) -declare function std:xslt($primary,$secondary,$options){ +declare function std:xslt($primary,$secondary,$options,$variables){ let $v := u:get-primary($primary) let $stylesheet := u:get-secondary('stylesheet',$secondary) return Modified: trunk/eXist/extensions/xprocxq/main/src/xquery/util.xqm =================================================================== --- trunk/eXist/extensions/xprocxq/main/src/xquery/util.xqm 2010-12-27 20:22:09 UTC (rev 13463) +++ trunk/eXist/extensions/xprocxq/main/src/xquery/util.xqm 2010-12-27 23:35:44 UTC (rev 13464) @@ -333,7 +333,28 @@ $result }; +(: -------------------------------------------------------------------------- :) +declare function u:xquery($query,$xml,$variables){ + let $static-content := <static-context> + {for $var in $variables + return + <variable name="{$var/@name}">{$var/node()}</variable> + } + <default-context>{$xml}</default-context> + </static-context> + let $qry := if (starts-with(normalize-space($query),'/') or starts-with(normalize-space($query),'//')) then + concat('.',$query) + else if(contains($query,'(/')) then + replace($query,'\(/','(./') + else + $query + +let $result := util:eval-with-context($qry,$static-content,false()) + return + $result +}; + (: -------------------------------------------------------------------------- :) declare function u:xquery-with-context($query,$xml){ let $static-content := <static-context> @@ -357,6 +378,31 @@ (: -------------------------------------------------------------------------- :) +declare function u:xquery-with-context($query,$xml,$variables){ + let $static-content := <static-context> + {for $var in $variables + return + <variable name="{$var/@name}">{$var/node()}</variable> + } + <default-context>{$xml}</default-context> + </static-context> + let $log-x := util:log("info",$variables) + let $qry := if (starts-with(normalize-space($query),'/') or starts-with(normalize-space($query),'//')) then + concat('.',$query) + else if(contains($query,'(/')) then + replace($query,'\(/','(./') + else + $query + + +let $result : = util:eval-inline($xml,$query) + +(: let $result := util:eval-with-context($qry,$static-content,false()) +:) + return + $result +}; +(: -------------------------------------------------------------------------- :) declare function u:xquery($query as xs:string){ let $qry := if (starts-with($query,'/') or starts-with($query,'//')) then concat('.',$query) Modified: trunk/eXist/extensions/xprocxq/main/src/xquery/xproc.xqm =================================================================== --- trunk/eXist/extensions/xprocxq/main/src/xquery/xproc.xqm 2010-12-27 20:22:09 UTC (rev 13463) +++ trunk/eXist/extensions/xprocxq/main/src/xquery/xproc.xqm 2010-12-27 23:35:44 UTC (rev 13464) @@ -30,14 +30,16 @@ declare variable $xproc:parse-and-eval := util:function(xs:QName("xproc:parse_and_eval"), 5); (: -------------------------------------------------------------------------- :) declare variable $xproc:declare-step :=util:function(xs:QName("xproc:declare-step"), 5); - declare variable $xproc:choose :=util:function(xs:QName("xproc:choose"), 5); - declare variable $xproc:try :=util:function(xs:QName("xproc:try"), 5); - declare variable $xproc:catch :=util:function(xs:QName("xproc:catch"), 5); - declare variable $xproc:group :=util:function(xs:QName("xproc:group"), 5); - declare variable $xproc:for-each :=util:function(xs:QName("xproc:for-each"), 5); - declare variable $xproc:viewport :=util:function(xs:QName("xproc:viewport"), 5); - declare variable $xproc:library :=util:function(xs:QName("xproc:library"), 4); - declare variable $xproc:pipeline :=util:function(xs:QName("xproc:pipeline"), 4); + declare variable $xproc:choose :=util:function(xs:QName("xproc:choose"), 5); + declare variable $xproc:try :=util:function(xs:QName("xproc:try"), 5); + declare variable $xproc:catch :=util:function(xs:QName("xproc:catch"), 5); + declare variable $xproc:group :=util:function(xs:QName("xproc:group"), 5); + declare variable $xproc:for-each :=util:function(xs:QName("xproc:for-each"), 5); + declare variable $xproc:viewport :=util:function(xs:QName("xproc:viewport"), 5); + declare variable $xproc:library :=util:function(xs:QName("xproc:library"), 4); + declare variable $xproc:pipeline :=util:function(xs:QName("xproc:pipeline"), 4); + declare variable $xproc:variable :=util:function(xs:QName("xproc:variable"), 4); + (: -------------------------------------------------------------------------- :) @@ -142,6 +144,12 @@ (: -------------------------------------------------------------------------- :) +declare function xproc:variable($primary,$secondary,$options,$step) { +(: -------------------------------------------------------------------------- :) + <test6/> +}; + +(: -------------------------------------------------------------------------- :) declare function xproc:group($primary,$secondary,$options,$currentstep,$outputs) { (: -------------------------------------------------------------------------- :) let $v := u:get-primary($primary) @@ -198,9 +206,10 @@ let $whens := $currentstep/p:when let $otherwise := $currentstep/p:otherwise + let $when := ( for $when in $whens - let $when_eval := u:evalXPATH(string($when/@test),$v, $primary) + let $when_eval := u:xquery(string($when/@test),$v, $outputs//xproc:variable) return if($when_eval) then $when @@ -661,12 +670,12 @@ (: -------------------------------------------------------------------------- :) declare function xproc:evalstep ($step,$namespaces,$primaryinput,$pipeline,$outputs) { (: -------------------------------------------------------------------------- :) + let $outputs := document{$outputs} + let $variables := $outputs//xproc:variable let $declarens := u:declare-ns($namespaces) let $currentstep := $pipeline/*[@name=$step][1] let $stepfuncname := $currentstep/@xproc:step let $stepfunc := concat($const:default-imports,$stepfuncname) - let $outputs := document{$outputs} - let $primary := xproc:eval-primary($pipeline,$step,$currentstep,$primaryinput,$outputs) let $secondary := xproc:eval-secondary($pipeline,$step,$currentstep,$primaryinput,$outputs) @@ -676,10 +685,14 @@ let $log-href := $currentstep/p:log/@href let $log-port := $currentstep/p:log/@port + (: let $log-x := util:log("info),$stepfunc) :) + return if(name($currentstep) = "p:declare-step") then (: TODO: refactor p:pipeline and p:declare-step :) () + else if(name($currentstep) = "p:variable") then + <xproc:variable name="{fn:string($currentstep/@name)}">{u:evalXPATH(fn:string($currentstep/@select),<test/>)}</xproc:variable> else let $primaryinput:= <xproc:output step="{$step}" port-type="input" @@ -716,14 +729,14 @@ if(contains($stepfuncname,'xproc:')) then u:call(u:xquery($stepfunc),$primary,$secondary,$options,$currentstep,($outputs,$primaryinput,$secondaryinput)) else - u:call(u:xquery($stepfunc),$primary,$secondary,$options) + u:call(u:xquery($stepfunc),$primary,$secondary,$options, $variables) } </xproc:output> else <xproc:output step="{$step}" port-type="output" primary="false" - xproc:defaultname="{$currentstep/@xproc:defaultname}" + xproc:defaultname="{$currentstep/@xproc:defaultname}" select="{$currentstep/p:output[@primary='false']/@select}" port="{if (empty($currentstep/p:output[@primary='false']/@port)) then 'result' else $currentstep/p:output[@primary='false']/@port}" func="{$stepfuncname}"> @@ -731,7 +744,7 @@ if(contains($stepfuncname,'xproc:')) then u:call(u:xquery($stepfunc),$primary,$secondary,$options,$currentstep,($outputs,$primaryinput,$secondaryinput)) else - u:call(u:xquery($stepfunc),$primary,$secondary,$options) + u:call(u:xquery($stepfunc),$primary,$secondary,$options,$variables) } </xproc:output> ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |