Mercurial > repos > shellac > sam_consensus_v3
comparison env/lib/python3.9/site-packages/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_dsdl_include.xsl @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4f3585e2f14b |
---|---|
1 <?xml version="1.0" encoding="UTF-8"?><?xar XSLT?> | |
2 | |
3 <!-- | |
4 OVERVIEW : iso_dsdl_include.xsl | |
5 | |
6 This is an inclusion preprocessor for the non-smart text inclusions | |
7 of ISO DSDL. It handles | |
8 <relax:extRef> for ISO RELAX NG | |
9 <sch:include> for ISO Schematron and Schematron 1.n | |
10 <sch:extends> for 2009 draft ISO Schematron | |
11 <xi:xinclude> simple W3C XIncludes for ISO NVRL and DSRL | |
12 <crdl:ref> for draft ISO CRDL | |
13 <dtll:include> for draft ISO DTLL | |
14 <* @xlink:href> for simple W3C XLink 1.1 embedded links | |
15 | |
16 | |
17 This should be the first in any chain of processing. It only requires | |
18 XSLT 1. Each kind of inclusion can be turned off (or on) on the command line. | |
19 | |
20 Ids in fragment identifiers or xpointers will be sought in the following | |
21 order: | |
22 * @xml:id | |
23 * id() for typed schemas (e.g. from DTD) [NOTE: XInclude does not support this] | |
24 * untyped @id | |
25 | |
26 The proposed behaviour for the update to ISO Schematron has been implemented. If an | |
27 include points to an element with the same name as the parent, then that element's | |
28 contents will be included. This supports the merge style of inclusion. | |
29 | |
30 When an inclusion is made, it is preceded by a PI with target DSDL_INCLUDE_START | |
31 and the href and closed by a PI with target DSDL_INCLUDE_START and the href. This is | |
32 to allow better location of problems, though only to the file level. | |
33 | |
34 Limitations: | |
35 * No rebasing: relative paths will be interpreted based on the initial document's | |
36 path, not the including document. (Severe limitation!) | |
37 * No checking for circular references | |
38 * Not full xpointers: only ID matching | |
39 * <relax:include> not implemented | |
40 * XInclude handling of xml:base and xml:lang not implemented | |
41 --> | |
42 <!-- | |
43 VERSION INFORMATION | |
44 2009-02-25 | |
45 * Update DSDL namespace to use schematron.com | |
46 * Tested with SAXON9, Xalan 2.7.1, IE7, | |
47 * IE does not like multiple variables in same template with same name: rename. | |
48 2008-09-18 | |
49 * Remove new behaviour for include, because it conflicts with existing usage [KH] | |
50 * Add extends[@href] element with that merge functionality | |
51 * Generate PIs to notate source of inclusions for potential better diagnostics | |
52 | |
53 2008-09-16 | |
54 * Fix for XSLT1 | |
55 | |
56 2008-08-28 | |
57 * New behaviour for schematron includes: if the pointed to element is the same as the current, | |
58 include the children. | |
59 | |
60 2008-08-20 | |
61 * Fix bug: in XSLT1 cannot do $document/id('x') but need to use for-each | |
62 | |
63 2008-08-04 | |
64 * Add support for inclusions in old namespace | |
65 | |
66 2008-08-03 | |
67 * Fix wrong param name include-relaxng & include-crdl (KH, PH) | |
68 * Allow inclusion of XSLT and XHTML (KH) | |
69 * Fix inclusion of fragments (KH) | |
70 | |
71 2008-07-25 | |
72 * Add selectable input parameter | |
73 | |
74 2008-07-24 | |
75 * RJ New | |
76 --> | |
77 <!-- | |
78 LEGAL INFORMATION | |
79 | |
80 Copyright (c) 2008 Rick Jelliffe | |
81 | |
82 This software is provided 'as-is', without any express or implied warranty. | |
83 In no event will the authors be held liable for any damages arising from | |
84 the use of this software. | |
85 | |
86 Permission is granted to anyone to use this software for any purpose, | |
87 including commercial applications, and to alter it and redistribute it freely, | |
88 subject to the following restrictions: | |
89 | |
90 1. The origin of this software must not be misrepresented; you must not claim | |
91 that you wrote the original software. If you use this software in a product, | |
92 an acknowledgment in the product documentation would be appreciated but is | |
93 not required. | |
94 | |
95 2. Altered source versions must be plainly marked as such, and must not be | |
96 misrepresented as being the original software. | |
97 | |
98 3. This notice may not be removed or altered from any source distribution. | |
99 --> | |
100 <xslt:stylesheet version="1.0" | |
101 xmlns:xslt="http://www.w3.org/1999/XSL/Transform" | |
102 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | |
103 xmlns:iso="http://purl.oclc.org/dsdl/schematron" | |
104 xmlns:nvdl="http://purl.oclc.org/dsdl/nvdl" | |
105 xmlns:xhtml="http://www.w3.org/1999/xhtml" | |
106 xmlns:schold="http://www.ascc.net/xml/schematron" | |
107 xmlns:crdl="http://purl.oclc.org/dsdl/crepdl/ns/structure/1.0" | |
108 xmlns:xi="http://www.w3.org/2001/XInclude" | |
109 xmlns:dtll="http://www.jenitennison.com/datatypes" | |
110 xmlns:dsdl="http://www.schematron.com/namespace/dsdl" | |
111 xmlns:relax="http://relaxng.org/ns/structure/1.0" | |
112 xmlns:xlink="http://www.w3.org/1999/xlink"> | |
113 <!-- Note: The URL for the dsdl namespace is not official --> | |
114 | |
115 | |
116 <xsl:param name="include-schematron">true</xsl:param> | |
117 <xsl:param name="include-crdl">true</xsl:param> | |
118 <xsl:param name="include-xinclude">true</xsl:param> | |
119 <xsl:param name="include-dtll">true</xsl:param> | |
120 <xsl:param name="include-relaxng">true</xsl:param> | |
121 <xsl:param name="include-xlink">true</xsl:param> | |
122 | |
123 <xsl:template match="/"> | |
124 <xsl:apply-templates select="." mode="dsdl:go" /> | |
125 </xsl:template> | |
126 | |
127 <!-- output everything else unchanged --> | |
128 <xslt:template match="node()" priority="-1" mode="dsdl:go"> | |
129 <xslt:copy> | |
130 <xslt:copy-of select="@*" /> | |
131 <xslt:apply-templates mode="dsdl:go" /> | |
132 </xslt:copy> | |
133 </xslt:template> | |
134 | |
135 | |
136 | |
137 <!-- =========================================================== --> | |
138 <!-- ISO/IEC 19757 - DSDL Document Schema Definition Languages --> | |
139 <!-- Part 2 - Regular grammar-based validation - RELAX NG --> | |
140 <!-- This only implements relax:extRef not relax:include which --> | |
141 <!-- is complex. --> | |
142 <!-- =========================================================== --> | |
143 <xslt:template match="relax:extRef" mode="dsdl:go"> | |
144 | |
145 | |
146 <!-- Insert subschema --> | |
147 | |
148 <xsl:variable name="document-uri" | |
149 select="substring-before(concat(@href,'#'), '#')" /> | |
150 <xsl:variable name="fragment-id" | |
151 select="substring-after(@href, '#')" /> | |
152 | |
153 <xsl:processing-instruction name="DSDL_INCLUDE_START"> | |
154 <xsl:value-of select="@href" /> | |
155 </xsl:processing-instruction> | |
156 <xsl:choose> | |
157 <xsl:when test="not( $include-relaxng = 'true' )"> | |
158 <xslt:copy> | |
159 <xslt:copy-of select="@*" /> | |
160 <xslt:apply-templates mode="dsdl:go" /> | |
161 </xslt:copy> | |
162 </xsl:when> | |
163 <xsl:otherwise> | |
164 | |
165 <xsl:choose> | |
166 | |
167 <xsl:when | |
168 test="string-length( $document-uri ) = 0 and string-length( $fragment-id ) = 0"> | |
169 <xsl:message> | |
170 Error: Impossible URL in RELAX NG extRef | |
171 include | |
172 </xsl:message> | |
173 </xsl:when> | |
174 | |
175 <!-- this case is when there is in embedded schema in the same document elsewhere --> | |
176 <xslt:when | |
177 test="string-length( $document-uri ) = 0"> | |
178 <xslt:apply-templates mode="dsdl:go" | |
179 select="//*[@xml:id= $fragment-id ] | id( $fragment-id) | //*[@id= $fragment-id ]" /> | |
180 </xslt:when> | |
181 | |
182 <xsl:when | |
183 test="string-length( $fragment-id ) > 0"> | |
184 <xsl:variable name="theDocument_1" | |
185 select="document( $document-uri,/ )" /> | |
186 | |
187 <xsl:if test="not($theDocument_1)"> | |
188 <xsl:message terminate="no"> | |
189 <xsl:text>Unable to open referenced included file: </xsl:text> | |
190 <xsl:value-of select="@href" /> | |
191 </xsl:message> | |
192 </xsl:if> | |
193 <!-- use a for-each so that the id() function works correctly on the external document --> | |
194 <xsl:for-each select="$theDocument_1"> | |
195 <xsl:variable name="theFragment_1" | |
196 select="$theDocument_1//*[@xml:id= $fragment-id ] | |
197 | id( $fragment-id) | |
198 | $theDocument_1//*[@id= $fragment-id ]" /> | |
199 <xsl:if test="not($theFragment_1)"> | |
200 <xsl:message terminate="no"> | |
201 <xsl:text>Unable to locate id attribute: </xsl:text> | |
202 <xsl:value-of select="@href" /> | |
203 </xsl:message> | |
204 </xsl:if> | |
205 <xsl:apply-templates | |
206 select=" $theFragment_1[1]" mode="dsdl:go" /> | |
207 </xsl:for-each> | |
208 </xsl:when> | |
209 | |
210 <xsl:otherwise> | |
211 <xsl:variable name="theDocument_2" | |
212 select="document( $document-uri,/ )" /> | |
213 <xsl:variable name="theFragment_2" | |
214 select="$theDocument_2/*" /> | |
215 <xsl:if test="not($theDocument_2)"> | |
216 <xsl:message terminate="no"> | |
217 <xsl:text>Unable to open referenced included file: </xsl:text> | |
218 <xsl:value-of select="@href" /> | |
219 </xsl:message> | |
220 </xsl:if> | |
221 | |
222 <xsl:if test="not($theFragment_2)"> | |
223 <xsl:message terminate="no"> | |
224 <xsl:text>Unable to locate id attribute: </xsl:text> | |
225 <xsl:value-of select="@href" /> | |
226 </xsl:message> | |
227 </xsl:if> | |
228 <xsl:apply-templates select="$theFragment_2 " | |
229 mode="dsdl:go" /> | |
230 </xsl:otherwise> | |
231 </xsl:choose> | |
232 | |
233 </xsl:otherwise> | |
234 </xsl:choose> | |
235 | |
236 <xsl:processing-instruction name="DSDL_INCLUDE_END"> | |
237 <xsl:value-of select="@href" /> | |
238 </xsl:processing-instruction> | |
239 </xslt:template> | |
240 | |
241 | |
242 | |
243 <!-- =========================================================== --> | |
244 <!-- ISO/IEC 19757 - DSDL Document Schema Definition Languages --> | |
245 <!-- Part 3 - Rule-based validation - Schematron --> | |
246 <!-- =========================================================== --> | |
247 | |
248 | |
249 <!-- Extend the URI syntax to allow # references --> | |
250 <!-- Add experimental support for simple containers like /xxx:xxx/iso:pattern to allow better includes --> | |
251 <xsl:template match="iso:include" mode="dsdl:go"> | |
252 | |
253 <xsl:variable name="document-uri" | |
254 select="substring-before(concat(@href,'#'), '#')" /> | |
255 <xsl:variable name="fragment-id" | |
256 select="substring-after(@href, '#')" /> | |
257 | |
258 | |
259 <xsl:processing-instruction name="DSDL_INCLUDE_START"> | |
260 <xsl:value-of select="@href" /> | |
261 </xsl:processing-instruction> | |
262 | |
263 <xsl:choose> | |
264 <xsl:when test="not( $include-schematron = 'true' )"> | |
265 <xslt:copy> | |
266 <xslt:copy-of select="@*" /> | |
267 <xslt:apply-templates mode="dsdl:go" /> | |
268 </xslt:copy> | |
269 </xsl:when> | |
270 <xsl:otherwise> | |
271 | |
272 <xsl:choose> | |
273 | |
274 <xsl:when | |
275 test="string-length( $document-uri ) = 0 and string-length( $fragment-id ) = 0"> | |
276 <xsl:message> | |
277 Error: Impossible URL in Schematron include | |
278 </xsl:message> | |
279 </xsl:when> | |
280 | |
281 <!-- this case is when there is in embedded schema in the same document elsewhere --> | |
282 <xslt:when | |
283 test="string-length( $document-uri ) = 0"> | |
284 <xslt:apply-templates mode="dsdl:go" | |
285 select="//iso:*[@xml:id= $fragment-id ] | |
286 |id( $fragment-id) | |
287 | //iso:*[@id= $fragment-id ]" /> | |
288 </xslt:when> | |
289 | |
290 <!-- case where there is a fragment in another document (should be an iso: element) --> | |
291 <!-- There are three cases for includes with fragment: | |
292 0) No href file or no matching id - error! | |
293 1) REMOVED | |
294 | |
295 2) The linked-to element is sch:schema however the parent of the include | |
296 is not a schema. In this case, it is an error. (Actually, it should | |
297 be an error for other kinds of containment problems, but we won't | |
298 check for them in this version.) | |
299 | |
300 3) Otherwise, include the pointed-to element | |
301 --> | |
302 | |
303 <xsl:when | |
304 test="string-length( $fragment-id ) > 0"> | |
305 <xsl:variable name="theDocument_1" | |
306 select="document( $document-uri,/ )" /> | |
307 <xsl:variable name="originalParent" select=".." /> | |
308 | |
309 <!-- case 0 --> | |
310 <xsl:if test="not($theDocument_1)"> | |
311 <xsl:message terminate="no"> | |
312 <xsl:text>Unable to open referenced included file: </xsl:text> | |
313 <xsl:value-of select="@href" /> | |
314 </xsl:message> | |
315 </xsl:if> | |
316 <!-- use for-each to rebase id() to external document --> | |
317 <xsl:for-each select="$theDocument_1"> | |
318 <xsl:variable name="theFragment_1" | |
319 select=" $theDocument_1//iso:*[@xml:id= $fragment-id ] | | |
320 id($fragment-id) | | |
321 $theDocument_1//iso:*[@id= $fragment-id ]" /> | |
322 | |
323 | |
324 <xsl:choose> | |
325 <!-- case 0 --> | |
326 <xsl:when test="not($theFragment_1)"> | |
327 <xsl:message terminate="no"> | |
328 <xsl:text>Unable to locate id attribute: </xsl:text> | |
329 <xsl:value-of select="@href" /> | |
330 </xsl:message> | |
331 </xsl:when> | |
332 | |
333 | |
334 <!-- case 1 REMOVED --> | |
335 | |
336 <!-- case 2 --> | |
337 <xsl:when | |
338 test=" $theFragment_1/self::iso:schema "> | |
339 <xsl:message> | |
340 Schema error: Use include to | |
341 include fragments, not a whole | |
342 schema | |
343 </xsl:message> | |
344 </xsl:when> | |
345 | |
346 <!-- case 3 --> | |
347 <xsl:otherwise> | |
348 <xsl:apply-templates | |
349 select=" $theFragment_1[1]" mode="dsdl:go" /> | |
350 </xsl:otherwise> | |
351 </xsl:choose> | |
352 </xsl:for-each> | |
353 </xsl:when> | |
354 | |
355 <!-- Case where there is no ID so we include the whole document --> | |
356 <!-- Experimental addition: include fragments of children --> | |
357 <xsl:otherwise> | |
358 <xsl:variable name="theDocument_2" | |
359 select="document( $document-uri,/ )" /> | |
360 <xsl:variable name="theFragment_2" | |
361 select="$theDocument_2/iso:*" /> | |
362 <xsl:variable name="theContainedFragments" | |
363 select="$theDocument_2/*/iso:* | $theDocument_2/*/xsl:* | $theDocument_2/*/xhtml:*" /> | |
364 <xsl:if test="not($theDocument_2)"> | |
365 <xsl:message terminate="no"> | |
366 <xsl:text>Unable to open referenced included file: </xsl:text> | |
367 <xsl:value-of select="@href" /> | |
368 </xsl:message> | |
369 </xsl:if> | |
370 | |
371 <!-- There are three cases for includes: | |
372 0) No text specified- error! | |
373 | |
374 1) REMOVED | |
375 | |
376 2) The linked-to element is sch:schema however the parent of the include | |
377 is not a schema. In this case, it is an error. (Actually, it should | |
378 be an error for other kinds of containment problems, but we won't | |
379 check for them in this version.) | |
380 | |
381 3) Otherwise, include the pointed-to element | |
382 --> | |
383 <xsl:choose> | |
384 <!-- case 0 --> | |
385 <xsl:when | |
386 test="not($theFragment_2) and not ($theContainedFragments)"> | |
387 <xsl:message terminate="no"> | |
388 <xsl:text>Unable to locate id attribute: </xsl:text> | |
389 <xsl:value-of select="@href" /> | |
390 </xsl:message> | |
391 </xsl:when> | |
392 | |
393 <!-- case 1 removed --> | |
394 | |
395 <!-- case 2 --> | |
396 <xsl:when | |
397 test=" $theFragment_2/self::iso:schema or $theContainedFragments/self::iso:schema"> | |
398 <xsl:message> | |
399 Schema error: Use include to include | |
400 fragments, not a whole schema | |
401 </xsl:message> | |
402 </xsl:when> | |
403 | |
404 <!-- If this were XLST 2, we could use | |
405 if ($theFragment) then $theFragment else $theContainedFragments | |
406 here (thanks to KN) | |
407 --> | |
408 <!-- case 3 --> | |
409 <xsl:otherwise> | |
410 <xsl:apply-templates | |
411 select="$theFragment_2 " mode="dsdl:go" /> | |
412 </xsl:otherwise> | |
413 </xsl:choose> | |
414 </xsl:otherwise> | |
415 </xsl:choose> | |
416 </xsl:otherwise> | |
417 </xsl:choose> | |
418 | |
419 <xsl:processing-instruction name="DSDL_INCLUDE_END"> | |
420 <xsl:value-of select="@href" /> | |
421 </xsl:processing-instruction> | |
422 </xsl:template> | |
423 | |
424 | |
425 <!-- WARNING sch:extends[@href] is experimental and non standard --> | |
426 <!-- Basically, it adds the children of the selected element, not the element itself. --> | |
427 <xsl:template match="iso:extends[@href]" mode="dsdl:go"> | |
428 | |
429 <xsl:variable name="document-uri" | |
430 select="substring-before(concat(@href,'#'), '#')" /> | |
431 <xsl:variable name="fragment-id" | |
432 select="substring-after(@href, '#')" /> | |
433 | |
434 | |
435 <xsl:processing-instruction name="DSDL_INCLUDE_START"> | |
436 <xsl:value-of select="@href" /> | |
437 </xsl:processing-instruction> | |
438 | |
439 <xsl:choose> | |
440 <xsl:when test="not( $include-schematron = 'true' )"> | |
441 <xslt:copy> | |
442 <xslt:copy-of select="@*" /> | |
443 <xslt:apply-templates mode="dsdl:go" /> | |
444 </xslt:copy> | |
445 </xsl:when> | |
446 <xsl:otherwise> | |
447 | |
448 <xsl:choose> | |
449 | |
450 <xsl:when | |
451 test="string-length( $document-uri ) = 0 and string-length( $fragment-id ) = 0"> | |
452 <xsl:message> | |
453 Error: Impossible URL in Schematron include | |
454 </xsl:message> | |
455 </xsl:when> | |
456 | |
457 <!-- this case is when there is in embedded schema in the same document elsewhere --> | |
458 <xslt:when | |
459 test="string-length( $document-uri ) = 0"> | |
460 <xslt:apply-templates mode="dsdl:go" | |
461 select="//iso:*[@xml:id= $fragment-id ]/* | |
462 |id( $fragment-id)/* | |
463 | //iso:*[@id= $fragment-id ]/*" /> | |
464 </xslt:when> | |
465 | |
466 <!-- case where there is a fragment in another document (should be an iso: element) --> | |
467 <!-- There are three cases for includes with fragment: | |
468 0) No href file or no matching id - error! | |
469 1) REMOVED | |
470 | |
471 2) REMOVED | |
472 | |
473 3) Otherwise, include the pointed-to element | |
474 --> | |
475 | |
476 <xsl:when | |
477 test="string-length( $fragment-id ) > 0"> | |
478 <xsl:variable name="theDocument_1" | |
479 select="document( $document-uri,/ )" /> | |
480 <xsl:variable name="originalParent" select=".." /> | |
481 | |
482 <!-- case 0 --> | |
483 <xsl:if test="not($theDocument_1)"> | |
484 <xsl:message terminate="no"> | |
485 <xsl:text>Unable to open referenced included file: </xsl:text> | |
486 <xsl:value-of select="@href" /> | |
487 </xsl:message> | |
488 </xsl:if> | |
489 <!-- use for-each to rebase id() to external document --> | |
490 <xsl:for-each select="$theDocument_1"> | |
491 <xsl:variable name="theFragment_1" | |
492 select=" $theDocument_1//iso:*[@xml:id= $fragment-id ] | | |
493 id($fragment-id) | | |
494 $theDocument_1//iso:*[@id= $fragment-id ]" /> | |
495 | |
496 | |
497 <xsl:choose> | |
498 <!-- case 0 --> | |
499 <xsl:when test="not($theFragment_1)"> | |
500 <xsl:message terminate="no"> | |
501 <xsl:text>Unable to locate id attribute: </xsl:text> | |
502 <xsl:value-of select="@href" /> | |
503 </xsl:message> | |
504 </xsl:when> | |
505 | |
506 | |
507 <!-- case 1 REMOVED --> | |
508 | |
509 <!-- case 2 REMOVED --> | |
510 | |
511 | |
512 <!-- case 3 --> | |
513 <xsl:otherwise> | |
514 | |
515 <xsl:apply-templates | |
516 select=" $theFragment_1[1]/*" mode="dsdl:go" /> | |
517 </xsl:otherwise> | |
518 </xsl:choose> | |
519 </xsl:for-each> | |
520 </xsl:when> | |
521 | |
522 <!-- Case where there is no ID so we include the whole document --> | |
523 <!-- Experimental addition: include fragments of children --> | |
524 <xsl:otherwise> | |
525 <xsl:variable name="theDocument_2" | |
526 select="document( $document-uri,/ )" /> | |
527 <xsl:variable name="theFragment_2" | |
528 select="$theDocument_2/iso:*" /> | |
529 <xsl:variable name="theContainedFragments" | |
530 select="$theDocument_2/*/iso:* | $theDocument_2/*/xsl:* | $theDocument_2/*/xhtml:*" /> | |
531 <xsl:if test="not($theDocument_2)"> | |
532 <xsl:message terminate="no"> | |
533 <xsl:text>Unable to open referenced included file: </xsl:text> | |
534 <xsl:value-of select="@href" /> | |
535 </xsl:message> | |
536 </xsl:if> | |
537 | |
538 <!-- There are three cases for includes: | |
539 0) No text specified- error! | |
540 | |
541 1) REMOVED | |
542 | |
543 2) REMOVED | |
544 | |
545 3) Otherwise, include the pointed-to element | |
546 --> | |
547 <xsl:choose> | |
548 <!-- case 0 --> | |
549 <xsl:when | |
550 test="not($theFragment_2) and not ($theContainedFragments)"> | |
551 <xsl:message terminate="no"> | |
552 <xsl:text>Unable to locate id attribute: </xsl:text> | |
553 <xsl:value-of select="@href" /> | |
554 </xsl:message> | |
555 </xsl:when> | |
556 | |
557 <!-- case 1 removed --> | |
558 | |
559 <!-- case 2 removed --> | |
560 | |
561 <!-- If this were XLST 2, we could use | |
562 if ($theFragment) then $theFragment else $theContainedFragments | |
563 here (thanks to KN) | |
564 --> | |
565 <!-- case 3 --> | |
566 <xsl:otherwise> | |
567 <xsl:apply-templates | |
568 select="$theFragment_2/* " mode="dsdl:go" /> | |
569 </xsl:otherwise> | |
570 </xsl:choose> | |
571 </xsl:otherwise> | |
572 </xsl:choose> | |
573 </xsl:otherwise> | |
574 </xsl:choose> | |
575 | |
576 <xsl:processing-instruction name="DSDL_INCLUDE_END"> | |
577 <xsl:value-of select="@href" /> | |
578 </xsl:processing-instruction> | |
579 </xsl:template> | |
580 | |
581 | |
582 | |
583 <!-- =========================================================== --> | |
584 <!-- Handle Schematron 1.6 inclusions: clone of ISO code above --> | |
585 <!-- =========================================================== --> | |
586 | |
587 | |
588 <!-- Extend the URI syntax to allow # references --> | |
589 <!-- Add experimental support for simple containers like /xxx:xxx/schold:pattern to allow better includes --> | |
590 <xsl:template match="schold:include" mode="dsdl:go"> | |
591 <xsl:variable name="document-uri" | |
592 select="substring-before(concat(@href,'#'), '#')" /> | |
593 <xsl:variable name="fragment-id" | |
594 select="substring-after(@href, '#')" /> | |
595 | |
596 <xsl:processing-instruction name="DSDL_INCLUDE_START"> | |
597 <xsl:value-of select="@href" /> | |
598 </xsl:processing-instruction> | |
599 | |
600 <xsl:choose> | |
601 <xsl:when test="not( $include-schematron = 'true' )"> | |
602 <xslt:copy> | |
603 <xslt:copy-of select="@*" /> | |
604 <xslt:apply-templates mode="dsdl:go" /> | |
605 </xslt:copy> | |
606 </xsl:when> | |
607 <xsl:otherwise> | |
608 <xsl:choose> | |
609 | |
610 <xsl:when | |
611 test="string-length( $document-uri ) = 0 and string-length( $fragment-id ) = 0"> | |
612 <xsl:message> | |
613 Error: Impossible URL in Schematron include | |
614 </xsl:message> | |
615 </xsl:when> | |
616 | |
617 <!-- this case is when there is in embedded schema in the same document elsewhere --> | |
618 <xslt:when | |
619 test="string-length( $document-uri ) = 0"> | |
620 <xslt:apply-templates mode="dsdl:go" | |
621 select="//schold:*[@xml:id= $fragment-id ] | |
622 |id( $fragment-id) | |
623 | //schold:*[@id= $fragment-id ]" /> | |
624 </xslt:when> | |
625 | |
626 <!-- case where there is a fragment in another document (should be an iso: element) --> | |
627 <xsl:when | |
628 test="string-length( $fragment-id ) > 0"> | |
629 <xsl:variable name="theDocument_1" | |
630 select="document( $document-uri,/ )" /> | |
631 <xsl:if test="not($theDocument_1)"> | |
632 <xsl:message terminate="no"> | |
633 <xsl:text>Unable to open referenced included file: </xsl:text> | |
634 <xsl:value-of select="@href" /> | |
635 </xsl:message> | |
636 </xsl:if> | |
637 <!-- use for-each to rebase id() to $theDocument --> | |
638 <xsl:for-each select="$theDocument_1"> | |
639 <xsl:variable name="theFragment_1" | |
640 select=" $theDocument_1//schold:*[@xml:id= $fragment-id ] | | |
641 id($fragment-id) | | |
642 $theDocument_1//schold:*[@id= $fragment-id ]" /> | |
643 <xsl:if | |
644 test=" $theFragment_1/self::schold:schema "> | |
645 <xsl:message> | |
646 Schema error: Use include to include | |
647 fragments, not a whole schema | |
648 </xsl:message> | |
649 </xsl:if> | |
650 <xsl:if test="not($theFragment_1)"> | |
651 <xsl:message terminate="no"> | |
652 <xsl:text>Unable to locate id attribute: </xsl:text> | |
653 <xsl:value-of select="@href" /> | |
654 </xsl:message> | |
655 </xsl:if> | |
656 <xsl:apply-templates | |
657 select=" $theFragment_1[1]" mode="dsdl:go" /> | |
658 </xsl:for-each> | |
659 </xsl:when> | |
660 | |
661 <!-- Case where there is no ID so we include the whole document --> | |
662 <!-- Experimental addition: include fragments of children --> | |
663 <xsl:otherwise> | |
664 <xsl:variable name="theDocument_2" | |
665 select="document( $document-uri,/ )" /> | |
666 <xsl:variable name="theFragment_2" | |
667 select="$theDocument_2/iso:*" /> | |
668 <xsl:variable name="theContainedFragments" | |
669 select="$theDocument_2/*/schold:* | $theDocument_2/*/xsl:* | $theDocument_2/*/xhtml:*" /> | |
670 <xsl:if test="not($theDocument_2)"> | |
671 <xsl:message terminate="no"> | |
672 <xsl:text>Unable to open referenced included file: </xsl:text> | |
673 <xsl:value-of select="@href" /> | |
674 </xsl:message> | |
675 </xsl:if> | |
676 | |
677 <xsl:if | |
678 test=" $theFragment_2/self::schold:schema or $theContainedFragments/self::schold:schema"> | |
679 <xsl:message> | |
680 Schema error: Use include to include | |
681 fragments, not a whole schema | |
682 </xsl:message> | |
683 </xsl:if> | |
684 <xsl:if | |
685 test="not($theFragment_2) and not ($theContainedFragments)"> | |
686 <xsl:message terminate="no"> | |
687 <xsl:text>Unable to locate id attribute: </xsl:text> | |
688 <xsl:value-of select="@href" /> | |
689 </xsl:message> | |
690 </xsl:if> | |
691 <!-- If this were XLST 2, we could use | |
692 if ($theFragment) then $theFragment else $theContainedFragments | |
693 here (thanks to KN) | |
694 --> | |
695 <xsl:choose> | |
696 <xsl:when test=" $theFragment_2 "> | |
697 <xsl:apply-templates | |
698 select="$theFragment_2 " mode="dsdl:go" /> | |
699 </xsl:when> | |
700 <xsl:otherwise> | |
701 <!-- WARNING! EXPERIMENTAL! Use at your own risk. This may be discontinued! --> | |
702 <xsl:apply-templates | |
703 select=" $theContainedFragments " mode="dsdl:go" /> | |
704 </xsl:otherwise> | |
705 </xsl:choose> | |
706 </xsl:otherwise> | |
707 </xsl:choose> | |
708 | |
709 </xsl:otherwise> | |
710 </xsl:choose> | |
711 | |
712 <xsl:processing-instruction name="DSDL_INCLUDE_END"> | |
713 <xsl:value-of select="@href" /> | |
714 </xsl:processing-instruction> | |
715 </xsl:template> | |
716 <!-- =========================================================== --> | |
717 <!-- ISO/IEC 19757 - DSDL Document Schema Definition Languages --> | |
718 <!-- Part 5 - DataType Library Language - DTLL --> | |
719 <!-- Committee Draft Experimental support only --> | |
720 <!-- The <include> element may well be replaced by XInclude in --> | |
721 <!-- any final version. --> | |
722 <!-- =========================================================== --> | |
723 <xslt:template match="dtll:include" mode="dsdl:go"> | |
724 <!-- Insert subschema --> | |
725 | |
726 <xsl:variable name="document-uri" | |
727 select="substring-before(concat(@href,'#'), '#')" /> | |
728 <xsl:variable name="fragment-id" | |
729 select="substring-after(@href, '#')" /> | |
730 <xsl:processing-instruction name="DSDL_INCLUDE_START"> | |
731 <xsl:value-of select="@href" /> | |
732 </xsl:processing-instruction> | |
733 <xsl:choose> | |
734 <xsl:when test="not( $include-dtll = 'true' )"> | |
735 <xslt:copy> | |
736 <xslt:copy-of select="@*" /> | |
737 <xslt:apply-templates mode="dsdl:go" /> | |
738 </xslt:copy> | |
739 </xsl:when> | |
740 <xsl:otherwise> | |
741 <xsl:choose> | |
742 | |
743 <xsl:when | |
744 test="string-length( $document-uri ) = 0 and string-length( $fragment-id ) = 0"> | |
745 <xsl:message> | |
746 Error: Impossible URL in DTLL include | |
747 </xsl:message> | |
748 </xsl:when> | |
749 | |
750 <!-- this case is when there is in embedded schema in the same document elsewhere --> | |
751 <xslt:when | |
752 test="string-length( $document-uri ) = 0"> | |
753 <xslt:apply-templates mode="dsdl:go" | |
754 select="//*[@xml:id= $fragment-id ] | id( $fragment-id) | |
755 | //*[@id= $fragment-id ]" /> | |
756 </xslt:when> | |
757 | |
758 <xsl:when | |
759 test="string-length( $fragment-id ) > 0"> | |
760 <xsl:variable name="theDocument_1" | |
761 select="document( $document-uri,/ )" /> | |
762 <xsl:if test="not($theDocument_1)"> | |
763 <xsl:message terminate="no"> | |
764 <xsl:text>Unable to open referenced included file: </xsl:text> | |
765 <xsl:value-of select="@href" /> | |
766 </xsl:message> | |
767 </xsl:if> | |
768 <!-- use for-each to rebase id() to $theDocument --> | |
769 <xsl:for-each select="$theDocument_1"> | |
770 <xsl:variable name="theFragment_1" | |
771 select="$theDocument_1//*[@xml:id= $fragment-id ] | |
772 | id( $fragment-id ) | |
773 | $theDocument_1//*[@id= $fragment-id ]" /> | |
774 <xsl:if test="not($theFragment_1)"> | |
775 <xsl:message terminate="no"> | |
776 <xsl:text>Unable to locate id attribute: </xsl:text> | |
777 <xsl:value-of select="@href" /> | |
778 </xsl:message> | |
779 </xsl:if> | |
780 <xsl:apply-templates | |
781 select=" $theFragment_1[1]" mode="dsdl:go" /> | |
782 </xsl:for-each> | |
783 </xsl:when> | |
784 | |
785 <xsl:otherwise> | |
786 <xsl:variable name="theDocument_2" | |
787 select="document( $document-uri,/ )" /> | |
788 <xsl:variable name="theFragment_2" | |
789 select="$theDocument_2/*" /> | |
790 | |
791 <xsl:if test="not($theDocument_2)"> | |
792 <xsl:message terminate="no"> | |
793 <xsl:text>Unable to open referenced included file: </xsl:text> | |
794 <xsl:value-of select="@href" /> | |
795 </xsl:message> | |
796 </xsl:if> | |
797 | |
798 <xsl:if test="not($theFragment_2)"> | |
799 <xsl:message terminate="no"> | |
800 <xsl:text>Unable to locate id attribute: </xsl:text> | |
801 <xsl:value-of select="@href" /> | |
802 </xsl:message> | |
803 </xsl:if> | |
804 <xsl:apply-templates select="$theFragment_2 " | |
805 mode="dsdl:go" /> | |
806 </xsl:otherwise> | |
807 </xsl:choose> | |
808 | |
809 </xsl:otherwise> | |
810 </xsl:choose> | |
811 <xsl:processing-instruction name="DSDL_INCLUDE_END"> | |
812 <xsl:value-of select="@href" /> | |
813 </xsl:processing-instruction> | |
814 </xslt:template> | |
815 | |
816 <!-- =========================================================== --> | |
817 <!-- ISO/IEC 19757 - DSDL Document Schema Definition Languages --> | |
818 <!-- Part 7 - Character Repertoire Description Language - CRDL --> | |
819 <!-- Final Committee Draft 2008-01-11 Experimental support only --> | |
820 <!-- =========================================================== --> | |
821 <xslt:template match="crdl:ref" mode="dsdl:go"> | |
822 <!-- Insert subschema --> | |
823 | |
824 <xsl:variable name="document-uri" | |
825 select="substring-before(concat(@href,'#'), '#')" /> | |
826 <xsl:variable name="fragment-id" | |
827 select="substring-after(@href, '#')" /> | |
828 <xsl:processing-instruction name="DSDL_INCLUDE_START"> | |
829 <xsl:value-of select="@href" /> | |
830 </xsl:processing-instruction> | |
831 <xsl:choose> | |
832 <xsl:when test="not( $include-crdl = 'true' )"> | |
833 <xslt:copy> | |
834 <xslt:copy-of select="@*" /> | |
835 <xslt:apply-templates mode="dsdl:go" /> | |
836 </xslt:copy> | |
837 </xsl:when> | |
838 <xsl:otherwise> | |
839 <xsl:choose> | |
840 | |
841 <xsl:when | |
842 test="string-length( $document-uri ) = 0 and string-length( $fragment-id ) = 0"> | |
843 <xsl:message> | |
844 Error: Impossible URL in CRDL include | |
845 </xsl:message> | |
846 </xsl:when> | |
847 | |
848 <!-- this case is when there is in embedded schema in the same document elsewhere --> | |
849 <xslt:when | |
850 test="string-length( $document-uri ) = 0"> | |
851 | |
852 <xslt:apply-templates mode="dsdl:go" | |
853 select="//*[@xml:id= $fragment-id ] | id( $fragment-id) | |
854 | //*[@id= $fragment-id ]" /> | |
855 </xslt:when> | |
856 | |
857 <xsl:when | |
858 test="string-length( $fragment-id ) > 0"> | |
859 <xsl:variable name="theDocument_1" | |
860 select="document( $document-uri,/ )" /> | |
861 <xsl:if test="not($theDocument_1)"> | |
862 <xsl:message terminate="no"> | |
863 <xsl:text>Unable to open referenced included file: </xsl:text> | |
864 <xsl:value-of select="@href" /> | |
865 </xsl:message> | |
866 </xsl:if> | |
867 <!-- use for-each to rebase id() to $theDocument --> | |
868 <xsl:for-each select="$theDocument_1"> | |
869 <xsl:variable name="theFragment_1" | |
870 select="$theDocument_1//*[@xml:id= $fragment-id ] | |
871 | id( $fragment-id ) | |
872 | $theDocument_1//*[@id= $fragment-id ]" /> | |
873 | |
874 <xsl:if test="not($theFragment_1)"> | |
875 <xsl:message terminate="no"> | |
876 <xsl:text>Unable to locate id attribute: </xsl:text> | |
877 <xsl:value-of select="@href" /> | |
878 </xsl:message> | |
879 </xsl:if> | |
880 <xsl:apply-templates select=" $theFragment_1 " | |
881 mode="dsdl:go" /> | |
882 </xsl:for-each> | |
883 </xsl:when> | |
884 | |
885 <xsl:otherwise> | |
886 <xsl:variable name="theDocument_2" | |
887 select="document( $document-uri,/ )" /> | |
888 <xsl:variable name="theFragment_2" | |
889 select="$theDocument_2/*" /> | |
890 | |
891 <xsl:if test="not($theDocument_2)"> | |
892 <xsl:message terminate="no"> | |
893 <xsl:text>Unable to open referenced included file: </xsl:text> | |
894 <xsl:value-of select="@href" /> | |
895 </xsl:message> | |
896 </xsl:if> | |
897 <xsl:if test="not($theFragment_2)"> | |
898 <xsl:message terminate="no"> | |
899 <xsl:text>Unable to locate id attribute: </xsl:text> | |
900 <xsl:value-of select="@href" /> | |
901 </xsl:message> | |
902 </xsl:if> | |
903 | |
904 <xsl:apply-templates select="$theFragment_2" | |
905 mode="dsdl:go" /> | |
906 </xsl:otherwise> | |
907 </xsl:choose> | |
908 | |
909 </xsl:otherwise> | |
910 </xsl:choose> | |
911 <xsl:processing-instruction name="DSDL_INCLUDE_END"> | |
912 <xsl:value-of select="@href" /> | |
913 </xsl:processing-instruction> | |
914 </xslt:template> | |
915 | |
916 | |
917 <!-- =========================================================== --> | |
918 <!-- ISO/IEC 19757 - DSDL Document Schema Definition Languages --> | |
919 <!-- Part 4 - Namespace-based Validation Dispatching Language - NVDL --> | |
920 <!-- Note: This does not include schemas referenced for --> | |
921 <!-- validation, it merely handles any simple XIncludes --> | |
922 <!-- =========================================================== --> | |
923 <!-- ISO/IEC 19757 - DSDL Document Schema Definition Languages --> | |
924 <!-- Part 8 - Document Schema Renaming Language - DSRL --> | |
925 <!-- Note: Final? Committee Draft Experimental support only --> | |
926 <!-- =========================================================== --> | |
927 <!-- XInclude support for id based references only, with 1 level --> | |
928 <!-- of fallback. --> | |
929 <!-- =========================================================== --> | |
930 | |
931 <xslt:template mode="dsdl:go" | |
932 match="xi:include[@href][not(@parseType) or @parseType ='xml']"> | |
933 <!-- Simple inclusions only here --> | |
934 <xsl:processing-instruction name="DSDL_INCLUDE_START"> | |
935 <xsl:value-of select="@href" /> | |
936 </xsl:processing-instruction> | |
937 <xsl:choose> | |
938 <xsl:when test="not( $include-xinclude = 'true' )"> | |
939 <xslt:copy> | |
940 <xslt:copy-of select="@*" /> | |
941 <xslt:apply-templates mode="dsdl:go" /> | |
942 </xslt:copy> | |
943 </xsl:when> | |
944 <xsl:otherwise> | |
945 <xsl:choose> | |
946 | |
947 <xsl:when test="contains( @href, '#')"> | |
948 <xsl:message terminate="yes"> | |
949 Fatal error: Xinclude href contains fragment | |
950 identifier # | |
951 </xsl:message> | |
952 </xsl:when> | |
953 | |
954 | |
955 <xsl:when test="contains( @xpointer, '(')"> | |
956 <xsl:message terminate="yes"> | |
957 Fatal error: Sorry, this software only | |
958 supports simple ids in XInclude xpointers | |
959 </xsl:message> | |
960 </xsl:when> | |
961 | |
962 <xsl:when | |
963 test="string-length( @href ) = 0 and string-length( @xpointer ) = 0"> | |
964 | |
965 <xsl:message terminate="yes"> | |
966 Fatal Error: Impossible URL in XInclude | |
967 include | |
968 </xsl:message> | |
969 </xsl:when> | |
970 | |
971 <!-- this case is when there is in embedded schema in the same document elsewhere --> | |
972 <xslt:when test="string-length( @href ) = 0"> | |
973 | |
974 <xslt:apply-templates mode="dsdl:go" | |
975 select="//*[@xml:id= current()/@xpointer ] | id( @xpointer) | |
976 | //*[@id= current()/@xpointer ]" /> | |
977 </xslt:when> | |
978 | |
979 <xsl:when | |
980 test="string-length( @xpointer ) > 0"> | |
981 <xsl:variable name="theDocument_1" | |
982 select="document( @href,/ )" /> | |
983 <xsl:variable name="theFragment_1" | |
984 select="$theDocument_1//*[@xml:id= current()/@xpointer ] | |
985 | |
986 | $theDocument_1//*[@id= current()/@xpointer ]" /> | |
987 <!-- removed | |
988 | $theDocument_1/id( @xpointer) | |
989 because it requires rebasing in XSLT1 and that would mess up the use of current() | |
990 --> | |
991 | |
992 | |
993 <!-- Allow one level of fallback, to another XInclude --> | |
994 <xsl:if test="not($theDocument_1)"> | |
995 <xsl:choose> | |
996 <xsl:when test="xi:fallback"> | |
997 <xsl:variable name="theDocument_2" | |
998 select="document( xi:fallback[1]/xi:include[not(@parseType) | |
999 or @parseType='xml']/@href,/ )" /> | |
1000 <xsl:variable name="theFragment_2" | |
1001 select="$theDocument_2//*[@xml:id= current()/xi:fallback[1]/xi:include/@xpointer ] | |
1002 | $theDocument_2//*[@id= current()/xi:fallback[1]/xi:include/@xpointer ]" /> | |
1003 <!-- removed | |
1004 | $theDocument_2/id( xi:fallback[1]/xi:include/@xpointer) | |
1005 because it id() would need rebasing in XSLT1 and that would mess up use of current() | |
1006 --> | |
1007 | |
1008 <xsl:if | |
1009 test="not($theDocument_2)"> | |
1010 | |
1011 <xsl:message terminate="no"> | |
1012 <xsl:text>Unable to open referenced included file and fallback | |
1013 file: </xsl:text> | |
1014 <xsl:value-of | |
1015 select="@href" /> | |
1016 </xsl:message> | |
1017 </xsl:if> | |
1018 </xsl:when> | |
1019 <xsl:otherwise> | |
1020 <xsl:message terminate="no"> | |
1021 <xsl:text>Unable to open referenced included file: </xsl:text> | |
1022 <xsl:value-of select="@href" /> | |
1023 </xsl:message> | |
1024 </xsl:otherwise> | |
1025 </xsl:choose> | |
1026 </xsl:if> | |
1027 <xsl:apply-templates select=" $theFragment_1" | |
1028 mode="dsdl:go" /> | |
1029 </xsl:when> | |
1030 | |
1031 <!-- Document but no fragment specified --> | |
1032 <xsl:otherwise> | |
1033 <xsl:variable name="theDocument_3" | |
1034 select="document( @href,/ )" /> | |
1035 <xsl:variable name="theFragment_3" | |
1036 select="$theDocument_3/*" /> | |
1037 | |
1038 <xsl:if test="not($theDocument_3)"> | |
1039 <xsl:message terminate="no"> | |
1040 <xsl:text>Unable to open referenced included file: </xsl:text> | |
1041 <xsl:value-of select="@href" /> | |
1042 </xsl:message> | |
1043 </xsl:if> | |
1044 | |
1045 <xsl:apply-templates select="$theFragment_3 " | |
1046 mode="dsdl:go" /> | |
1047 </xsl:otherwise> | |
1048 </xsl:choose> | |
1049 | |
1050 </xsl:otherwise> | |
1051 </xsl:choose> | |
1052 <xsl:processing-instruction name="DSDL_INCLUDE_END"> | |
1053 <xsl:value-of select="@href" /> | |
1054 </xsl:processing-instruction> | |
1055 </xslt:template> | |
1056 | |
1057 <!-- =========================================================== --> | |
1058 <!-- W3C XLink 1.1 embedded simple links --> | |
1059 <!-- =========================================================== --> | |
1060 <xslt:template | |
1061 match="*[@xlink:href][not(parent::*[@xlink:type='complex'])] | |
1062 [not(@xlink:type) or (@xlink:type='simple')] | |
1063 [@xlink:show='embed'] | |
1064 [not(@xlink:actuate) or (@xlink:actuate='onLoad')]" | |
1065 mode="dsdl:go" priority="1"> | |
1066 | |
1067 <xsl:variable name="document-uri" | |
1068 select="substring-before(concat(@xlink:href,'#'), '#')" /> | |
1069 <xsl:variable name="fragment-id" | |
1070 select="substring-after(@xlink:href, '#')" /> | |
1071 <xsl:processing-instruction name="DSDL_INCLUDE_START"> | |
1072 <xsl:value-of select="@xlink:href" /> | |
1073 </xsl:processing-instruction> | |
1074 <xsl:choose> | |
1075 <xsl:when test="not( $include-xlink = 'true' )"> | |
1076 <xslt:copy> | |
1077 <xslt:copy-of select="@*" /> | |
1078 <xslt:apply-templates mode="dsdl:go" /> | |
1079 </xslt:copy> | |
1080 </xsl:when> | |
1081 <xsl:otherwise> | |
1082 <xsl:choose> | |
1083 | |
1084 <xsl:when | |
1085 test="string-length( $document-uri ) = 0 and string-length( $fragment-id ) = 0"> | |
1086 <xsl:message> | |
1087 Error: Impossible URL in XLink embedding | |
1088 link | |
1089 </xsl:message> | |
1090 </xsl:when> | |
1091 | |
1092 <!-- this case is when there is in embedded schema in the same document elsewhere --> | |
1093 <xslt:when | |
1094 test="string-length( $document-uri ) = 0"> | |
1095 <xslt:apply-templates mode="dsdl:go" | |
1096 select="//*[@xml:id= $fragment-id ] | id( $fragment-id) | |
1097 | //*[@id= $fragment-id ]" /> | |
1098 </xslt:when> | |
1099 | |
1100 <xsl:when | |
1101 test="string-length( $fragment-id ) > 0"> | |
1102 <xsl:variable name="theDocument_1" | |
1103 select="document( $document-uri,/ )" /> | |
1104 <xsl:if test="not($theDocument_1)"> | |
1105 <xsl:message terminate="no"> | |
1106 <xsl:text>Unable to open referenced included file: </xsl:text> | |
1107 <xsl:value-of select="@xlink:href" /> | |
1108 </xsl:message> | |
1109 </xsl:if> | |
1110 <!-- use for-each to rebase id() to $theDocument --> | |
1111 <xsl:for-each select="$theDocument_1"> | |
1112 <xsl:variable name="theFragment_1" | |
1113 select="$theDocument_1//*[@xml:id= $fragment-id ] | |
1114 | id( $fragment-id ) | |
1115 | $theDocument_1//*[@id= $fragment-id ]" /> | |
1116 <xsl:if test="not($theFragment_1)"> | |
1117 <xsl:message terminate="no"> | |
1118 <xsl:text>Unable to locate id attribute: </xsl:text> | |
1119 <xsl:value-of select="@xlink:href" /> | |
1120 </xsl:message> | |
1121 </xsl:if> | |
1122 <xsl:apply-templates | |
1123 select=" $theFragment_1[1]" mode="dsdl:go" /> | |
1124 </xsl:for-each> | |
1125 </xsl:when> | |
1126 | |
1127 <xsl:otherwise> | |
1128 <xsl:variable name="theDocument_2" | |
1129 select="document( $document-uri,/ )" /> | |
1130 <xsl:variable name="theFragment_2" | |
1131 select="$theDocument_2/*" /> | |
1132 | |
1133 <xsl:if test="not($theDocument_2)"> | |
1134 <xsl:message terminate="no"> | |
1135 <xsl:text>Unable to open referenced included file: </xsl:text> | |
1136 <xsl:value-of select="@xlink:href" /> | |
1137 </xsl:message> | |
1138 </xsl:if> | |
1139 | |
1140 <xsl:if test="not($theFragment_2)"> | |
1141 <xsl:message terminate="no"> | |
1142 <xsl:text>Unable to locate id attribute: </xsl:text> | |
1143 <xsl:value-of select="@xlink:href" /> | |
1144 </xsl:message> | |
1145 </xsl:if> | |
1146 <xsl:apply-templates select="$theFragment_2 " | |
1147 mode="dsdl:go" /> | |
1148 </xsl:otherwise> | |
1149 </xsl:choose> | |
1150 | |
1151 </xsl:otherwise> | |
1152 </xsl:choose> | |
1153 | |
1154 <xsl:processing-instruction name="DSDL_INCLUDE_END"> | |
1155 <xsl:value-of select="@xlink:href" /> | |
1156 </xsl:processing-instruction> | |
1157 </xslt:template> | |
1158 | |
1159 | |
1160 </xslt:stylesheet> |