source: mauRepo/newmoon/src/test/resources/rules/schema-encoding/xmi11ea/process-002.xq @ 7935

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/mauRepo/newmoon/src/test/resources/rules/schema-encoding/xmi11ea/process-002.xq@7935
Revision 7935, 5.0 KB checked in by mnagni, 9 years ago (diff)

Simplified the ZIP structure.
Added a new sample test
Promoted to 1.1.1

Line 
1xquery version "1.0";
2(:~~~~~~~~~~~~~~~~~~~~~~~~~~ Encoding Rule Process  ~~~~~~~~~~~~~~~~~~~~~~~~~~
3Process Number: 002
4Description:    Load register and type-mapping documents.
5Reference:             
6
7#Update:        2009-08-11
8#Author:        Pavel Golodoniuc
9#Note:          Ported to eXist v1.2.x (production release).
10~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:)
11
12import module namespace mod-co = "urn:local-module:schema-encoding:xmi11ea:constants"
13at "xmldb:exist:///db/modules/schema-encoding/xmi11ea/module-constants.xq";
14
15import module namespace mod-fr = "urn:local-module:schema-encoding:xmi11ea:framework"
16at "xmldb:exist:///db/modules/schema-encoding/xmi11ea/module-framework-functions.xq";
17
18import module namespace mod-xp = "urn:local-module:schema-encoding:xmi11ea:xmi-proc"
19at "xmldb:exist:///db/modules/schema-encoding/xmi11ea/module-xproc-functions.xq";
20
21import module namespace mod-db = "urn:local-module:schema-encoding:xmi11ea:dbase"
22at "xmldb:exist:///db/modules/schema-encoding/xmi11ea/module-dbase-functions.xq";
23
24declare namespace xmldb         = "http://exist-db.org/xquery/xmldb";
25declare namespace tm            = "urn:x-auscope:xmlns:CSIRO:FullMoon:package-class-map:2.0";
26declare namespace pckr          = "urn:x-auscope:xmlns:CSIRO:FullMoon:package-register:2.0";
27
28(: Declare local variables :)
29declare variable $process-num as xs:integer := 2;
30declare variable $desc as xs:string := "Populates the type-mapping XMLDB collection.";
31declare variable $xmldb-user as xs:string external;
32declare variable $xmldb-password as xs:string external;
33declare variable $working-directory as xs:string external;
34declare variable $execution-directory as xs:string external;
35declare variable $query-path as xs:string external;
36declare variable $dependency-register-path as xs:string external;
37declare variable $gml-version as xs:string external;
38
39declare function local:resolve-dependency-register-path($paths as xs:string*) as xs:string*
40{
41    for $path in $paths
42    let $ret :=
43        if (starts-with($path, "http://") or starts-with($path, "https://"))
44        then $path
45        else if (starts-with($path, "file://"))
46            then $path
47                else if (starts-with($path, "request://"))           
48            then concat("file://", $execution-directory, "/", substring-after($path, "request://"))
49        else
50                concat("file://", $working-directory, "/", $path)   
51        return $ret
52};
53
54(:
55        Local processing function.
56
57        #Update:        2009-01-08
58        #Author:        Pavel Golodoniuc
59        #Note:          Duplicating priority and register name on tm:mapping element
60                                for convenience.
61:)
62declare function local:process($doc-root as node()?)
63{
64        let $collection := mod-db:get-mapping-collection(),
65                $defReg := concat("file://", replace($working-directory, "\\", "/"), "/", $mod-co:default-register-path),
66                $registers := (
67                        if (empty($dependency-register-path) or $dependency-register-path eq "") then
68                                ($defReg)
69                        else
70                                (concat("file://", replace($execution-directory, "\\", "/"), "/", $dependency-register-path), $defReg)
71                ),
72                $registers := (
73                        (: Load user-defined and default registers :)
74                        for $path at $i in $registers
75                        return
76                                xmldb:store(
77                                        $collection,
78                                        concat("Register", $i, ".xml"),
79                                        xs:anyURI($path)
80                                )
81                ),
82                $class-maps := (
83                        (: Load class maps from user-defined and default registers :)
84                        for $path in $registers
85                                for $pck in doc($path)//pckr:package
86                                return (
87                                        local:resolve-dependency-register-path($pck/pckr:implementation[@binding eq concat("GML ", $gml-version)]/pckr:classMap/@location),
88                                        local:resolve-dependency-register-path($pck/pckr:implementation[@binding eq "any"]/pckr:classMap/@location)
89                                )
90                )
91        return
92                for $f at $i in $class-maps
93                where empty($class-maps[position() lt $i and . eq $f])
94                return
95                        let
96                                $doc := fn:doc(string($f)),
97                                $ret := (
98                                        if (exists($doc)) then
99                                        (
100                                                let
101                                                        $file-name := $doc/tm:mapping/string(@id),
102                                                        $file := xmldb:store($collection, $file-name, $doc/tm:mapping, "text/xml")[1],
103                                                        (: Set the @priority attribute on the mapping entries according to user specified priorities :)
104                                                        $xu :=
105                                                                <xu:modifications version="1.0" xmlns:xu="http://www.xmldb.org/xupdate" xmlns:tm="urn:x-auscope:xmlns:CSIRO:FullMoon:package-class-map:2.0">
106                                                                        <xu:append select="{ concat("/tm:mapping[@id eq '", $file-name, "']/tm:entry") }">
107                                                                                <xu:attribute name="priority">{ $i }</xu:attribute>
108                                                                        </xu:append>
109                                                                        <xu:append select="{ concat("/tm:mapping[@id eq '", $file-name, "']") }">
110                                                                                <xu:attribute name="priority">{ $i }</xu:attribute>
111                                                                                <xu:attribute name="package">{ $f/../../../string(@name) }</xu:attribute>
112                                                                        </xu:append>
113                                                                </xu:modifications>,
114                                                        $op := mod-db:update-mapping-collection($xu)
115                                                return concat("Added type-mapping table ", $file)
116                                        )
117                                        else
118                                                concat("Failed to load ", $f)
119                                )
120                        return $ret
121};
122
123(: Create a new result element :)
124mod-fr:new-result($process-num, $desc, local:process(/))
Note: See TracBrowser for help on using the repository browser.