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

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

Preliminary customisation for ISIC

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