/[volute]/trunk/projects/dm/vo-dml/xslt/vo-dml.sch.xsl
ViewVC logotype

Contents of /trunk/projects/dm/vo-dml/xslt/vo-dml.sch.xsl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2525 - (show annotations)
Fri Apr 11 04:40:01 2014 UTC (7 years, 5 months ago) by gerard.lemson
File MIME type: application/xml
File size: 20869 byte(s)


1 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2 <xsl:stylesheet xmlns:xhtml="http://www.w3.org/1999/xhtml"
3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4 xmlns:saxon="http://saxon.sf.net/"
5 xmlns:xs="http://www.w3.org/2001/XMLSchema"
6 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
7 xmlns:schold="http://www.ascc.net/xml/schematron"
8 xmlns:iso="http://purl.oclc.org/dsdl/schematron"
9 xmlns:vo-dml="http://volute.googlecode.com/dm/vo-dml/v0.9"
10 xmlns:fct="localFunctions"
11 version="2.0"><!--Implementers: please note that overriding process-prolog or process-root is
12 the preferred method for meta-stylesheets to use where possible. -->
13 <xsl:param name="archiveDirParameter"/>
14 <xsl:param name="archiveNameParameter"/>
15 <xsl:param name="fileNameParameter"/>
16 <xsl:param name="fileDirParameter"/>
17 <xsl:variable name="document-uri">
18 <xsl:value-of select="document-uri(/)"/>
19 </xsl:variable>
20
21 <!--PHASES-->
22
23
24 <!--PROLOG-->
25 <xsl:output xmlns:svrl="http://purl.oclc.org/dsdl/svrl" method="xml"
26 omit-xml-declaration="no"
27 standalone="yes"
28 indent="yes"/>
29
30 <!--XSD TYPES FOR XSLT2-->
31
32
33 <!--KEYS AND FUNCTIONS-->
34 <xsl:function xmlns:sch="http://purl.oclc.org/dsdl/schematron" name="fct:vo-dml_element"
35 as="xs:string">
36 <!-- returns name of element containing the utype identified by the utyperef -->
37 <xsl:param name="utype"/>
38 <xsl:param name="model"/>
39
40 <xsl:variable name="prefix" select="substring-before($utype,':')"/>
41 <xsl:variable name="targetUtype" select="substring-after($utype,concat($prefix,':'))"/>
42 <xsl:choose>
43 <xsl:when test="$prefix = $model/vodml-id">
44 <xsl:value-of select="$model//*[vodml-id = $targetUtype]/name()"/>
45 </xsl:when>
46 <xsl:otherwise>
47 <xsl:variable name="import" select="$model/import[vodml-id = $prefix]/url"/>
48 <xsl:choose>
49 <xsl:when test="$import">
50 <xsl:variable name="doc" select="document($import)"/>
51 <xsl:value-of select="$doc//*[vodml-id = $targetUtype]/name()"/>
52 </xsl:when>
53 <xsl:otherwise>
54 <xsl:value-of select="'ERROR'"/>
55 </xsl:otherwise>
56 </xsl:choose>
57 </xsl:otherwise>
58 </xsl:choose>
59 </xsl:function>
60
61 <!--DEFAULT RULES-->
62
63
64 <!--MODE: SCHEMATRON-SELECT-FULL-PATH-->
65 <!--This mode can be used to generate an ugly though full XPath for locators-->
66 <xsl:template match="*" mode="schematron-select-full-path">
67 <xsl:apply-templates select="." mode="schematron-get-full-path"/>
68 </xsl:template>
69
70 <!--MODE: SCHEMATRON-FULL-PATH-->
71 <!--This mode can be used to generate an ugly though full XPath for locators-->
72 <xsl:template match="*" mode="schematron-get-full-path">
73 <xsl:apply-templates select="parent::*" mode="schematron-get-full-path"/>
74 <xsl:text>/</xsl:text>
75 <xsl:choose>
76 <xsl:when test="namespace-uri()=''">
77 <xsl:value-of select="name()"/>
78 </xsl:when>
79 <xsl:otherwise>
80 <xsl:text>*:</xsl:text>
81 <xsl:value-of select="local-name()"/>
82 <xsl:text>[namespace-uri()='</xsl:text>
83 <xsl:value-of select="namespace-uri()"/>
84 <xsl:text>']</xsl:text>
85 </xsl:otherwise>
86 </xsl:choose>
87 <xsl:variable name="preceding"
88 select="count(preceding-sibling::*[local-name()=local-name(current()) and namespace-uri() = namespace-uri(current())])"/>
89 <xsl:text>[</xsl:text>
90 <xsl:value-of select="1+ $preceding"/>
91 <xsl:text>]</xsl:text>
92 </xsl:template>
93 <xsl:template match="@*" mode="schematron-get-full-path">
94 <xsl:apply-templates select="parent::*" mode="schematron-get-full-path"/>
95 <xsl:text>/</xsl:text>
96 <xsl:choose>
97 <xsl:when test="namespace-uri()=''">@<xsl:value-of select="name()"/>
98 </xsl:when>
99 <xsl:otherwise>
100 <xsl:text>@*[local-name()='</xsl:text>
101 <xsl:value-of select="local-name()"/>
102 <xsl:text>' and namespace-uri()='</xsl:text>
103 <xsl:value-of select="namespace-uri()"/>
104 <xsl:text>']</xsl:text>
105 </xsl:otherwise>
106 </xsl:choose>
107 </xsl:template>
108
109 <!--MODE: SCHEMATRON-FULL-PATH-2-->
110 <!--This mode can be used to generate prefixed XPath for humans-->
111 <xsl:template match="node() | @*" mode="schematron-get-full-path-2">
112 <xsl:for-each select="ancestor-or-self::*">
113 <xsl:text>/</xsl:text>
114 <xsl:value-of select="name(.)"/>
115 <xsl:if test="preceding-sibling::*[name(.)=name(current())]">
116 <xsl:text>[</xsl:text>
117 <xsl:value-of select="count(preceding-sibling::*[name(.)=name(current())])+1"/>
118 <xsl:text>]</xsl:text>
119 </xsl:if>
120 </xsl:for-each>
121 <xsl:if test="not(self::*)">
122 <xsl:text/>/@<xsl:value-of select="name(.)"/>
123 </xsl:if>
124 </xsl:template>
125 <!--MODE: SCHEMATRON-FULL-PATH-3-->
126 <!--This mode can be used to generate prefixed XPath for humans
127 (Top-level element has index)-->
128 <xsl:template match="node() | @*" mode="schematron-get-full-path-3">
129 <xsl:for-each select="ancestor-or-self::*">
130 <xsl:text>/</xsl:text>
131 <xsl:value-of select="name(.)"/>
132 <xsl:if test="parent::*">
133 <xsl:text>[</xsl:text>
134 <xsl:value-of select="count(preceding-sibling::*[name(.)=name(current())])+1"/>
135 <xsl:text>]</xsl:text>
136 </xsl:if>
137 </xsl:for-each>
138 <xsl:if test="not(self::*)">
139 <xsl:text/>/@<xsl:value-of select="name(.)"/>
140 </xsl:if>
141 </xsl:template>
142
143 <!--MODE: GENERATE-ID-FROM-PATH -->
144 <xsl:template match="/" mode="generate-id-from-path"/>
145 <xsl:template match="text()" mode="generate-id-from-path">
146 <xsl:apply-templates select="parent::*" mode="generate-id-from-path"/>
147 <xsl:value-of select="concat('.text-', 1+count(preceding-sibling::text()), '-')"/>
148 </xsl:template>
149 <xsl:template match="comment()" mode="generate-id-from-path">
150 <xsl:apply-templates select="parent::*" mode="generate-id-from-path"/>
151 <xsl:value-of select="concat('.comment-', 1+count(preceding-sibling::comment()), '-')"/>
152 </xsl:template>
153 <xsl:template match="processing-instruction()" mode="generate-id-from-path">
154 <xsl:apply-templates select="parent::*" mode="generate-id-from-path"/>
155 <xsl:value-of select="concat('.processing-instruction-', 1+count(preceding-sibling::processing-instruction()), '-')"/>
156 </xsl:template>
157 <xsl:template match="@*" mode="generate-id-from-path">
158 <xsl:apply-templates select="parent::*" mode="generate-id-from-path"/>
159 <xsl:value-of select="concat('.@', name())"/>
160 </xsl:template>
161 <xsl:template match="*" mode="generate-id-from-path" priority="-0.5">
162 <xsl:apply-templates select="parent::*" mode="generate-id-from-path"/>
163 <xsl:text>.</xsl:text>
164 <xsl:value-of select="concat('.',name(),'-',1+count(preceding-sibling::*[name()=name(current())]),'-')"/>
165 </xsl:template>
166
167 <!--MODE: GENERATE-ID-2 -->
168 <xsl:template match="/" mode="generate-id-2">U</xsl:template>
169 <xsl:template match="*" mode="generate-id-2" priority="2">
170 <xsl:text>U</xsl:text>
171 <xsl:number level="multiple" count="*"/>
172 </xsl:template>
173 <xsl:template match="node()" mode="generate-id-2">
174 <xsl:text>U.</xsl:text>
175 <xsl:number level="multiple" count="*"/>
176 <xsl:text>n</xsl:text>
177 <xsl:number count="node()"/>
178 </xsl:template>
179 <xsl:template match="@*" mode="generate-id-2">
180 <xsl:text>U.</xsl:text>
181 <xsl:number level="multiple" count="*"/>
182 <xsl:text>_</xsl:text>
183 <xsl:value-of select="string-length(local-name(.))"/>
184 <xsl:text>_</xsl:text>
185 <xsl:value-of select="translate(name(),':','.')"/>
186 </xsl:template>
187 <!--Strip characters--><xsl:template match="text()" priority="-1"/>
188
189 <!--SCHEMA SETUP-->
190 <xsl:template match="/">
191 <svrl:schematron-output xmlns:svrl="http://purl.oclc.org/dsdl/svrl" title="Schematron VO-DML Validator"
192 schemaVersion="">
193 <xsl:comment>
194 <xsl:value-of select="$archiveDirParameter"/>  
195 <xsl:value-of select="$archiveNameParameter"/>  
196 <xsl:value-of select="$fileNameParameter"/>  
197 <xsl:value-of select="$fileDirParameter"/>
198 </xsl:comment>
199 <svrl:ns-prefix-in-attribute-values uri="http://volute.googlecode.com/dm/vo-dml/v0.9" prefix="vo-dml"/>
200 <svrl:ns-prefix-in-attribute-values uri="localFunctions" prefix="fct"/>
201 <svrl:active-pattern>
202 <xsl:attribute name="document">
203 <xsl:value-of select="document-uri(/)"/>
204 </xsl:attribute>
205 <xsl:apply-templates/>
206 </svrl:active-pattern>
207 <xsl:apply-templates select="/" mode="M3"/>
208 <svrl:active-pattern>
209 <xsl:attribute name="document">
210 <xsl:value-of select="document-uri(/)"/>
211 </xsl:attribute>
212 <xsl:apply-templates/>
213 </svrl:active-pattern>
214 <xsl:apply-templates select="/" mode="M4"/>
215 <svrl:active-pattern>
216 <xsl:attribute name="document">
217 <xsl:value-of select="document-uri(/)"/>
218 </xsl:attribute>
219 <xsl:apply-templates/>
220 </svrl:active-pattern>
221 <xsl:apply-templates select="/" mode="M5"/>
222 <svrl:active-pattern>
223 <xsl:attribute name="document">
224 <xsl:value-of select="document-uri(/)"/>
225 </xsl:attribute>
226 <xsl:apply-templates/>
227 </svrl:active-pattern>
228 <xsl:apply-templates select="/" mode="M6"/>
229 </svrl:schematron-output>
230 </xsl:template>
231
232 <!--SCHEMATRON PATTERNS-->
233 <svrl:text xmlns:svrl="http://purl.oclc.org/dsdl/svrl">Schematron VO-DML Validator</svrl:text>
234
235 <!--PATTERN -->
236
237
238 <!--RULE -->
239 <xsl:template match="vodml-id[not(../name() = 'vo-dml:model')]" priority="1000" mode="M3">
240 <svrl:fired-rule xmlns:svrl="http://purl.oclc.org/dsdl/svrl"
241 context="vodml-id[not(../name() = 'vo-dml:model')]"/>
242 <xsl:variable name="count" select="count(./following::vodml-id[. = current()])"/>
243
244 <!--ASSERT -->
245 <xsl:choose>
246 <xsl:when test="$count = 0"/>
247 <xsl:otherwise>
248 <svrl:failed-assert xmlns:svrl="http://purl.oclc.org/dsdl/svrl" test="$count = 0">
249 <xsl:attribute name="flag">error</xsl:attribute>
250 <xsl:attribute name="location">
251 <xsl:apply-templates select="." mode="schematron-select-full-path"/>
252 </xsl:attribute>
253 <svrl:text>
254 vodml-id '<xsl:text/>
255 <xsl:value-of select="."/>
256 <xsl:text/>' is not unique, there are <xsl:text/>
257 <xsl:value-of select="$count"/>
258 <xsl:text/> other elements with same vodml-id in this model.
259 </svrl:text>
260 </svrl:failed-assert>
261 </xsl:otherwise>
262 </xsl:choose>
263 <xsl:apply-templates select="*" mode="M3"/>
264 </xsl:template>
265 <xsl:template match="text()" priority="-1" mode="M3"/>
266 <xsl:template match="@*|node()" priority="-2" mode="M3">
267 <xsl:apply-templates select="*" mode="M3"/>
268 </xsl:template>
269
270 <!--PATTERN -->
271
272
273 <!--RULE -->
274 <xsl:template match="collection/datatype/utype" priority="1000" mode="M4">
275 <svrl:fired-rule xmlns:svrl="http://purl.oclc.org/dsdl/svrl" context="collection/datatype/utype"/>
276 <xsl:variable name="count" select="count(//collection/datatype/utype[. = current()])"/>
277
278 <!--ASSERT -->
279 <xsl:choose>
280 <xsl:when test="$count = 1"/>
281 <xsl:otherwise>
282 <svrl:failed-assert xmlns:svrl="http://purl.oclc.org/dsdl/svrl" test="$count = 1">
283 <xsl:attribute name="flag">error</xsl:attribute>
284 <xsl:attribute name="location">
285 <xsl:apply-templates select="." mode="schematron-select-full-path"/>
286 </xsl:attribute>
287 <svrl:text>
288 <xsl:text/>
289 <xsl:value-of select="."/>
290 <xsl:text/> is used more than once, namely <xsl:text/>
291 <xsl:value-of select="$count"/>
292 <xsl:text/> times as target of composition relation.
293 (this message will repeat itself <xsl:text/>
294 <xsl:value-of select="$count"/>
295 <xsl:text/> times!)
296 </svrl:text>
297 </svrl:failed-assert>
298 </xsl:otherwise>
299 </xsl:choose>
300 <xsl:apply-templates select="*" mode="M4"/>
301 </xsl:template>
302 <xsl:template match="text()" priority="-1" mode="M4"/>
303 <xsl:template match="@*|node()" priority="-2" mode="M4">
304 <xsl:apply-templates select="*" mode="M4"/>
305 </xsl:template>
306
307 <!--PATTERN -->
308
309
310 <!--RULE -->
311 <xsl:template match="utype[substring-before(text(),':') != '' and substring-before(text(),':') != /vo-dml:model/vodml-id]"
312 priority="1000"
313 mode="M5">
314 <svrl:fired-rule xmlns:svrl="http://purl.oclc.org/dsdl/svrl"
315 context="utype[substring-before(text(),':') != '' and substring-before(text(),':') != /vo-dml:model/vodml-id]"/>
316 <xsl:variable name="prefix" select="substring-before(text(),':')"/>
317
318 <!--ASSERT -->
319 <xsl:choose>
320 <xsl:when test="/vo-dml:model/import/vodml-id = $prefix"/>
321 <xsl:otherwise>
322 <svrl:failed-assert xmlns:svrl="http://purl.oclc.org/dsdl/svrl"
323 test="/vo-dml:model/import/vodml-id = $prefix">
324 <xsl:attribute name="flag">error</xsl:attribute>
325 <xsl:attribute name="location">
326 <xsl:apply-templates select="." mode="schematron-select-full-path"/>
327 </xsl:attribute>
328 <svrl:text>
329 There is no imported model corresponding to model prefix '<xsl:text/>
330 <xsl:value-of select="$prefix"/>
331 <xsl:text/>' in this model.
332 </svrl:text>
333 </svrl:failed-assert>
334 </xsl:otherwise>
335 </xsl:choose>
336 <xsl:apply-templates select="*" mode="M5"/>
337 </xsl:template>
338 <xsl:template match="text()" priority="-1" mode="M5"/>
339 <xsl:template match="@*|node()" priority="-2" mode="M5">
340 <xsl:apply-templates select="*" mode="M5"/>
341 </xsl:template>
342
343 <!--PATTERN -->
344
345
346 <!--RULE -->
347 <xsl:template match="attribute" priority="1004" mode="M6">
348 <svrl:fired-rule xmlns:svrl="http://purl.oclc.org/dsdl/svrl" context="attribute"/>
349 <xsl:variable name="owner" select="./vodml-id"/>
350 <xsl:variable name="target" select="fct:vo-dml_element(datatype/utype,/vo-dml:model)"/>
351
352 <!--ASSERT -->
353 <xsl:choose>
354 <xsl:when test="$target = 'primitiveType' or $target = 'dataType' or $target='enumeration'"/>
355 <xsl:otherwise>
356 <svrl:failed-assert xmlns:svrl="http://purl.oclc.org/dsdl/svrl"
357 test="$target = 'primitiveType' or $target = 'dataType' or $target='enumeration'">
358 <xsl:attribute name="flag">error</xsl:attribute>
359 <xsl:attribute name="location">
360 <xsl:apply-templates select="." mode="schematron-select-full-path"/>
361 </xsl:attribute>
362 <svrl:text>
363 datatype <xsl:text/>
364 <xsl:value-of select="datatype/utype"/>
365 <xsl:text/> of <xsl:text/>
366 <xsl:value-of select="$owner"/>
367 <xsl:text/> is not a value type but a '<xsl:text/>
368 <xsl:value-of select="$target"/>
369 <xsl:text/>'
370 </svrl:text>
371 </svrl:failed-assert>
372 </xsl:otherwise>
373 </xsl:choose>
374 <xsl:apply-templates select="*" mode="M6"/>
375 </xsl:template>
376
377 <!--RULE -->
378 <xsl:template match="reference" priority="1003" mode="M6">
379 <svrl:fired-rule xmlns:svrl="http://purl.oclc.org/dsdl/svrl" context="reference"/>
380 <xsl:variable name="owner" select="./vodml-id"/>
381 <xsl:variable name="target" select="fct:vo-dml_element(datatype/utype,/vo-dml:model)"/>
382
383 <!--ASSERT -->
384 <xsl:choose>
385 <xsl:when test="$target = 'objectType'"/>
386 <xsl:otherwise>
387 <svrl:failed-assert xmlns:svrl="http://purl.oclc.org/dsdl/svrl" test="$target = 'objectType'">
388 <xsl:attribute name="flag">error</xsl:attribute>
389 <xsl:attribute name="location">
390 <xsl:apply-templates select="." mode="schematron-select-full-path"/>
391 </xsl:attribute>
392 <svrl:text>
393 datatype <xsl:text/>
394 <xsl:value-of select="datatype/utype"/>
395 <xsl:text/> of reference <xsl:text/>
396 <xsl:value-of select="$owner"/>
397 <xsl:text/> is not an object type but a '<xsl:text/>
398 <xsl:value-of select="$target"/>
399 <xsl:text/>'
400 </svrl:text>
401 </svrl:failed-assert>
402 </xsl:otherwise>
403 </xsl:choose>
404 <xsl:apply-templates select="*" mode="M6"/>
405 </xsl:template>
406
407 <!--RULE -->
408 <xsl:template match="objectType/collection" priority="1002" mode="M6">
409 <svrl:fired-rule xmlns:svrl="http://purl.oclc.org/dsdl/svrl" context="objectType/collection"/>
410 <xsl:variable name="owner" select="./vodml-id"/>
411 <xsl:variable name="target" select="fct:vo-dml_element(datatype/utype,/vo-dml:model)"/>
412
413 <!--ASSERT -->
414 <xsl:choose>
415 <xsl:when test="$target = 'objectType'"/>
416 <xsl:otherwise>
417 <svrl:failed-assert xmlns:svrl="http://purl.oclc.org/dsdl/svrl" test="$target = 'objectType'">
418 <xsl:attribute name="flag">error</xsl:attribute>
419 <xsl:attribute name="location">
420 <xsl:apply-templates select="." mode="schematron-select-full-path"/>
421 </xsl:attribute>
422 <svrl:text>
423 datatype <xsl:text/>
424 <xsl:value-of select="datatype/utype"/>
425 <xsl:text/> of collection <xsl:text/>
426 <xsl:value-of select="$owner"/>
427 <xsl:text/> is not an object type but a '<xsl:text/>
428 <xsl:value-of select="$target"/>
429 <xsl:text/>'
430 </svrl:text>
431 </svrl:failed-assert>
432 </xsl:otherwise>
433 </xsl:choose>
434 <xsl:apply-templates select="*" mode="M6"/>
435 </xsl:template>
436
437 <!--RULE -->
438 <xsl:template match="objectType[extends]" priority="1001" mode="M6">
439 <svrl:fired-rule xmlns:svrl="http://purl.oclc.org/dsdl/svrl" context="objectType[extends]"/>
440 <xsl:variable name="owner" select="./vodml-id"/>
441 <xsl:variable name="target" select="fct:vo-dml_element(extends/utype,/vo-dml:model)"/>
442
443 <!--ASSERT -->
444 <xsl:choose>
445 <xsl:when test="$target = 'objectType'"/>
446 <xsl:otherwise>
447 <svrl:failed-assert xmlns:svrl="http://purl.oclc.org/dsdl/svrl" test="$target = 'objectType'">
448 <xsl:attribute name="flag">error</xsl:attribute>
449 <xsl:attribute name="location">
450 <xsl:apply-templates select="." mode="schematron-select-full-path"/>
451 </xsl:attribute>
452 <svrl:text>
453 Super type <xsl:text/>
454 <xsl:value-of select="extends/utype"/>
455 <xsl:text/> of objectType <xsl:text/>
456 <xsl:value-of select="$owner"/>
457 <xsl:text/> is not an object type but a '<xsl:text/>
458 <xsl:value-of select="$target"/>
459 <xsl:text/>'
460 </svrl:text>
461 </svrl:failed-assert>
462 </xsl:otherwise>
463 </xsl:choose>
464 <xsl:apply-templates select="*" mode="M6"/>
465 </xsl:template>
466
467 <!--RULE -->
468 <xsl:template match="subsets" priority="1000" mode="M6">
469 <svrl:fired-rule xmlns:svrl="http://purl.oclc.org/dsdl/svrl" context="subsets"/>
470 <xsl:variable name="owner" select="../name()"/>
471 <xsl:variable name="target" select="fct:vo-dml_element(./utype,/vo-dml:model)"/>
472
473 <!--ASSERT -->
474 <xsl:choose>
475 <xsl:when test="$target"/>
476 <xsl:otherwise>
477 <svrl:failed-assert xmlns:svrl="http://purl.oclc.org/dsdl/svrl" test="$target">
478 <xsl:attribute name="flag">error</xsl:attribute>
479 <xsl:attribute name="location">
480 <xsl:apply-templates select="." mode="schematron-select-full-path"/>
481 </xsl:attribute>
482 <svrl:text>
483 Target of subsets relation with utype <xsl:text/>
484 <xsl:value-of select="./utype"/>
485 <xsl:text/> can not be found
486 </svrl:text>
487 </svrl:failed-assert>
488 </xsl:otherwise>
489 </xsl:choose>
490
491 <!--ASSERT -->
492 <xsl:choose>
493 <xsl:when test="$target = $owner"/>
494 <xsl:otherwise>
495 <svrl:failed-assert xmlns:svrl="http://purl.oclc.org/dsdl/svrl" test="$target = $owner">
496 <xsl:attribute name="flag">error</xsl:attribute>
497 <xsl:attribute name="location">
498 <xsl:apply-templates select="." mode="schematron-select-full-path"/>
499 </xsl:attribute>
500 <svrl:text>
501 Role with subsets relation of type '<xsl:text/>
502 <xsl:value-of select="$owner"/>
503 <xsl:text/>' MUST have same type as subsetted role (<xsl:text/>
504 <xsl:value-of select="$target"/>
505 <xsl:text/>)
506 </svrl:text>
507 </svrl:failed-assert>
508 </xsl:otherwise>
509 </xsl:choose>
510 <xsl:apply-templates select="*" mode="M6"/>
511 </xsl:template>
512 <xsl:template match="text()" priority="-1" mode="M6"/>
513 <xsl:template match="@*|node()" priority="-2" mode="M6">
514 <xsl:apply-templates select="*" mode="M6"/>
515 </xsl:template>
516 </xsl:stylesheet>

msdemlei@ari.uni-heidelberg.de
ViewVC Help
Powered by ViewVC 1.1.26