source: mauRepo/NewmoonJSP/src/main/webapp/WEB-INF/rules/conformance-test/ISO19136-V3.2-AnxE_XMI-V1.1/pre/pre-001.xq @ 7841

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/mauRepo/NewmoonJSP/src/main/webapp/WEB-INF/rules/conformance-test/ISO19136-V3.2-AnxE_XMI-V1.1/pre/pre-001.xq@7841
Revision 7841, 5.1 KB checked in by mnagni, 10 years ago (diff)
Line 
1xquery version "1.0";
2(:~~~~~~~~~~~~~~~~~~~~~~~~~~ Pre-processing script ~~~~~~~~~~~~~~~~~~~~~~~~~~~
3Script Number:  001
4Description:    Create collection for mapping tables and load type-mapping
5                                documents.
6Reference:             
7
8#Update:        2009-08-11
9#Author:        Pavel Golodoniuc
10#Note:          Ported to eXist v1.2.x (production release).
11~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:)
12
13import module namespace mod-co = "urn:local-module:ISO19136-V3.2-AnxE_XMI-V1.1:constants"
14at "xmldb:exist:///db/modules/conformance-test/ISO19136-V3.2-AnxE_XMI-V1.1/module-constants.xq";
15
16import module namespace mod-fr = "urn:local-module:ISO19136-V3.2-AnxE_XMI-V1.1:framework"
17at "xmldb:exist:///db/modules/conformance-test/ISO19136-V3.2-AnxE_XMI-V1.1/module-framework-functions.xq";
18
19import module namespace mod-db = "urn:local-module:ISO19136-V3.2-AnxE_XMI-V1.1:dbase"
20at "xmldb:exist:///db/modules/conformance-test/ISO19136-V3.2-AnxE_XMI-V1.1/module-dbase-functions.xq";
21
22declare namespace UML   = "omg.org/UML1.3";
23declare namespace xmldb = "http://exist-db.org/xquery/xmldb";
24declare namespace tm    = "urn:x-auscope:xmlns:CSIRO:FullMoon:package-class-map:2.0";
25declare namespace pckr  = "urn:x-auscope:xmlns:CSIRO:FullMoon:package-register:2.0";
26declare namespace cr    = "http://ndg.service.newmoon.conftest-result/1.0";
27
28(: Declare local variables, particular to this test :)
29declare variable $title as xs:string := "PRE-1";
30declare variable $description as xs:string := "Create collection for mapping tables and load type-mapping documents.";
31
32declare variable $xmldb-user as xs:string external;
33declare variable $xmldb-password as xs:string external;
34declare variable $root-collection-uri as xs:string external;
35declare variable $root-collection-path as xs:string external;
36declare variable $working-directory as xs:string external;
37declare variable $query-path as xs:string external;
38declare variable $dependency-register-path as xs:string external;
39declare variable $gml-version as xs:string external;
40
41(: Declare the local assert function which defines a postive condition for pass :)
42declare function local:main($doc-root as node()?) as node()?
43{
44        let $ret := (
45                mod-db:create-base-collection($root-collection-path),
46                mod-db:create-mapping-collection($root-collection-path)
47        )
48        return local:load-type-mappings($doc-root)
49};
50
51declare function local:resolve-dependency-register-path($paths as xs:string*) as xs:string*
52{
53    for $path in $paths
54    let $ret :=
55        if (starts-with($path, "http://") or starts-with($path, "https://"))
56        then $path
57        else if (starts-with($path, "file://"))
58            then $path
59            else concat("file://", $working-directory, "/", $path)
60        return $ret
61};
62
63(: Load type-mapping tables to the collection :)
64declare function local:load-type-mappings($doc-root as node()?) as node()?
65{
66        let $collection := mod-db:get-mapping-collection(),
67                $registers := (
68                        if (empty($dependency-register-path) or $dependency-register-path eq "") then
69                                ($mod-co:default-register-path)
70                        else
71                                ($dependency-register-path, $mod-co:default-register-path)
72                ),
73                $registers := (
74                        (: Load user-defined and default registers :)
75                        for $path at $i in $registers
76                        return
77                                xmldb:store(
78                                        $collection,
79                                        concat("Register", $i, ".xml"),
80                                        xs:anyURI(concat("file://", replace($working-directory, "\\", "/"), "/", $path))
81                                )
82                ),
83                $class-maps := (
84                        (: Load class maps from user-defined and default registers :)
85                        for $path in $registers
86                                for $pck in doc($path)//pckr:package
87                                return (
88                                        local:resolve-dependency-register-path($pck/pckr:implementation[@binding eq concat("GML ", $gml-version)]/pckr:classMap/@location),
89                                        local:resolve-dependency-register-path($pck/pckr:implementation[@binding eq "any"]/pckr:classMap/@location)
90                                )
91                ),
92                $ret := (
93                        for $f at $i in $class-maps
94                        where empty($class-maps[position() lt $i and . eq $f])
95                        return
96                                let
97                                        $doc := fn:doc(string($f)),
98                                        $msg := (
99                                                if (exists($doc)) then
100                                                (
101                                                        let
102                                                                $file-name := $doc/tm:mapping/string(@id),
103                                                                $file := xmldb:store($collection, $file-name, $doc/tm:mapping, "text/xml")[1],
104                                                                (: Set the @priority attribute on the mapping entries according to user specified priorities :)
105                                                                $xu :=
106                                                                        <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">
107                                                                                <xu:append select="{ concat("/tm:mapping[@id eq '", $file-name, "']/tm:entry") }">
108                                                                                        <xu:attribute name="priority">{ $i }</xu:attribute>
109                                                                                </xu:append>
110                                                                        </xu:modifications>,
111                                                                $op := mod-db:update-mapping-collection($xu)
112                                                        return <cr:message>{ concat("Added type-mapping table ", $file) }</cr:message>
113                                                )
114                                                else
115                                                        <cr:message type="error">{ concat("Failed to load ", string($f)) }</cr:message>
116                                        )
117                                return $msg
118                )
119        return
120                if (empty($ret)) then ()
121                else <cr:messages>{ $ret }</cr:messages>
122};
123
124(: Create a new result element :)
125mod-fr:new-result($title, $description, local:main(/))
Note: See TracBrowser for help on using the repository browser.