source: mauRepo/isic_gn/trunk/geonetwork/xsl/metadata.xsl @ 8294

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/mauRepo/isic_gn/trunk/geonetwork/xsl/metadata.xsl@8294
Revision 8294, 67.1 KB checked in by mnagni, 7 years ago (diff)

Base version for the ISIC Geonetwork customized site

  • Property svn:mime-type set to text/plain
Line 
1<?xml version="1.0" encoding="UTF-8"?>
2<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3        xmlns:exslt= "http://exslt.org/common"
4        xmlns:gco="http://www.isotc211.org/2005/gco"
5        xmlns:gmd="http://www.isotc211.org/2005/gmd"
6        xmlns:geonet="http://www.fao.org/geonetwork"
7        xmlns:xlink="http://www.w3.org/1999/xlink"
8        xmlns:svrl="http://purl.oclc.org/dsdl/svrl"
9        exclude-result-prefixes="exslt xlink gco gmd geonet svrl">
10
11        <xsl:import href="text-utilities.xsl"/>
12        <xsl:include href="metadata-utils.xsl"/>
13        <xsl:include href="metadata-controls.xsl"/>
14       
15        <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
16        <!-- main schema switch -->
17        <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
18       
19        <xsl:template mode="elementEP" match="*|@*">
20                <xsl:param name="schema">
21                        <xsl:apply-templates mode="schema" select="."/>
22                </xsl:param>
23                <xsl:param name="edit" select="false()"/>
24                <xsl:param name="embedded" />
25               
26                <xsl:choose>
27               
28                        <!-- ISO 19115 -->
29                        <xsl:when test="$schema='iso19115'">
30                                <xsl:apply-templates mode="iso19115" select="." >
31                                        <xsl:with-param name="schema" select="$schema"/>
32                                        <xsl:with-param name="edit"   select="$edit"/>
33                                <xsl:with-param name="embedded" select="$embedded" />
34                                </xsl:apply-templates>
35                        </xsl:when>
36                       
37                        <!-- ISO 19139 and profiles -->
38                        <xsl:when test="starts-with($schema,'iso19139')">
39                                <xsl:apply-templates mode="iso19139" select="." >
40                                        <xsl:with-param name="schema" select="$schema"/>
41                                        <xsl:with-param name="edit"   select="$edit"/>
42                                        <xsl:with-param name="embedded" select="$embedded" />
43                                </xsl:apply-templates>
44                        </xsl:when>
45                       
46                        <!-- ISO 19110 -->
47                        <xsl:when test="$schema='iso19110'">
48                                <xsl:apply-templates mode="iso19110" select="." >
49                                        <xsl:with-param name="schema" select="$schema"/>
50                                        <xsl:with-param name="edit"   select="$edit"/>
51                                        <xsl:with-param name="embedded" select="$embedded" />
52                                </xsl:apply-templates>
53                        </xsl:when>
54                       
55                        <!-- FGDC -->
56                        <xsl:when test="$schema='fgdc-std'">
57                                <xsl:apply-templates mode="fgdc-std" select="." >
58                                        <xsl:with-param name="schema" select="$schema"/>
59                                        <xsl:with-param name="edit"   select="$edit"/>
60                                <xsl:with-param name="embedded" select="$embedded" />
61                                </xsl:apply-templates>
62                        </xsl:when>
63
64                        <!-- Dublin Core -->
65                        <xsl:when test="$schema='dublin-core'">
66                                <xsl:apply-templates mode="dublin-core" select="." >
67                                        <xsl:with-param name="schema" select="$schema"/>
68                                        <xsl:with-param name="edit"   select="$edit"/>
69                                <xsl:with-param name="embedded" select="$embedded" />
70                                </xsl:apply-templates>
71                        </xsl:when>
72               
73                        <!-- default, no schema-specific formatting -->
74                        <xsl:otherwise>
75                                <xsl:apply-templates mode="element" select=".">
76                                        <xsl:with-param name="schema" select="$schema"/>
77                                        <xsl:with-param name="edit"   select="$edit"/>
78                                <xsl:with-param name="embedded" select="$embedded" />
79                                </xsl:apply-templates>
80                        </xsl:otherwise>
81                </xsl:choose>
82               
83        </xsl:template>
84
85        <!--
86        new children
87        -->
88        <xsl:template mode="elementEP" match="geonet:child">
89                <xsl:param name="schema"/>
90                <xsl:param name="edit" select="false()"/>
91                <xsl:param name="embedded" />
92               
93                <!-- draw child element place holder if
94                        - child is an OR element or
95                        - there is no other element with the name of this placeholder
96                -->
97                <xsl:variable name="name">
98                        <xsl:choose>
99                                <xsl:when test="@prefix=''"><xsl:value-of select="@name"/></xsl:when>
100                                <xsl:otherwise><xsl:value-of select="concat(@prefix,':',@name)"/></xsl:otherwise>
101                        </xsl:choose>
102                </xsl:variable>
103                <!-- build a qualified name with COLON as the separator -->
104                <xsl:variable name="qname">
105                        <xsl:choose>
106                                <xsl:when test="@prefix=''"><xsl:value-of select="@name"/></xsl:when>
107                                <xsl:otherwise><xsl:value-of select="concat(@prefix,'COLON',@name)"/></xsl:otherwise>
108                        </xsl:choose>
109                </xsl:variable>
110
111                <xsl:variable name="parentName" select="../geonet:element/@ref|@parent"/>
112                <xsl:variable name="max" select="../geonet:element/@max|@max"/>
113                <xsl:variable name="prevBrother" select="preceding-sibling::*[1]"/>
114               
115                <!--
116                        Exception for gmd:graphicOverview because GeoNetwork manage thumbnail
117                        using specific interface for thumbnail and large_thumbnail but user should be able to add
118                        thumbnail using a simple URL.
119                -->             
120                <xsl:variable name="exception" select="../gmd:graphicOverview[gmd:MD_BrowseGraphic/gmd:fileDescription/gco:CharacterString='thumbnail' or gmd:MD_BrowseGraphic/gmd:fileDescription/gco:CharacterString='large_thumbnail']"/>
121               
122                <!-- <xsl:variable name="subtemplates" select="/root/gui/subtemplates/record[string(root)=$name]"/> -->
123                <xsl:variable name="subtemplates" select="/root/gui/subtemplates/record[string(root)='']"/>
124                <xsl:if test="$currTab!='simple' and (geonet:choose or name($prevBrother)!=$name) or $subtemplates">
125                        <xsl:if test="(geonet:choose
126                                                        or name($prevBrother)!=$name
127                                                        or $exception)
128                                                        or $subtemplates">
129                                <xsl:variable name="text">
130                                        <xsl:if test="geonet:choose">
131                                                <xsl:variable name="isXLinked" select="count(ancestor-or-self::node()[@xlink:href]) > 0" />
132                                                <select class="md" name="_{$parentName}_{$qname}" size="1">
133                                                        <xsl:if test="$isXLinked">
134                                                                <xsl:attribute name="disabled">disabled</xsl:attribute>
135                                                        </xsl:if>
136                                                        <xsl:for-each select="geonet:choose">
137                                                                <!-- FIXME : here we should sort by title ? -->
138                                                                <xsl:sort select="@name"/>
139                                                                <option value="{@name}">
140                                                                        <xsl:call-template name="getTitle">
141                                                                                <xsl:with-param name="name"   select="@name"/>
142                                                                                <xsl:with-param name="schema" select="$schema"/>
143                                                                        </xsl:call-template>
144                                                                        <xsl:text> </xsl:text>
145                                                                        (<xsl:value-of select="@name"/>)
146                                                                </option>
147                                                        </xsl:for-each>
148                                                </select>
149                                        </xsl:if>
150                                </xsl:variable>
151                                <xsl:variable name="id" select="@uuid"/>
152                                <xsl:variable name="addLink">
153                                        <xsl:choose>
154                                                <xsl:when test="geonet:choose or $subtemplates">
155                                                        <xsl:value-of select="concat('doNewORElementAction(',$apos,'/metadata.elem.add',$apos,',',$parentName,',',$apos,$name,$apos,',document.mainForm._',$parentName,'_',$qname,'.value,',$apos,$id,$apos,',',$apos,@action,$apos,',',$max,');')"/>
156                                                </xsl:when>
157                                                <xsl:otherwise>
158                                                        <xsl:value-of select="concat('doNewElementAction(',$apos,'/metadata.elem.add',$apos,',',$parentName,',',$apos,$name,$apos,',',$apos,$id,$apos,',',$apos,@action,$apos,',',$max,');')"/>
159                                                </xsl:otherwise>
160                                        </xsl:choose>
161                                </xsl:variable>
162                                <xsl:variable name="addXMLFragment">
163                                        <xsl:variable name="function">
164                                                <xsl:apply-templates mode="addXMLFragment" select="."/>
165                                        </xsl:variable>
166                                        <xsl:if test="normalize-space($function)!=''">
167                                                <xsl:value-of select="concat('javascript:', $function, '(',$parentName,',',$apos,$name,$apos,');')"/>
168                                        </xsl:if>
169                                </xsl:variable>
170                                <xsl:variable name="helpLink">
171                                        <xsl:call-template name="getHelpLink">
172                                                <xsl:with-param name="name"   select="$name"/>
173                                                <xsl:with-param name="schema" select="$schema"/>
174                                        </xsl:call-template>
175                                </xsl:variable>
176                                <xsl:call-template name="simpleElementGui">
177                                        <xsl:with-param name="title">
178                                                <xsl:call-template name="getTitle">
179                                                        <xsl:with-param name="name"   select="$name"/>
180                                                        <xsl:with-param name="schema" select="$schema"/>
181                                                </xsl:call-template>
182                                        </xsl:with-param>
183                                        <xsl:with-param name="text" select="$text"/>
184                                        <xsl:with-param name="addLink"  select="$addLink"/>
185                                        <xsl:with-param name="addXMLFragment"  select="$addXMLFragment"/>
186                                        <xsl:with-param name="helpLink" select="$helpLink"/>
187                                        <xsl:with-param name="edit"     select="$edit"/>
188                                        <xsl:with-param name="id"       select="$id"/>
189                                </xsl:call-template>
190                        </xsl:if>
191                </xsl:if>
192        </xsl:template>
193       
194        <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
195        <!-- callbacks from schema templates -->
196        <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
197       
198        <xsl:template mode="element" match="*|@*">
199                <xsl:param name="schema"/>
200                <xsl:param name="edit"   select="false()"/>
201                <xsl:param name="flat"   select="false()"/>
202                <xsl:param name="embedded" />
203                                                       
204                <xsl:choose>
205                        <!-- has children or attributes, existing or potential -->
206                        <xsl:when test="*[namespace-uri(.)!=$geonetUri]|@*|geonet:child|geonet:element/geonet:attribute">
207                       
208                                <xsl:choose>
209                                       
210                                        <!-- display as a list -->
211                                        <xsl:when test="$flat=true()">
212                                               
213                                                <!-- if it does not have children show it as a simple element -->
214                                                <xsl:if test="not(*[namespace-uri(.)!=$geonetUri]|geonet:child|geonet:element/geonet:attribute)">
215                                                        <xsl:apply-templates mode="simpleElement" select=".">
216                                                                <xsl:with-param name="schema" select="$schema"/>
217                                                                <xsl:with-param name="edit"   select="$edit"/>
218                                                        </xsl:apply-templates>
219                                                </xsl:if>
220                                                <!-- existing attributes -->
221                                                <xsl:apply-templates mode="simpleElement" select="@*">
222                                                        <xsl:with-param name="schema" select="$schema"/>
223                                                        <xsl:with-param name="edit"   select="$edit"/>
224                                                </xsl:apply-templates>
225                                                <!-- new attributes -->
226                                                <!-- FIXME
227                                                <xsl:apply-templates mode="elementEP" select="geonet:attribute">
228                                                        <xsl:with-param name="schema" select="$schema"/>
229                                                        <xsl:with-param name="edit"   select="$edit"/>
230                                                </xsl:apply-templates>
231                                                -->
232                                                <!-- existing and new children -->
233                                                <xsl:apply-templates mode="elementEP" select="*[namespace-uri(.)!=$geonetUri]|geonet:child">
234                                                        <xsl:with-param name="schema" select="$schema"/>
235                                                        <xsl:with-param name="edit"   select="$edit"/>
236                                                </xsl:apply-templates>
237                                        </xsl:when>
238                                       
239                                        <!-- display boxed -->
240                                        <xsl:otherwise>
241                                                <xsl:apply-templates mode="complexElement" select=".">
242                                                        <xsl:with-param name="schema" select="$schema"/>
243                                                        <xsl:with-param name="edit"   select="$edit"/>
244                                                </xsl:apply-templates>
245                                        </xsl:otherwise>
246                                </xsl:choose>
247                        </xsl:when>
248
249                        <!-- neither children nor attributes, just text -->
250                        <xsl:otherwise>
251                                <xsl:apply-templates mode="simpleElement" select=".">
252                                        <xsl:with-param name="schema" select="$schema"/>
253                                        <xsl:with-param name="edit"   select="$edit"/>
254                                </xsl:apply-templates>
255                        </xsl:otherwise>
256                       
257                </xsl:choose>
258        </xsl:template>
259       
260        <xsl:template mode="simpleElement" match="*">
261                <xsl:param name="schema"/>
262                <xsl:param name="edit"   select="false()"/>
263                <xsl:param name="title">
264                        <xsl:call-template name="getTitle">
265                                <xsl:with-param name="name"   select="name(.)"/>
266                                <xsl:with-param name="schema" select="$schema"/>
267                        </xsl:call-template>
268                </xsl:param>
269                <xsl:param name="text">
270                        <xsl:call-template name="getElementText">
271                                <xsl:with-param name="schema" select="$schema"/>
272                                <xsl:with-param name="edit"   select="$edit"/>
273                        </xsl:call-template>
274                </xsl:param>
275                <xsl:param name="helpLink">
276                        <xsl:call-template name="getHelpLink">
277                                <xsl:with-param name="name"   select="name(.)"/>
278                                <xsl:with-param name="schema" select="$schema"/>
279                        </xsl:call-template>
280                </xsl:param>
281               
282                <xsl:choose>
283                        <xsl:when test="$edit=true()">
284                                <xsl:call-template name="editSimpleElement">
285                                        <xsl:with-param name="schema"   select="$schema"/>
286                                        <xsl:with-param name="title"    select="$title"/>
287                                        <xsl:with-param name="text"     select="$text"/>
288                                        <xsl:with-param name="helpLink" select="$helpLink"/>
289                                </xsl:call-template>
290                        </xsl:when>
291                        <xsl:otherwise>
292                                <xsl:call-template name="showSimpleElement">
293                                        <xsl:with-param name="schema"   select="$schema"/>
294                                        <xsl:with-param name="title"    select="$title"/>
295                                        <xsl:with-param name="text"     select="$text"/>
296                                        <xsl:with-param name="helpLink" select="$helpLink"/>
297                                </xsl:call-template>
298                        </xsl:otherwise>
299                </xsl:choose>
300        </xsl:template>
301
302        <xsl:template mode="simpleElement" match="@*">
303                <xsl:param name="schema"/>
304                <xsl:param name="edit"   select="false()"/>
305                <xsl:param name="title">
306                        <xsl:call-template name="getTitle">
307                                <xsl:with-param name="name"   select="name(.)"/>
308                                <xsl:with-param name="schema" select="$schema"/>
309                        </xsl:call-template>
310                </xsl:param>
311                <xsl:param name="text">
312                        <xsl:call-template name="getAttributeText">
313                                <xsl:with-param name="schema" select="$schema"/>
314                                <xsl:with-param name="edit"   select="$edit"/>
315                        </xsl:call-template>
316                </xsl:param>
317                <xsl:param name="helpLink">
318                        <xsl:call-template name="getHelpLink">
319                                <xsl:with-param name="name"   select="name(.)"/>
320                                <xsl:with-param name="schema" select="$schema"/>
321                        </xsl:call-template>
322                </xsl:param>
323               
324                <xsl:choose>
325                        <xsl:when test="$edit=true()">
326                                <xsl:call-template name="editAttribute">
327                                        <xsl:with-param name="schema"   select="$schema"/>
328                                        <xsl:with-param name="title"    select="$title"/>
329                                        <xsl:with-param name="text"     select="$text"/>
330                                        <xsl:with-param name="helpLink" select="$helpLink"/>
331                                </xsl:call-template>
332                        </xsl:when>
333                        <xsl:otherwise>
334                                <xsl:call-template name="showSimpleElement">
335                                        <xsl:with-param name="schema"   select="$schema"/>
336                                        <xsl:with-param name="title"    select="$title"/>
337                                        <xsl:with-param name="text"     select="$text"/>
338                                        <xsl:with-param name="helpLink" select="$helpLink"/>
339                                </xsl:call-template>
340                        </xsl:otherwise>
341                </xsl:choose>
342        </xsl:template>
343
344        <xsl:template mode="complexElement" match="*">
345                <xsl:param name="schema"/>
346                <xsl:param name="edit"   select="false()"/>
347                <xsl:param name="title">
348                        <xsl:call-template name="getTitle">
349                                <xsl:with-param name="name"   select="name(.)"/>
350                                <xsl:with-param name="schema" select="$schema"/>
351                        </xsl:call-template>
352                </xsl:param>
353                <xsl:param name="content">
354                        <xsl:call-template name="getContent">
355                                <xsl:with-param name="schema" select="$schema"/>
356                                <xsl:with-param name="edit"   select="$edit"/>
357                        </xsl:call-template>
358                </xsl:param>
359                <xsl:param name="helpLink">
360                        <xsl:call-template name="getHelpLink">
361                                <xsl:with-param name="name"   select="name(.)"/>
362                                <xsl:with-param name="schema" select="$schema"/>
363                        </xsl:call-template>
364                </xsl:param>
365               
366                <xsl:choose>
367                        <xsl:when test="$edit=true()">
368                                <xsl:call-template name="editComplexElement">
369                                        <xsl:with-param name="schema"   select="$schema"/>
370                                        <xsl:with-param name="title"    select="$title"/>
371                                        <xsl:with-param name="content"  select="$content"/>
372                                        <xsl:with-param name="helpLink" select="$helpLink"/>
373                                </xsl:call-template>
374                        </xsl:when>
375                        <xsl:otherwise>
376                                <xsl:call-template name="showComplexElement">
377                                        <xsl:with-param name="schema"   select="$schema"/>
378                                        <xsl:with-param name="title"    select="$title"/>
379                                        <xsl:with-param name="content"  select="$content"/>
380                                        <xsl:with-param name="helpLink" select="$helpLink"/>
381                                </xsl:call-template>
382                        </xsl:otherwise>
383                </xsl:choose>
384               
385        </xsl:template>
386       
387        <!--
388        prevent drawing of geonet:* elements
389        -->
390    <xsl:template mode="element" match="geonet:null|geonet:element|geonet:info|geonet:attribute|geonet:schematronerrors|@geonet:xsderror|@xlink:type|@gco:isoType|@gco:nilReason"/>
391    <xsl:template mode="simpleElement" match="geonet:null|geonet:element|geonet:info|geonet:attribute|geonet:schematronerrors|@geonet:xsderror|@xlink:type|@gco:isoType|@gco:nilReason"/>
392    <xsl:template mode="complexElement" match="geonet:null|geonet:element|geonet:info|geonet:attribute|geonet:schematronerrors|@geonet:xsderror|@xlink:type|@gco:isoType|@gco:nilReason"/>
393       
394        <!--
395        prevent drawing of attributes starting with "_", used in old GeoNetwork versions
396        -->
397        <xsl:template mode="simpleElement" match="@*[starts-with(name(.),'_')]"/>
398       
399        <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
400        <!-- elements/attributes templates -->
401        <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
402       
403        <!--
404        shows a simple element
405        -->
406        <xsl:template name="showSimpleElement">
407                <xsl:param name="schema"/>
408                <xsl:param name="title"/>
409                <xsl:param name="text"/>
410                <xsl:param name="helpLink"/>
411       
412                <!-- don't show it if there isn't anything in it! -->
413                <xsl:if test="normalize-space($text)!=''">
414                        <xsl:call-template name="simpleElementGui">
415                                <xsl:with-param name="title" select="$title"/>
416                                <xsl:with-param name="text" select="$text"/>
417                                <xsl:with-param name="helpLink" select="$helpLink"/>
418                        </xsl:call-template>
419                </xsl:if>
420        </xsl:template>
421       
422        <!--
423        shows a complex element
424        -->
425        <xsl:template name="showComplexElement">
426                <xsl:param name="schema"/>
427                <xsl:param name="title"/>
428                <xsl:param name="content"/>
429                <xsl:param name="helpLink"/>
430       
431                <!-- don't show it if there isn't anything in it! -->
432                <xsl:if test="normalize-space($content)!=''">
433                        <xsl:call-template name="complexElementGui">
434                                <xsl:with-param name="title" select="$title"/>
435                                <xsl:with-param name="text" select="text()"/>
436                                <xsl:with-param name="content" select="$content"/>
437                                <xsl:with-param name="helpLink" select="$helpLink"/>
438                                <xsl:with-param name="schema" select="$schema"/>
439                        </xsl:call-template>
440                </xsl:if>
441
442        </xsl:template>
443       
444        <!--
445        shows editable fields for a simple element
446        -->
447        <xsl:template name="editSimpleElement">
448                <xsl:param name="schema"/>
449                <xsl:param name="title"/>
450                <xsl:param name="text"/>
451                <xsl:param name="helpLink"/>
452               
453                <!-- if it's the last brother of it's type and there is a new brother make addLink -->
454
455                <xsl:variable name="id" select="geonet:element/@uuid"/>
456                <xsl:variable name="addLink">
457                        <xsl:call-template name="addLink">
458                                <xsl:with-param name="id" select="$id"/>
459                        </xsl:call-template>
460                </xsl:variable>
461                <xsl:variable name="addXMLFragment">
462                        <xsl:call-template name="addXMLFragment">
463                                <xsl:with-param name="id" select="$id"/>
464                        </xsl:call-template>
465                </xsl:variable>
466                <xsl:variable name="removeLink">
467                        <xsl:value-of select="concat('doRemoveElementAction(',$apos,'/metadata.elem.delete',$apos,',',geonet:element/@ref,',',geonet:element/@parent,',',$apos,$id,$apos,',',geonet:element/@min,');')"/>
468                        <xsl:if test="not(geonet:element/@del='true')">
469                                <xsl:text>!OPTIONAL</xsl:text>
470                        </xsl:if>
471                </xsl:variable>
472                <xsl:variable name="upLink">
473                        <xsl:value-of select="concat('doMoveElementAction(',$apos,'/metadata.elem.up',$apos,',',geonet:element/@ref,',',$apos,$id,$apos,');')"/>
474                        <xsl:if test="not(geonet:element/@up='true')">
475                                <xsl:text>!OPTIONAL</xsl:text>
476                        </xsl:if>
477                </xsl:variable>
478                <xsl:variable name="downLink">
479                        <xsl:value-of select="concat('doMoveElementAction(',$apos,'/metadata.elem.down',$apos,',',geonet:element/@ref,',',$apos,$id,$apos,');')"/>
480                        <xsl:if test="not(geonet:element/@down='true')">
481                                <xsl:text>!OPTIONAL</xsl:text>
482                        </xsl:if>
483                </xsl:variable>
484<!-- xsd and schematron validation info -->
485                <xsl:variable name="validationLink">
486                        <xsl:variable name="ref" select="concat('#_',geonet:element/@ref)"/>
487                        <xsl:call-template name="validationLink">
488                                <xsl:with-param name="ref" select="$ref"/>
489                        </xsl:call-template>
490                </xsl:variable>
491
492                <xsl:call-template name="simpleElementGui">
493                        <xsl:with-param name="title" select="$title"/>
494                        <xsl:with-param name="text" select="$text"/>
495                        <xsl:with-param name="addLink" select="$addLink"/>
496                        <xsl:with-param name="addXMLFragment" select="$addXMLFragment"/>
497                        <xsl:with-param name="removeLink" select="$removeLink"/>
498                        <xsl:with-param name="upLink"     select="$upLink"/>
499                        <xsl:with-param name="downLink"   select="$downLink"/>
500                        <xsl:with-param name="helpLink"   select="$helpLink"/>
501                        <xsl:with-param name="validationLink" select="$validationLink"/>
502                        <xsl:with-param name="edit"       select="true()"/>
503                        <xsl:with-param name="id" select="$id"/>
504                </xsl:call-template>
505        </xsl:template>
506       
507        <!--
508                Template to create validation link popup on XSD errors
509                or schematron errors.
510                -->
511        <xsl:template name="validationLink">
512                <xsl:param name="ref"/>
513               
514                <xsl:if test="@geonet:xsderror
515                        or */@geonet:xsderror
516                        or //svrl:failed-assert[@ref=$ref]">
517                        <ul>
518                                <xsl:choose>
519                                        <!-- xsd validation -->
520                                        <xsl:when test="@geonet:xsderror">
521                                                <li><xsl:value-of select="concat(/root/gui/strings/xsdError,': ',@geonet:xsderror)"/></li>
522                                        </xsl:when>
523                                        <!-- some simple elements hide lower elements to remove some
524                                                complexity from the display (eg. gco: in iso19139)
525                                                so check if they have a schematron/xsderror and move it up
526                                                if they do -->
527                                        <xsl:when test="*/@geonet:xsderror">
528                                                <li><xsl:value-of select="concat(/root/gui/strings/xsdError,': ',*/@geonet:xsderror)"/></li>
529                                        </xsl:when>
530                                        <!-- schematrons -->
531                                        <xsl:when test="//svrl:failed-assert[@ref=$ref]">
532                                                <xsl:for-each select="//svrl:failed-assert[@ref=$ref]">
533                                                        <li><xsl:value-of select="preceding-sibling::svrl:active-pattern[1]/@name"/> : <xsl:copy-of select="svrl:text/*"/></li>
534                                                </xsl:for-each>
535                                        </xsl:when>
536                                </xsl:choose>
537                        </ul>
538                </xsl:if>
539        </xsl:template>
540       
541        <xsl:template name="addLink">
542                <xsl:param name="id"/>
543
544                <xsl:variable name="name" select="name(.)"/>
545                <xsl:variable name="nextBrother" select="following-sibling::*[1]"/>
546                <xsl:variable name="nb">
547                        <xsl:if test="name($nextBrother)='geonet:child'">
548                                <xsl:choose>
549                                        <xsl:when test="$nextBrother/@prefix=''">
550                                                <xsl:if test="$nextBrother/@name=$name"><xsl:copy-of select="$nextBrother"/></xsl:if>
551                                        </xsl:when>
552                                        <xsl:otherwise>
553                                                <xsl:if test="concat($nextBrother/@prefix,':',$nextBrother/@name)=$name">
554                                                        <xsl:copy-of select="$nextBrother"/>
555                                                </xsl:if>
556                                        </xsl:otherwise>
557                                </xsl:choose>
558                        </xsl:if>
559                </xsl:variable>
560                <xsl:variable name="newBrother" select="exslt:node-set($nb)"/>
561
562                <xsl:choose>
563                        <!-- place + because schema insists ie. next element is geonet:child -->
564                        <xsl:when test="$newBrother/* and not($newBrother/*/geonet:choose)">
565                                <xsl:value-of select="concat('doNewElementAction(',$apos,'/metadata.elem.add',$apos,',',geonet:element/@parent,',',$apos,name(.),$apos,',',$apos,$id,$apos,',',$apos,'add',$apos,',',geonet:element/@max,');')"/>
566                        </xsl:when>
567                        <!-- place optional + for use when re-ordering etc -->
568                        <xsl:when test="geonet:element/@add='true' and name($nextBrother)=name(.)">
569                                <xsl:value-of select="concat('doNewElementAction(',$apos,'/metadata.elem.add',$apos,',',geonet:element/@parent,',',$apos,name(.),$apos,',',$apos,$id,$apos,',',$apos,'add',$apos,',',geonet:element/@max,');!OPTIONAL')"/>
570                        </xsl:when>
571                        <!-- place + because schema insists but no geonet:child nextBrother
572                             this case occurs in the javascript handling of the + -->
573                        <xsl:when test="geonet:element/@add='true' and not($newBrother/*/geonet:choose)">
574                                <xsl:value-of select="concat('doNewElementAction(',$apos,'/metadata.elem.add',$apos,',',geonet:element/@parent,',',$apos,name(.),$apos,',',$apos,$id,$apos,',',$apos,'add',$apos,',',geonet:element/@max,');')"/>
575                        </xsl:when>
576                </xsl:choose>
577        </xsl:template>
578       
579        <!--
580                Add elements : will popup a remote element selector
581                and add the XML fragment in the metadata
582        -->
583        <xsl:template name="addXMLFragment">
584                <xsl:param name="id"/>
585               
586                <xsl:variable name="name" select="name(.)"/>
587               
588                <xsl:variable name="function">
589                        <xsl:apply-templates mode="addXMLFragment" select="."/>
590                </xsl:variable>
591                <xsl:choose>
592                        <!-- Create link only when a function is available -->
593                        <xsl:when test="normalize-space($function)!=''">
594
595                                <xsl:variable name="nextBrother" select="following-sibling::*[1]"/>
596                                <xsl:variable name="nb">
597                                        <xsl:if test="name($nextBrother)='geonet:child'">
598                                                <xsl:choose>
599                                                        <xsl:when test="$nextBrother/@prefix=''">
600                                                                <xsl:if test="$nextBrother/@name=$name"><xsl:copy-of select="$nextBrother"/></xsl:if>
601                                                        </xsl:when>
602                                                        <xsl:otherwise>
603                                                                <xsl:if test="concat($nextBrother/@prefix,':',$nextBrother/@name)=$name">
604                                                                        <xsl:copy-of select="$nextBrother"/>
605                                                                </xsl:if>
606                                                        </xsl:otherwise>
607                                                </xsl:choose>
608                                        </xsl:if>
609                                </xsl:variable>
610                               
611                                <xsl:variable name="newBrother" select="exslt:node-set($nb)"/>
612                               
613                                <xsl:choose>
614                                        <!-- place +/x because schema insists ie. next element is geonet:child -->
615                                        <xsl:when test="$newBrother/* and not($newBrother/*/geonet:choose) and $nextBrother/@prefix=''">
616                                                <xsl:value-of select="concat('javascript:', $function, '(',../geonet:element/@ref,',',$apos,$nextBrother/@name,$apos,');')"/>
617                                        </xsl:when>
618                                        <xsl:when test="$newBrother/* and not($newBrother/*/geonet:choose)">
619                                <xsl:value-of select="concat('javascript:', $function, '(',../geonet:element/@ref,',',$apos,$nextBrother/@prefix,':',$nextBrother/@name,$apos,');')"/>
620                                        </xsl:when>
621                                        <!-- place optional +/x for use when re-ordering etc -->
622                            <xsl:when test="geonet:element/@add='true' and name($nextBrother)=name(.)">
623                                <xsl:value-of select="concat('javascript:', $function, '(',../geonet:element/@ref,',',$apos,$nextBrother/@name,$apos,');!OPTIONAL')"/>
624                            </xsl:when>
625                                        <!-- place +/x because schema insists but no geonet:child nextBrother
626                                 this case occurs in the javascript handling of the +/+ -->
627                            <xsl:when test="geonet:element/@add='true' and not($newBrother/*/geonet:choose)">
628                                <xsl:value-of select="concat('javascript:', $function, '(',geonet:element/@parent,',',$apos,$name,$apos,');')"/>
629                            </xsl:when>
630                                </xsl:choose>
631                        </xsl:when>
632                </xsl:choose>
633               
634        </xsl:template>
635       
636        <!--
637        shows editable fields for an attribute
638        -->
639        <!-- FIXME: not schema-configurable -->
640        <xsl:template name="editAttribute">
641                <xsl:param name="schema"/>
642                <xsl:param name="title"/>
643                <xsl:param name="text"/>
644                <xsl:param name="helpLink"/>
645               
646                <xsl:variable name="name" select="name(.)"/>
647                <xsl:variable name="value" select="string(.)"/>
648                <xsl:call-template name="simpleElementGui">
649                        <xsl:with-param name="title" select="$title"/>
650                        <xsl:with-param name="text" select="$text"/>
651                        <xsl:with-param name="helpLink" select="$helpLink"/>
652                        <xsl:with-param name="edit"     select="true()"/>
653                </xsl:call-template>
654        </xsl:template>
655       
656        <!--
657        shows editable fields for a complex element
658        -->
659        <xsl:template name="editComplexElement">
660                <xsl:param name="schema"/>
661                <xsl:param name="title"/>
662                <xsl:param name="content"/>
663                <xsl:param name="helpLink"/>
664               
665                <xsl:variable name="id" select="geonet:element/@uuid"/>
666                <xsl:variable name="addLink">
667                        <xsl:call-template name="addLink">
668                                <xsl:with-param name="id" select="$id"/>
669                        </xsl:call-template>
670                </xsl:variable>
671                <xsl:variable name="addXMLFragment">
672                        <xsl:call-template name="addXMLFragment">
673                                <xsl:with-param name="id" select="$id"/>
674                        </xsl:call-template>
675                </xsl:variable>
676                <xsl:variable name="removeLink">
677                        <xsl:value-of select="concat('doRemoveElementAction(',$apos,'/metadata.elem.delete',$apos,',',geonet:element/@ref,',',geonet:element/@parent,',',$apos,$id,$apos,',',geonet:element/@min,');')"/>
678                        <xsl:if test="not(geonet:element/@del='true')">
679                                <xsl:text>!OPTIONAL</xsl:text>
680                        </xsl:if>
681                </xsl:variable>
682                <xsl:variable name="upLink">
683                        <xsl:value-of select="concat('doMoveElementAction(',$apos,'/metadata.elem.up',$apos,',',geonet:element/@ref,',',$apos,$id,$apos,');')"/>
684                        <xsl:if test="not(geonet:element/@up='true')">
685                                <xsl:text>!OPTIONAL</xsl:text>
686                        </xsl:if>
687                </xsl:variable>
688                <xsl:variable name="downLink">
689                        <xsl:value-of select="concat('doMoveElementAction(',$apos,'/metadata.elem.down',$apos,',',geonet:element/@ref,',',$apos,$id,$apos,');')"/>
690                        <xsl:if test="not(geonet:element/@down='true')">
691                                <xsl:text>!OPTIONAL</xsl:text>
692                        </xsl:if>
693                </xsl:variable>
694<!-- xsd and schematron validation info -->
695                <xsl:variable name="validationLink">
696                        <xsl:variable name="ref" select="concat('#_',geonet:element/@ref)"/>
697                        <xsl:call-template name="validationLink">
698                                <xsl:with-param name="ref" select="$ref"/>
699                        </xsl:call-template>
700                </xsl:variable>
701               
702                <xsl:call-template name="complexElementGui">
703                        <xsl:with-param name="title" select="$title"/>
704                        <xsl:with-param name="text" select="text()"/>
705                        <xsl:with-param name="content" select="$content"/>
706                        <xsl:with-param name="addLink" select="$addLink"/>
707                        <xsl:with-param name="addXMLFragment" select="$addXMLFragment"/>
708                        <xsl:with-param name="removeLink" select="$removeLink"/>
709                        <xsl:with-param name="upLink" select="$upLink"/>
710                        <xsl:with-param name="downLink" select="$downLink"/>
711                        <xsl:with-param name="helpLink" select="$helpLink"/>
712                        <xsl:with-param name="validationLink" select="$validationLink"/>
713                        <xsl:with-param name="schema" select="$schema"/>
714                        <xsl:with-param name="edit"   select="true()"/>                 
715                        <xsl:with-param name="id" select="$id"/>
716                </xsl:call-template>
717        </xsl:template>
718       
719        <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
720        <!-- gui templates -->
721        <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
722       
723        <!--
724        gui to show a simple element
725        -->
726        <xsl:template name="simpleElementGui">
727                <xsl:param name="title"/>
728                <xsl:param name="text"/>
729                <xsl:param name="helpLink"/>
730                <xsl:param name="addLink"/>
731                <xsl:param name="addXMLFragment"/>
732                <xsl:param name="removeLink"/>
733                <xsl:param name="upLink"/>
734                <xsl:param name="downLink"/>
735                <xsl:param name="validationLink"/>
736                <xsl:param name="schema"/>
737                <xsl:param name="edit" select="false()"/>
738                <xsl:param name="id" select="generate-id(.)"/>
739                <xsl:param name="visible" select="true()"/>
740
741                <xsl:variable name="isXLinked" select="count(ancestor-or-self::node()[@xlink:href]) > 0" />
742                <xsl:variable name="geonet" select="starts-with(name(.),'geonet:')"/>
743
744                <tr id="{$id}" type="metadata">
745                        <xsl:if test="not($visible)">
746                                <xsl:attribute name="style">
747                                        display:none;
748                                </xsl:attribute>
749                        </xsl:if>
750                        <th class="md" width="20%" valign="top">
751                                <xsl:choose>
752                                        <xsl:when test="$isXLinked">
753                                                <xsl:attribute name="class">md xlinked</xsl:attribute>
754                                        </xsl:when>
755                                        <xsl:otherwise>
756                                                <xsl:attribute name="class">md</xsl:attribute>
757                                        </xsl:otherwise>
758                                </xsl:choose>
759                       
760                                <xsl:choose>
761                                        <xsl:when test="$helpLink!=''">
762                                                <span id="stip.{$helpLink}|{$id}" onclick="toolTip(this.id);" class="content" style="cursor:help;">
763                                                        <xsl:value-of select="$title"/>
764                                                </span>
765                                                <xsl:call-template name="asterisk">
766                                                        <xsl:with-param name="link" select="$removeLink"/>
767                                                        <xsl:with-param name="edit" select="$edit"/>
768                                                </xsl:call-template>
769                                        </xsl:when>
770                                        <xsl:otherwise>
771                                                <xsl:call-template name="showTitleWithTag">
772                                                        <xsl:with-param name="title" select="$title"/>
773                                                </xsl:call-template>
774                                        </xsl:otherwise>
775                                </xsl:choose>
776                                <xsl:text>&#160;</xsl:text>
777                                <xsl:if test="$edit and not($isXLinked)">
778                                        <xsl:call-template name="getButtons">
779                                                <xsl:with-param name="addLink" select="$addLink"/>
780                                                <xsl:with-param name="addXMLFragment" select="$addXMLFragment"/>
781                                                <xsl:with-param name="removeLink" select="$removeLink"/>
782                                                <xsl:with-param name="upLink" select="$upLink"/>
783                                                <xsl:with-param name="downLink" select="$downLink"/>
784                                                <xsl:with-param name="validationLink" select="$validationLink"/>
785                                                <xsl:with-param name="id" select="$id"/>
786                                        </xsl:call-template>
787                                </xsl:if>
788                        </th>
789                        <td class="padded" valign="top">
790                       
791                                <xsl:variable name="textnode" select="exslt:node-set($text)"/>
792                                <xsl:choose>
793                                        <xsl:when test="$edit">
794                                                <xsl:copy-of select="$text"/>
795                                        </xsl:when>
796                                        <xsl:when test="count($textnode/*) &gt; 0">
797                                        <!-- In some templates, text already contains HTML (eg. codelist, link for download).
798                                                In that case copy text content and does not resolve
799                                                hyperlinks. -->
800                                                <xsl:copy-of select="$text"/>
801                                        </xsl:when>
802                                        <xsl:otherwise>
803                                                <xsl:call-template name="addLineBreaksAndHyperlinks">
804                                                        <xsl:with-param name="txt" select="$text"/>
805                                                </xsl:call-template>
806                                        </xsl:otherwise>
807                                </xsl:choose>                   
808                        </td>
809                </tr>
810        </xsl:template>
811        <!--
812        gui to show a title and do special mapping for container elements
813        -->
814        <xsl:template name="showTitleWithTag">
815                <xsl:param name="title"/>
816                <xsl:param name="class"/>
817                <xsl:variable name="shortTitle" select="normalize-space($title)"/>
818                <xsl:variable name="conthelp" select="concat('This is a container element name - you can give it a title and help by entering some help for ',$shortTitle,' in the help file')"/>
819                <xsl:variable name="nohelp" select="concat('This is an element/attribute name - you can give it a title and help by entering some help for ',$shortTitle,' in the help file')"/>
820
821                <xsl:choose>
822                        <xsl:when test="contains($title,'CHOICE_ELEMENT')">
823                                <a class="{$class}" title="{$conthelp}">Choice</a>
824                        </xsl:when>
825                        <xsl:when test="contains($title,'GROUP_ELEMENT')">
826                                <a class="{$class}" title="{$conthelp}">Group</a>
827                        </xsl:when>
828                        <xsl:when test="contains($title,'SEQUENCE_ELEMENT')">
829                                <a class="{$class}" title="{$conthelp}">Sequence</a>
830                        </xsl:when>
831                        <xsl:otherwise>
832                                <a class="{$class}" title="{$nohelp}"><xsl:value-of select="$title"/></a>
833                        </xsl:otherwise>
834                </xsl:choose>
835        </xsl:template>
836        <!--
837        gui to show a complex element
838        -->
839        <xsl:template name="complexElementGui">
840                <xsl:param name="title"/>
841                <xsl:param name="text"/>
842                <xsl:param name="content"/>
843                <xsl:param name="helpLink"/>
844                <xsl:param name="addLink"/>
845                <xsl:param name="addXMLFragment"/>
846                <xsl:param name="removeLink"/>
847                <xsl:param name="upLink"/>
848                <xsl:param name="downLink"/>
849                <xsl:param name="validationLink"/>
850                <xsl:param name="schema"/>
851                <xsl:param name="edit" select="false()"/>
852                <xsl:param name="id" select="generate-id(.)"/>
853       
854                <xsl:variable name="isXLinked" select="count(ancestor::node()[@xlink:href]) > 0" />
855
856                <tr id="{$id}" type="metadata">
857                        <td class="padded-content" width="100%" colspan="2">
858                                <fieldset class="metadata-block">
859                                        <legend class="block-legend">
860                                                <xsl:if test="/root/gui/config/metadata-view-toggleTab">
861                                                        <input id="toggle{$id}" type="checkbox" class="toggle"
862                                                                onclick="$('toggled{$id}').style.display=($(this.id).checked?'none':'block');"
863                                                        />
864                                                        <!--
865                                                                Toggle mechanism could have been achieved without any JS but pure CSS
866                                                                input.toggle { display: block; }
867                                                                input.toggle:checked+table { display: none; }
868                                                               
869                                                                Issue is IE does not support pseudo class selection checked.
870                                                         -->
871                                                </xsl:if>
872                                                <xsl:choose>
873                                                        <xsl:when test="$helpLink!=''">
874                                                                <span id="stip.{$helpLink}|{$id}" onclick="toolTip(this.id);" class="content" style="cursor:help;"><xsl:value-of select="$title"/>
875                                                                </span>
876                                                                <!-- Only show asterisks on simpleElements - user has to know
877                                                                        which ones to fill out
878                                                                        <xsl:call-template name="asterisk">
879                                                                        <xsl:with-param name="link" select="$helpLink"/>
880                                                                        <xsl:with-param name="edit" select="$edit"/>
881                                                                        </xsl:call-template>
882                                                                -->
883                                                        </xsl:when>
884                                                        <xsl:otherwise>
885                                                                <xsl:call-template name="showTitleWithTag">
886                                                                        <xsl:with-param name="title" select="$title"/>
887                                                                        <xsl:with-param name="class" select="'no-help'"/>
888                                                                </xsl:call-template>
889                                                        </xsl:otherwise>
890                                                </xsl:choose>
891                                               
892                                                <xsl:if test="$edit and not($isXLinked)">
893                                                        <xsl:call-template name="getButtons">
894                                                                <xsl:with-param name="addLink" select="$addLink"/>
895                                                                <xsl:with-param name="addXMLFragment" select="$addXMLFragment"/>
896                                                                <xsl:with-param name="removeLink" select="$removeLink"/>
897                                                                <xsl:with-param name="upLink" select="$upLink"/>
898                                                                <xsl:with-param name="downLink" select="$downLink"/>
899                                                                <xsl:with-param name="validationLink" select="$validationLink"/>
900                                                                <xsl:with-param name="id" select="$id"/>
901                                                        </xsl:call-template>
902                                                </xsl:if>
903                                        </legend>
904                                        <table width="100%" id="toggled{$id}">
905                                                <xsl:copy-of select="$content"/>
906                                        </table>
907                                </fieldset>
908                        </td>
909                </tr>
910        </xsl:template>
911       
912        <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
913        <!-- utility templates -->
914        <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
915
916
917    <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
918    <!-- utility templates -->
919    <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
920
921    <xsl:template name="getXPath">
922        <xsl:for-each select="ancestor-or-self::*">
923            <xsl:if test="not(position() = 1)">
924                <xsl:value-of select="name()" />
925            </xsl:if>
926            <xsl:if test="not(position() = 1) and not(position() = last())">
927                <xsl:text>/</xsl:text>
928            </xsl:if>
929        </xsl:for-each>
930        <!-- Check if is an attribute: http://www.dpawson.co.uk/xsl/sect2/nodetest.html#d7610e91 -->
931        <xsl:if test="count(. | ../@*) = count(../@*)">/@<xsl:value-of select="name()" /></xsl:if>
932    </xsl:template>
933
934
935    <xsl:template name="getTitleColor">
936        <xsl:param name="name"/>
937        <xsl:param name="schema"/>
938
939        <xsl:variable name="fullContext">
940            <xsl:call-template name="getXPath" />
941        </xsl:variable>
942
943        <xsl:variable name="context" select="name(parent::node())"/>
944        <xsl:variable name="contextIsoType" select="parent::node()/@gco:isoType"/>
945
946        <xsl:variable name="color">
947            <xsl:choose>
948                <xsl:when test="starts-with($schema,'iso19139')">
949
950                    <!-- Name with context in current schema -->
951                    <xsl:variable name="colorTitleWithContext"
952                                  select="string(/root/gui/*[name(.)=$schema]
953                                  /element[@name=$name and (@context=$fullContext or @context=$context or @context=$contextIsoType)]
954                                  /label_color)"/>
955
956                    <!-- Name with context in base schema -->
957                    <xsl:variable name="colorTitleWithContextIso"
958                        select="string(/root/gui/iso19139/element[@name=$name and (@context=$fullContext or @context=$context or @context=$contextIsoType)]
959                        /label_color)"/>
960
961                    <!-- Name in current schema -->
962                    <xsl:variable name="colorTitle" select="string(/root/gui/*[name(.)=$schema]/element[@name=$name and not(@context)]/label_color)"/>
963
964                    <xsl:choose>
965
966                        <xsl:when test="normalize-space($colorTitle)='' and
967                                        normalize-space($colorTitleWithContext)='' and
968                                        normalize-space($colorTitleWithContextIso)=''">
969                            <xsl:value-of select="string(/root/gui/iso19139/element[@name=$name]/label_color)"/>
970                        </xsl:when>
971                        <xsl:when test="normalize-space($colorTitleWithContext)='' and
972                                        normalize-space($colorTitleWithContextIso)=''">
973                                <xsl:value-of select="$colorTitle"/>
974                        </xsl:when>
975                        <xsl:otherwise>
976                                <xsl:value-of select="$colorTitleWithContext"/>
977                        </xsl:otherwise>
978                    </xsl:choose>
979                </xsl:when>
980
981                <!-- otherwise just get the title out of the approriate schema help file -->
982
983                <xsl:otherwise>
984                    <xsl:value-of select="string(/root/gui/*[name(.)=$schema]/element[@name=$name]/label_color)"/>
985                </xsl:otherwise>
986            </xsl:choose>
987        </xsl:variable>
988
989        <xsl:value-of select="$color"/>
990    </xsl:template>
991
992
993    <!--
994        Returns the title of an element. If the schema is an ISO profil then search:
995        * the ISO profil help first
996        * with context (ie. context is the class where the element is defined)
997        * with no context
998        and if not found search the iso19139 main help.
999
1000        If not iso based, search in corresponding schema.
1001
1002        If not found return the element name between "[]".
1003    -->
1004    <xsl:template name="getTitle">
1005        <xsl:param name="name"/>
1006        <xsl:param name="schema"/>
1007
1008        <xsl:variable name="fullContext">
1009            <xsl:call-template name="getXPath" />
1010        </xsl:variable>
1011
1012        <xsl:variable name="context" select="name(parent::node())"/>
1013        <xsl:variable name="contextIsoType" select="parent::node()/@gco:isoType"/>
1014
1015        <xsl:variable name="title">
1016            <xsl:choose>
1017                <xsl:when test="starts-with($schema,'iso19139')">
1018
1019                    <!-- Name with context in current schema -->
1020                    <xsl:variable name="schematitleWithContext"
1021                                  select="string(/root/gui/*[name(.)=$schema]
1022                                  /element[@name=$name and (@context=$fullContext or @context=$context or @context=$contextIsoType)]
1023                                  /label)"/>
1024
1025                    <!-- Name with context in base schema -->
1026                    <xsl:variable name="schematitleWithContextIso"
1027                        select="string(/root/gui/iso19139/element[@name=$name and (@context=$fullContext or @context=$context or @context=$contextIsoType)]
1028                        /label)"/>
1029
1030                    <!-- Name in current schema -->
1031                    <xsl:variable name="schematitle" select="string(/root/gui/*[name(.)=$schema]/element[@name=$name and not(@context)]/label)"/>
1032
1033                    <xsl:choose>
1034
1035                        <xsl:when test="normalize-space($schematitle)='' and
1036                                        normalize-space($schematitleWithContext)='' and
1037                                        normalize-space($schematitleWithContextIso)=''">
1038                            <xsl:value-of select="string(/root/gui/iso19139/element[@name=$name]/label)"/>
1039                        </xsl:when>
1040                        <xsl:when test="normalize-space($schematitleWithContext)='' and
1041                                        normalize-space($schematitleWithContextIso)=''">
1042                                <xsl:value-of select="$schematitle"/>
1043                        </xsl:when>
1044                        <xsl:otherwise>
1045                                <xsl:value-of select="$schematitleWithContext"/>
1046                        </xsl:otherwise>
1047
1048                    </xsl:choose>
1049                </xsl:when>
1050
1051                <!-- otherwise just get the title out of the approriate schema help file -->
1052
1053                <xsl:otherwise>
1054                    <xsl:value-of select="string(/root/gui/*[name(.)=$schema]/element[@name=$name]/label)"/>
1055                </xsl:otherwise>
1056            </xsl:choose>
1057        </xsl:variable>
1058
1059
1060        <xsl:choose>
1061            <xsl:when test="normalize-space($title)!=''">
1062                <xsl:value-of select="$title"/>
1063            </xsl:when>
1064            <xsl:otherwise>
1065                <xsl:value-of select="$name"/>
1066            </xsl:otherwise>
1067        </xsl:choose>
1068    </xsl:template>
1069
1070        <!--
1071        returns the text of an element
1072        -->
1073        <xsl:template name="getElementText">
1074                <xsl:param name="schema"/>
1075                <xsl:param name="edit" select="false()"/>
1076                <xsl:param name="rows" select="1"/>
1077                <xsl:param name="cols" select="40"/>
1078                <xsl:param name="langId"/>
1079                <xsl:param name="visible" select="true"/>
1080                <!-- Add javascript validator function. By default, if element
1081                is mandatory a non empty validator is defined. -->
1082                <xsl:param name="validator"/>
1083                <!-- Use input_type parameter to create an hidden field.
1084                Default is a text input. -->
1085                <xsl:param name="input_type">text</xsl:param>
1086                <!-- Set to true no_name parameter in order to create an element
1087                which will not be submitted to the form. -->
1088                <xsl:param name="no_name" select="false()" />
1089
1090               
1091                <xsl:variable name="name"  select="name(.)"/>
1092                <xsl:variable name="value" select="string(.)"/>
1093                <xsl:variable name="isXLinked" select="count(ancestor-or-self::node()[@xlink:href]) > 0" />             
1094                                                       
1095                <xsl:choose>
1096                        <!-- list of values -->
1097                        <xsl:when test="geonet:element/geonet:text">
1098
1099                                <xsl:variable name="mandatory" select="geonet:element/@min='1' and
1100                                                                geonet:element/@max='1'"/>
1101                                                       
1102                                <!-- This code is mainly run under FGDC
1103                                but also for enumeration like topic category and
1104                                service parameter direction in ISO.
1105                               
1106                                Create a temporary list and retrive label in
1107                                current gui language which is sorted after. -->                         
1108                                <xsl:variable name="list">
1109                                        <items>
1110                                                <xsl:for-each select="geonet:element/geonet:text">
1111                                                        <xsl:variable name="choiceValue" select="string(@value)"/>                                                     
1112                                                        <xsl:variable name="label" select="/root/gui/*[name(.)=$schema]/codelist[@name = $name]/entry[code = $choiceValue]/label"/>
1113                                                       
1114                                                        <item>
1115                                                                <value>
1116                                                                        <xsl:value-of select="@value"/>
1117                                                                </value>
1118                                                                <label>
1119                                                                        <xsl:choose>
1120                                                                                <xsl:when test="$label"><xsl:value-of select="$label"/></xsl:when>
1121                                                                                <xsl:otherwise><xsl:value-of select="$choiceValue"/></xsl:otherwise>
1122                                                                        </xsl:choose>                                                                   
1123                                                                </label>
1124                                                        </item>
1125                                                </xsl:for-each>
1126                                        </items>
1127                                </xsl:variable>
1128                                <select class="md" name="_{geonet:element/@ref}" size="1">
1129                                        <xsl:if test="$visible = 'false'">
1130                                                <xsl:attribute name="style">display:none;</xsl:attribute>
1131                                        </xsl:if>
1132                                        <xsl:if test="$isXLinked">
1133                                                <xsl:attribute name="disabled">disabled</xsl:attribute>
1134                                        </xsl:if>
1135                                        <xsl:if test="$mandatory and $edit">
1136                                                <xsl:attribute name="onchange">
1137                                                        validateNonEmpty(this);
1138                                                </xsl:attribute>
1139                                        </xsl:if>
1140                                        <option name=""/>
1141                                        <xsl:for-each select="exslt:node-set($list)//item">
1142                                                <xsl:sort select="label"/>
1143                                                <option>
1144                                                        <xsl:if test="value=$value">
1145                                                                <xsl:attribute name="selected"/>
1146                                                        </xsl:if>
1147                                                        <xsl:attribute name="value"><xsl:value-of select="value"/></xsl:attribute>
1148                                                        <xsl:value-of select="label"/>
1149                                                </option>
1150                                        </xsl:for-each>
1151                                </select>
1152                        </xsl:when>
1153                        <xsl:when test="$edit=true() and $rows=1">
1154                                <xsl:choose>
1155                                        <xsl:when test="($schema='dublin-core' and $name='dc:subject') or
1156                                                                        ($schema='fgdc' and $name='themekey') or
1157                                                                        ($schema='iso19115' and $name='keyword') or
1158                                                                        (starts-with($schema,'iso19139') and (name(..)='gmd:keyword'
1159                                                                                or ../@gco:isoType='gmd:keyword'))">
1160                                                <input class="md" type="text" id="_{geonet:element/@ref}" name="_{geonet:element/@ref}" value="{text()}" size="{$cols}">
1161                                                        <xsl:if test="$visible = 'false'">
1162                                                                <xsl:attribute name="style">display:none;</xsl:attribute>
1163                                                        </xsl:if>
1164                                                        <xsl:if test="$isXLinked">
1165                                                                <xsl:attribute name="disabled">disabled</xsl:attribute>
1166                                                        </xsl:if>
1167                                                        <xsl:if test="(
1168                                                                (name(.)='gmd:LocalisedCharacterString' and ../../geonet:element/@min='1')
1169                                                                or ../geonet:element/@min='1'
1170                                                                ) and $edit">
1171                                                                <xsl:attribute name="onkeyup">validateNonEmpty(this);</xsl:attribute>
1172                                                        </xsl:if>
1173                                                </input>
1174
1175                                                <!-- Removed autocompletion div when editing metadata --> 
1176                                                <!--
1177                                                <div id='keywordList' class="keywordList" ></div>
1178                                               
1179                                                <script type="text/javascript">
1180                                                  <xsl:text>var _</xsl:text>
1181                                                  <xsl:value-of select="geonet:element/@ref"/>
1182                                                  <xsl:text>_acurl = "xml.search.keywords?pNewSearch=true&amp;pTypeSearch=1";</xsl:text>
1183                                                 
1184                                                  <xsl:text>var _</xsl:text>
1185                                                  <xsl:value-of select="geonet:element/@ref"/>
1186                                                  <xsl:text>_ac = new Ajax.Autocompleter('_</xsl:text>
1187                                                  <xsl:value-of select="geonet:element/@ref"/>
1188                                                  <xsl:text>', 'keywordList', 'xml.search.keywords?pNewSearch=true&amp;pTypeSearch=1&amp;pMode=search',{method:'get', paramName: 'pKeyword'});</xsl:text>
1189
1190                                                </script>
1191                                                -->
1192
1193                                        </xsl:when>
1194                                       
1195                                        <!-- heikki doeleman: for gco:Boolean, use checkbox.
1196                                        Default value set to false. -->
1197                                        <xsl:when test="name(.)='gco:Boolean'">
1198                                            <input type="hidden" name="_{geonet:element/@ref}" id="_{geonet:element/@ref}" value="{.}">
1199                                                        <xsl:if test="$isXLinked">
1200                                                                <xsl:attribute name="disabled">disabled</xsl:attribute>
1201                                                        </xsl:if>
1202                                                <xsl:choose>
1203                                                    <xsl:when test=". = ''">
1204                                                        <xsl:attribute name="value">false</xsl:attribute>
1205                                                    </xsl:when>
1206                                                    <xsl:otherwise>
1207                                                        <xsl:attribute name="value"><xsl:value-of select="."/></xsl:attribute>
1208                                                    </xsl:otherwise>
1209                                                </xsl:choose>
1210                                            </input>
1211                                           
1212                                                <xsl:choose>
1213                                                    <xsl:when test="text()='true' or text()='1'">
1214                                                                <input class="md" type="checkbox" id="_{geonet:element/@ref}_checkbox" onclick="handleCheckboxAsBoolean(this, '_{geonet:element/@ref}');" checked="checked">
1215                                                                        <xsl:if test="$isXLinked">
1216                                                                                <xsl:attribute name="disabled">disabled</xsl:attribute>
1217                                                                        </xsl:if>
1218                                                                </input>
1219                                                        </xsl:when>
1220                                                        <xsl:otherwise>
1221                                                                <input class="md" type="checkbox" id="_{geonet:element/@ref}_checkbox" onclick="handleCheckboxAsBoolean(this, '_{geonet:element/@ref}');">
1222                                                                        <xsl:if test="$isXLinked">
1223                                                                                <xsl:attribute name="disabled">disabled</xsl:attribute>
1224                                                                        </xsl:if>                                                               
1225                                                                </input>
1226                                                        </xsl:otherwise>
1227                                                </xsl:choose>
1228                                        </xsl:when>
1229
1230                                        <xsl:otherwise>
1231                                                <input class="md" type="{$input_type}" value="{text()}" size="{$cols}">
1232                                                        <xsl:if test="$isXLinked">
1233                                                                <xsl:attribute name="disabled">disabled</xsl:attribute>
1234                                                        </xsl:if>                                               
1235                                                        <xsl:choose>
1236                                                                <xsl:when test="$no_name=false()">
1237                                                                        <xsl:attribute name="name">_<xsl:value-of select="geonet:element/@ref"/></xsl:attribute>
1238                                                                        <xsl:attribute name="id">_<xsl:value-of select="geonet:element/@ref"/></xsl:attribute>
1239                                                                </xsl:when>
1240                                                                <xsl:otherwise>
1241                                                                        <xsl:attribute name="id"><xsl:value-of select="geonet:element/@ref"/></xsl:attribute>
1242                                                                </xsl:otherwise>
1243                                                        </xsl:choose>
1244
1245                                                        <xsl:if test="$visible = 'false'">
1246                                                                <xsl:attribute name="style">display:none;</xsl:attribute>
1247                                                        </xsl:if>
1248                                                       
1249                                                        <xsl:variable name="mandatory" select="(name(.)='gmd:LocalisedCharacterString'
1250                                                                        and ../../geonet:element/@min='1')
1251                                                                        or ../geonet:element/@min='1'"/>
1252                                                       
1253                                                        <xsl:choose>
1254                                                                <!-- Numeric field -->
1255                                                                <xsl:when test="name(.)='gco:Integer' or
1256                                                                        name(.)='gco:Decimal' or name(.)='gco:Real'">
1257                                                                        <xsl:choose>
1258                                                                                <xsl:when test="name(.)='gco:Integer'">
1259                                                                                        <xsl:attribute name="onkeyup">validateNumber(this, <xsl:value-of select="not($mandatory)"/>, false);</xsl:attribute>
1260                                                                                </xsl:when>
1261                                                                                <xsl:otherwise>
1262                                                                                        <xsl:attribute name="onkeyup">validateNumber(this, <xsl:value-of select="not($mandatory)"/>, true);</xsl:attribute>
1263                                                                                </xsl:otherwise>
1264                                                                        </xsl:choose>
1265                                                                </xsl:when>
1266                                                                <!-- Mandatory field (with extra validator) -->
1267                                                                <xsl:when test="$mandatory
1268                                                                        and $edit">
1269                                                                        <xsl:attribute name="onkeyup">
1270                                                                                validateNonEmpty(this);
1271                                                                        </xsl:attribute>
1272                                                                </xsl:when>
1273                                                                <!-- Custom validator -->
1274                                                                <xsl:when test="$validator">
1275                                                                        <xsl:attribute name="onkeyup"><xsl:value-of select="$validator"/></xsl:attribute>
1276                                                                </xsl:when>
1277                                                        </xsl:choose>
1278                                                </input>
1279                                                <xsl:call-template name="helper">
1280                                                        <xsl:with-param name="schema" select="$schema"/>
1281                                                        <xsl:with-param name="attribute" select="false()"/>
1282                                                </xsl:call-template>
1283                                               
1284                                        </xsl:otherwise>
1285                                </xsl:choose>
1286                        </xsl:when>
1287                        <xsl:when test="$edit=true()">
1288                                <textarea class="md" name="_{geonet:element/@ref}" id="_{geonet:element/@ref}" rows="{$rows}" cols="{$cols}">
1289                                        <xsl:if test="$isXLinked">
1290                                                <xsl:attribute name="disabled">disabled</xsl:attribute>
1291                                        </xsl:if>
1292                                        <xsl:if test="$visible = 'false'">
1293                                                <xsl:attribute name="style">display:none;</xsl:attribute>
1294                                        </xsl:if>
1295                                        <xsl:if test="(
1296                                                (name(.)='gmd:LocalisedCharacterString' and ../../geonet:element/@min='1')
1297                                                or ../geonet:element/@min='1'
1298                                                ) and $edit">
1299                                                <xsl:attribute name="onkeyup">validateNonEmpty(this);</xsl:attribute>
1300                                        </xsl:if>
1301                                        <xsl:value-of select="text()"/>
1302                                </textarea>
1303                        </xsl:when>
1304                        <xsl:when test="$edit=false() and $rows!=1">
1305                                <xsl:choose>
1306                                        <xsl:when test="starts-with($schema,'iso19139')">
1307                                                <xsl:apply-templates mode="localised" select="..">
1308                                                        <xsl:with-param name="langId" select="$langId"></xsl:with-param>
1309                                                </xsl:apply-templates>
1310                                        </xsl:when>
1311                                        <xsl:otherwise>
1312                                                <xsl:copy-of select="$value"/>
1313                                        </xsl:otherwise>
1314                                </xsl:choose>
1315                        </xsl:when>
1316                        <xsl:otherwise>
1317                                <!-- not editable text/codelists -->
1318                                <xsl:variable name="label" select="/root/gui/*[name(.)=$schema]/codelist[@name = $name]/entry[code=$value]/label"/>
1319                                <xsl:choose>
1320                                        <xsl:when test="$label"><xsl:value-of select="$label"/></xsl:when>
1321                                        <xsl:when test="starts-with($schema,'iso19139')
1322                                                        and name(.)!='gco:ScopedName' and name(.)!='gco:Date' and name(.)!='gco:DateTime'">
1323                                                <xsl:apply-templates mode="localised" select="..">
1324                                                        <xsl:with-param name="langId" select="$langId"></xsl:with-param>
1325                                                </xsl:apply-templates>
1326                                        </xsl:when>
1327                                        <xsl:otherwise><xsl:value-of select="$value"/></xsl:otherwise>
1328                                </xsl:choose>
1329                        </xsl:otherwise>
1330                </xsl:choose>
1331        </xsl:template>
1332
1333        <!--
1334        returns the text of an attribute
1335        -->
1336        <xsl:template name="getAttributeText">
1337                <xsl:param name="schema"/>
1338                <xsl:param name="edit" select="false()"/>
1339                <xsl:param name="rows" select="1"/>
1340                <xsl:param name="cols" select="40"/>
1341               
1342                <xsl:variable name="name"  select="name(.)"/>
1343                <xsl:variable name="value" select="string(.)"/>
1344                <xsl:variable name="parent"  select="name(..)"/>
1345                <!-- the following variable is used in place of name as a work-around to
1346         deal with qualified attribute names like gml:id
1347                     which if not modified will cause JDOM errors on update because of the
1348                                 way in which changes to ref'd elements are parsed as XML -->
1349                <xsl:variable name="updatename">
1350                  <xsl:choose>
1351                <xsl:when test="contains($name,':')">
1352                  <xsl:value-of select="concat(substring-before($name,':'),'COLON',substring-after($name,':'))"/>
1353                </xsl:when>
1354                <xsl:otherwise>
1355                  <xsl:value-of select="$name"/>
1356                </xsl:otherwise>
1357              </xsl:choose>
1358            </xsl:variable>
1359        <xsl:variable name="isXLinked" select="count(ancestor-or-self::node()[@xlink:href]) > 0" />
1360               
1361                <xsl:choose>
1362                        <!-- list of values -->
1363                        <xsl:when test="../geonet:attribute[string(@name)=$name]/geonet:text">
1364                                <select class="md" name="_{../geonet:element/@ref}_{name(.)}" size="1">
1365                                        <xsl:if test="$isXLinked">
1366                                                <xsl:attribute name="disabled">disabled</xsl:attribute>
1367                                        </xsl:if>
1368                                        <option name=""/>
1369                                        <xsl:for-each select="../geonet:attribute/geonet:text">
1370                                                <option>
1371                                                        <xsl:if test="@value=$value">
1372                                                                <xsl:attribute name="selected"/>
1373                                                        </xsl:if>
1374                                                        <xsl:variable name="choiceValue" select="string(@value)"/>
1375                                                        <xsl:attribute name="value"><xsl:value-of select="$choiceValue"/></xsl:attribute>
1376
1377                                                        <!-- codelist in edit mode -->
1378                                                        <xsl:variable name="label" select="/root/gui/*[name(.)=$schema]/codelist[@name = $parent]/entry[code=$choiceValue]/label"/>
1379                                                        <xsl:choose>
1380                                                                <xsl:when test="$label"><xsl:value-of select="$label"/></xsl:when>
1381                                                                <xsl:otherwise><xsl:value-of select="$choiceValue"/></xsl:otherwise>
1382                                                        </xsl:choose>
1383                                                </option>
1384                                        </xsl:for-each>
1385                                </select>
1386                        </xsl:when>
1387                        <xsl:when test="$edit=true() and $rows=1">
1388                                <input class="md" type="text" id="_{../geonet:element/@ref}_{$updatename}" name="_{../geonet:element/@ref}_{$updatename}" value="{string()}" size="{$cols}" />
1389                               
1390                                <xsl:call-template name="helper">
1391                                        <xsl:with-param name="schema" select="$schema"/>
1392                                        <xsl:with-param name="attribute" select="true()"/>
1393                                </xsl:call-template>
1394                        </xsl:when>
1395                        <xsl:when test="$edit=true()">
1396                                <textarea class="md" name="_{../geonet:element/@ref}_{$updatename}" id="_{../geonet:element/@ref}_{$updatename}" rows="{$rows}" cols="{$cols}">
1397                                        <xsl:value-of select="string()"/>
1398                                </textarea>
1399                        </xsl:when>
1400                        <xsl:otherwise>
1401                                <!-- codelist in view mode -->
1402                                <xsl:variable name="label" select="/root/gui/*[name(.)=$schema]/codelist[@name = $parent]/entry[code = $value]/label"/>
1403                                <xsl:choose>
1404                                        <xsl:when test="$label"><xsl:value-of select="$label"/></xsl:when>
1405                                        <xsl:otherwise><xsl:value-of select="$value"/></xsl:otherwise>
1406                                </xsl:choose>
1407                        </xsl:otherwise>
1408                </xsl:choose>
1409        </xsl:template>
1410
1411        <!--
1412        returns the content of a complex element
1413        -->
1414        <xsl:template name="getContent">
1415                <xsl:param name="schema"/>
1416                <xsl:param name="edit"   select="false()"/>
1417               
1418                <xsl:choose>
1419                        <xsl:when test="$edit=true()">
1420                                <xsl:apply-templates mode="elementEP" select="@*">
1421                                        <xsl:with-param name="schema" select="$schema"/>
1422                                        <xsl:with-param name="edit"   select="true()"/>
1423                                </xsl:apply-templates>
1424                                <xsl:apply-templates mode="elementEP" select="*[namespace-uri(.)!=$geonetUri]|geonet:child">
1425                                        <xsl:with-param name="schema" select="$schema"/>
1426                                        <xsl:with-param name="edit"   select="true()"/>
1427                                </xsl:apply-templates>
1428                        </xsl:when>
1429                        <xsl:otherwise>
1430                                <xsl:apply-templates mode="elementEP" select="@*">
1431                                        <xsl:with-param name="schema" select="$schema"/>
1432                                        <xsl:with-param name="edit"   select="false()"/>
1433                                </xsl:apply-templates>
1434                                <xsl:apply-templates mode="elementEP" select="*">
1435                                        <xsl:with-param name="schema" select="$schema"/>
1436                                        <xsl:with-param name="edit"   select="false()"/>
1437                                </xsl:apply-templates>
1438                        </xsl:otherwise>
1439                </xsl:choose>
1440        </xsl:template>
1441       
1442        <!-- ================================================================================ -->
1443        <!-- returns the help url -->
1444        <!-- ================================================================================ -->
1445       
1446        <xsl:template name="getHelpLink">
1447                <xsl:param name="name"/>
1448                <xsl:param name="schema"/>
1449
1450                <xsl:choose>
1451                        <xsl:when test="contains($name,'_ELEMENT')">
1452                                <xsl:value-of select="''"/>
1453                        </xsl:when>
1454                        <xsl:otherwise>
1455
1456                <xsl:variable name="fullContext">
1457                     <xsl:call-template name="getXPath" />
1458                 </xsl:variable>
1459
1460                 <xsl:value-of select="concat($schema,'|', $name ,'|', name(parent::node()) ,'|', $fullContext ,'|', ../@gco:isoType)"/>               
1461                        </xsl:otherwise>
1462                </xsl:choose>
1463        </xsl:template>
1464       
1465        <!-- ================================================================================ -->
1466       
1467        <xsl:template name="asterisk">
1468                <xsl:param name="link"/>
1469                <xsl:param name="edit"/>
1470
1471                <!-- <xsl:if test="$link='' and not(contains(name(.),'geonet:')) and $edit"> -->
1472                <xsl:if test="geonet:element/@min='1' and $edit">
1473                        <sup><font size="-1" color="#FF0000">&#xA0;*</font></sup>
1474                </xsl:if>
1475        </xsl:template>
1476
1477        <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
1478        <!-- XML formatting -->
1479        <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
1480       
1481        <!--
1482        draws an element as xml document
1483        -->
1484        <xsl:template mode="xmlDocument" match="*">
1485                <xsl:param name="edit" select="false()"/>
1486               
1487                <xsl:choose>
1488                        <xsl:when test="$edit=true()">
1489                                <tr><td>
1490                                        <textarea class="md" name="data" rows="30" cols="100">
1491                                                <xsl:text>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</xsl:text>
1492                                                <xsl:text>&#10;</xsl:text>
1493                                                <xsl:apply-templates mode="editXMLElement" select="."/>
1494                                        </textarea>
1495                                </td></tr>
1496                        </xsl:when>
1497                        <xsl:otherwise>
1498                                <tr><td>
1499                                        <b><xsl:text>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</xsl:text></b><br/>
1500                                        <xsl:apply-templates mode="showXMLElement" select="."/>
1501                                </td></tr>
1502                        </xsl:otherwise>
1503                </xsl:choose>
1504               
1505        </xsl:template>
1506       
1507        <!--
1508        draws an editable element in xml
1509        -->
1510        <xsl:template mode="editXMLElement" match="*">
1511                <xsl:param name="indent"/>
1512                <xsl:choose>
1513
1514                        <!-- has children -->
1515                        <xsl:when test="*[not(starts-with(name(),'geonet:'))]">
1516                                <xsl:if test="not(contains(name(.),'_ELEMENT'))">
1517                                        <xsl:call-template name="editXMLStartTag">
1518                                                <xsl:with-param name="indent" select="$indent"/>
1519                                        </xsl:call-template>
1520                                        <xsl:text>&#10;</xsl:text>
1521                                </xsl:if>
1522                                <xsl:for-each select="*">
1523                                        <xsl:apply-templates select="." mode="editXMLElement">
1524                                                <xsl:with-param name="indent" select="concat($indent, '&#09;')"/>
1525                                        </xsl:apply-templates>
1526                                </xsl:for-each>
1527                                <xsl:if test="not(contains(name(.),'_ELEMENT'))">
1528                                        <xsl:call-template name="editEndTag">
1529                                                <xsl:with-param name="indent" select="$indent"/>
1530                                        </xsl:call-template>
1531                                        <xsl:text>&#10;</xsl:text>
1532                                </xsl:if>
1533                        </xsl:when>
1534                       
1535                        <!-- no children but text -->
1536                        <xsl:when test="text()">
1537                                <xsl:if test="not(contains(name(.),'_ELEMENT'))">
1538                                        <xsl:call-template name="editXMLStartTag">
1539                                                <xsl:with-param name="indent" select="$indent"/>
1540                                        </xsl:call-template>
1541                               
1542                                        <!-- xml entities should be doubly escaped -->
1543                                        <xsl:apply-templates mode="escapeXMLEntities" select="text()"/>
1544                               
1545                                        <xsl:call-template name="editEndTag"/>
1546                                        <xsl:text>&#10;</xsl:text>
1547                                </xsl:if>
1548                        </xsl:when>
1549                       
1550                        <!-- empty element -->
1551                        <xsl:otherwise>
1552                                <xsl:if test="not(contains(name(.),'_ELEMENT'))">
1553                                        <xsl:call-template name="editXMLStartEndTag">
1554                                                <xsl:with-param name="indent" select="$indent"/>
1555                                        </xsl:call-template>
1556                                        <xsl:text>&#10;</xsl:text>
1557                                </xsl:if>
1558                        </xsl:otherwise>
1559                       
1560                </xsl:choose>
1561        </xsl:template>
1562        <!--
1563        draws the start tag of an editable element
1564        -->
1565        <xsl:template name="editXMLStartTag">
1566                <xsl:param name="indent"/>
1567               
1568                <xsl:value-of select="$indent"/>
1569                <xsl:text>&lt;</xsl:text>
1570                <xsl:value-of select="name(.)"/>
1571                <xsl:call-template name="editXMLNamespaces"/>
1572                <xsl:call-template name="editXMLAttributes"/>
1573                <xsl:text>&gt;</xsl:text>
1574        </xsl:template>
1575
1576        <!--
1577        draws the end tag of an editable element
1578        -->
1579        <xsl:template name="editEndTag">
1580                <xsl:param name="indent"/>
1581               
1582                <xsl:value-of select="$indent"/>
1583                <xsl:text>&lt;/</xsl:text>
1584                <xsl:value-of select="name(.)"/>
1585                <xsl:text>&gt;</xsl:text>
1586        </xsl:template>
1587       
1588        <!--
1589        draws the empty tag of an editable element
1590        -->
1591        <xsl:template name="editXMLStartEndTag">
1592                <xsl:param name="indent"/>
1593               
1594                <xsl:value-of select="$indent"/>
1595                <xsl:text>&lt;</xsl:text>
1596                <xsl:value-of select="name(.)"/>
1597                <xsl:call-template name="editXMLNamespaces"/>
1598                <xsl:call-template name="editXMLAttributes"/>
1599                <xsl:text>/&gt;</xsl:text>
1600        </xsl:template>
1601       
1602        <!--
1603        draws attribute of an editable element
1604        -->
1605        <xsl:template name="editXMLAttributes">
1606                <xsl:for-each select="@*">
1607                        <xsl:if test="not(starts-with(name(.),'geonet:'))">
1608                                <xsl:text> </xsl:text>
1609                                <xsl:value-of select="name(.)"/>
1610                                <xsl:text>=</xsl:text>
1611                                        <xsl:text>"</xsl:text>
1612                                        <xsl:value-of select="string()"/>
1613                                        <xsl:text>"</xsl:text>
1614                        </xsl:if>
1615                </xsl:for-each>
1616        </xsl:template>
1617       
1618        <!--
1619        draws namespaces of an editable element
1620        -->
1621        <xsl:template name="editXMLNamespaces">
1622                <xsl:variable name="parent" select=".."/>
1623                <xsl:for-each select="namespace::*">
1624                        <xsl:if test="not(.=$parent/namespace::*) and name()!='geonet'">
1625                                <xsl:text> xmlns</xsl:text>
1626                                <xsl:if test="name()">
1627                                        <xsl:text>:</xsl:text>
1628                                        <xsl:value-of select="name()"/>
1629                                </xsl:if>
1630                                <xsl:text>=</xsl:text>
1631                                <xsl:text>"</xsl:text>
1632                                <xsl:value-of select="string()"/>
1633                                <xsl:text>"</xsl:text>
1634                        </xsl:if>
1635                </xsl:for-each>
1636        </xsl:template>
1637       
1638        <!--
1639        draws an element in xml
1640        -->
1641        <xsl:template mode="showXMLElement" match="*">
1642                <xsl:choose>
1643                       
1644                        <!-- has children -->
1645                        <xsl:when test="*">
1646                                <xsl:call-template name="showXMLStartTag"/>
1647                                <dl>
1648                                        <xsl:for-each select="*">
1649                                                <dd>
1650                                                        <xsl:apply-templates select="." mode="showXMLElement"/>
1651                                                </dd>
1652                                        </xsl:for-each>
1653                                </dl>
1654                                <xsl:call-template name="showEndTag"/>
1655                        </xsl:when>
1656                       
1657                        <!-- no children but text -->
1658                        <xsl:when test="text()">
1659                                <xsl:call-template name="showXMLStartTag"/>
1660                                <xsl:value-of select="text()"/>
1661                                <xsl:call-template name="showEndTag"/>
1662                        </xsl:when>
1663                       
1664                        <!-- empty element -->
1665                        <xsl:otherwise>
1666                                <xsl:call-template name="showXMLStartEndTag"/>
1667                        </xsl:otherwise>
1668                </xsl:choose>
1669        </xsl:template>
1670       
1671        <!--
1672        draws the start tag of an element
1673        -->
1674        <xsl:template name="showXMLStartTag">
1675                        <font color="4444ff">
1676                        <xsl:text>&lt;</xsl:text>
1677                        <b>
1678                                <xsl:value-of select="name(.)"/>
1679                        </b>
1680                        <xsl:call-template name="showXMLNamespaces"/>
1681                        <xsl:call-template name="showXMLAttributes"/>
1682                        <xsl:text>&gt;</xsl:text>
1683                </font>
1684        </xsl:template>
1685
1686        <!--
1687        draws the end tag of an element
1688        -->
1689        <xsl:template name="showEndTag">
1690                <font color="4444ff">
1691                        <xsl:text>&lt;/</xsl:text>
1692                        <b>
1693                                <xsl:value-of select="name(.)"/>
1694                        </b>
1695                        <xsl:text>&gt;</xsl:text>
1696                </font>
1697        </xsl:template>
1698       
1699        <!--
1700        draws the empty tag of an element
1701        -->
1702        <xsl:template name="showXMLStartEndTag">
1703                <font color="4444ff">
1704                        <xsl:text>&lt;</xsl:text>
1705                        <b>
1706                                <xsl:value-of select="name(.)"/>
1707                        </b>
1708                        <xsl:call-template name="showXMLNamespaces"/>
1709                        <xsl:call-template name="showXMLAttributes"/>
1710                        <xsl:text>/&gt;</xsl:text>
1711                </font>
1712        </xsl:template>
1713       
1714        <!--
1715        draws attributes of an element
1716        -->
1717        <xsl:template name="showXMLAttributes">
1718                <xsl:for-each select="@*">
1719                        <xsl:if test="not(starts-with(name(.),'geonet:'))">
1720                                <xsl:text> </xsl:text>
1721                                <xsl:value-of select="name(.)"/>
1722                                <xsl:text>=</xsl:text>
1723                                <font color="ff4444">
1724                                        <xsl:text>"</xsl:text>
1725                                        <xsl:value-of select="string()"/>
1726                                        <xsl:text>"</xsl:text>
1727                                </font>
1728                        </xsl:if>
1729                </xsl:for-each>
1730        </xsl:template>
1731       
1732        <!--
1733        draws namespaces of an element
1734        -->
1735        <xsl:template name="showXMLNamespaces">
1736                <xsl:variable name="parent" select=".."/>
1737                <xsl:for-each select="namespace::*">
1738                        <xsl:if test="not(.=$parent/namespace::*) and name()!='geonet'">
1739                                <xsl:text> xmlns</xsl:text>
1740                                <xsl:if test="name()">
1741                                        <xsl:text>:</xsl:text>
1742                                        <xsl:value-of select="name()"/>
1743                                </xsl:if>
1744                                <xsl:text>=</xsl:text>
1745                                <font color="888844">
1746                                        <xsl:text>"</xsl:text>
1747                                        <xsl:value-of select="string()"/>
1748                                        <xsl:text>"</xsl:text>
1749                                </font>
1750                        </xsl:if>
1751                </xsl:for-each>
1752        </xsl:template>
1753
1754
1755
1756        <!-- Create an helper list for the current input element.
1757                Current input could be an element or an attribute (eg. uom).
1758       
1759        In editing mode, for gco:CharacterString elements (with no codelist
1760        or enumeration defined in the schema) an helper list could be defined
1761        in loc files using the helper tag. Then a list of values
1762        is displayed next to the input field.
1763        -->
1764        <xsl:template name="helper">
1765                <xsl:param name="schema"/>
1766                <xsl:param name="attribute"/>
1767               
1768                <!-- Define the element to look for. -->
1769                <xsl:variable name="parentName">
1770                        <xsl:choose>
1771                                <!-- In dublin core element contains value.
1772                                        In ISO, attribute also but element contains characterString which contains the value -->
1773                                <xsl:when test="$attribute=true() or $schema = 'dublin-core'">
1774                                        <xsl:value-of select="name(.)"/>
1775                                </xsl:when>
1776                                <xsl:otherwise>
1777                                        <xsl:value-of select="name(parent::node())"/>
1778                                </xsl:otherwise>
1779                        </xsl:choose>
1780                </xsl:variable>
1781               
1782                <!-- Look for the helper -->
1783                <xsl:variable name="helper">
1784                        <xsl:choose>
1785                                <xsl:when test="starts-with($schema,'iso19139') and not(/root/gui/*[name(.)=$schema]/element[@name = $parentName]/helper)">
1786                                        <!-- Fallback to iso19139 helper for ISO profil if not exist ... -->
1787                                        <xsl:copy-of select="/root/gui/iso19139/element[@name = $parentName]/helper/*"/>
1788                                </xsl:when>
1789                                <xsl:otherwise>
1790                                        <xsl:copy-of select="/root/gui/*[name(.)=$schema]/element[@name = $parentName]/helper/*"/>
1791                                </xsl:otherwise>
1792                        </xsl:choose>
1793                </xsl:variable>
1794               
1795               
1796                <!-- Display the helper list -->
1797                <xsl:if test="normalize-space($helper)!=''">
1798                        <xsl:variable name="refId">
1799                                <xsl:choose>
1800                                        <xsl:when test="$attribute=true()">
1801                                                <xsl:value-of select="concat(../geonet:element/@ref, '_', name(.))"/>
1802                                        </xsl:when>
1803                                        <xsl:otherwise>
1804                                                <xsl:value-of select="geonet:element/@ref"/>
1805                                        </xsl:otherwise>
1806                                </xsl:choose>
1807                        </xsl:variable>
1808                       
1809                        <xsl:text> </xsl:text>                         
1810                        (<xsl:value-of select="/root/gui/strings/helperList"/>
1811                        <select onchange="$('_{$refId}').value=this.options[this.selectedIndex].value; if ($('_{$refId}').onkeyup) $('_{$refId}').onkeyup();" class="md">
1812                                <option/>
1813                                <!-- This assume that helper list is already sort in alphabetical order in loc file. -->
1814                                <xsl:copy-of select="exslt:node-set($helper)"/>
1815                        </select>)
1816                </xsl:if>
1817        </xsl:template>
1818       
1819
1820        <!--
1821        prevent drawing of geonet:* elements
1822        -->
1823        <xsl:template mode="showXMLElement" match="geonet:*"/>
1824        <xsl:template mode="editXMLElement" match="geonet:*"/>
1825       
1826</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.