comparison software/eXist/webapp/mpdl/presentation/insertExternalElements.xsl @ 13:469d927b9ca7

diverse Fehlerbehebungen
author Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
date Tue, 19 Apr 2011 16:51:59 +0200
parents 1ec29fdd0db8
children e99964f390e4
comparison
equal deleted inserted replaced
12:fba5577e49d9 13:469d927b9ca7
9 9
10 <xsl:output method="xml" encoding="utf-8"/> 10 <xsl:output method="xml" encoding="utf-8"/>
11 <xsl:output name="myXml" indent="yes" omit-xml-declaration="yes"/> 11 <xsl:output name="myXml" indent="yes" omit-xml-declaration="yes"/>
12 12
13 <xsl:variable name="externalElements" select="/result/externalElements"/> 13 <xsl:variable name="externalElements" select="/result/externalElements"/>
14 <xsl:variable name="xpointer" select="/result/xpointer"/>
15 <xsl:variable name="xpointerPath">
16 <xsl:choose>
17 <xsl:when test="contains($xpointer, '/range(')">
18 <xsl:value-of select="substring-before($xpointer, '/range(')"/>
19 </xsl:when>
20 <xsl:when test="contains($xpointer, '/point(')">
21 <xsl:value-of select="substring-before($xpointer, '/point(')"/>
22 </xsl:when>
23 <xsl:otherwise><xsl:value-of select="$xpointer"/></xsl:otherwise>
24 </xsl:choose>
25 </xsl:variable>
26 <xsl:variable name="xpointerRange">
27 <xsl:choose>
28 <xsl:when test="contains($xpointer, '/range(')">
29 <xsl:value-of select="substring-before(substring-after($xpointer, '/range('), ')')"/>
30 </xsl:when>
31 <xsl:otherwise><xsl:value-of select="''"/></xsl:otherwise>
32 </xsl:choose>
33 </xsl:variable>
34 <xsl:variable name="xpointerPoint">
35 <xsl:choose>
36 <xsl:when test="contains($xpointer, '/point(')">
37 <xsl:value-of select="substring-before(substring-after($xpointer, '/point('), ')')"/>
38 </xsl:when>
39 <xsl:otherwise><xsl:value-of select="''"/></xsl:otherwise>
40 </xsl:choose>
41 </xsl:variable>
42 <xsl:variable name="xpointerRangeFromTmp" select="substring-before($xpointerRange, ',')"/>
43 <xsl:variable name="xpointerRangeFrom">
44 <xsl:choose>
45 <xsl:when test="$xpointerRangeFromTmp = ''">
46 <xsl:value-of select="xs:integer(0)"/>
47 </xsl:when>
48 <xsl:when test="contains($xpointerRangeFromTmp, '-')">
49 <xsl:value-of select="xs:integer(0)"/>
50 </xsl:when>
51 <xsl:otherwise><xsl:value-of select="xs:integer($xpointerRangeFromTmp)"/></xsl:otherwise>
52 </xsl:choose>
53 </xsl:variable>
54 <xsl:variable name="xpointerRangeToTmp" select="substring-after($xpointerRange, ',')"/>
55 <xsl:variable name="xpointerRangeTo">
56 <xsl:choose>
57 <xsl:when test="$xpointerRangeToTmp = ''">
58 <xsl:value-of select="xs:integer(0)"/>
59 </xsl:when>
60 <xsl:when test="contains($xpointerRangeToTmp, '-')">
61 <xsl:value-of select="xs:integer(0)"/>
62 </xsl:when>
63 <xsl:otherwise><xsl:value-of select="xs:integer($xpointerRangeToTmp)"/></xsl:otherwise>
64 </xsl:choose>
65 </xsl:variable>
14 <xsl:variable name="fragment" select="/result/fragment"/> 66 <xsl:variable name="fragment" select="/result/fragment"/>
15 67
16 <xsl:template match="result"> 68 <xsl:template match="result">
17 <xsl:apply-templates/> 69 <xsl:apply-templates/>
18 </xsl:template> 70 </xsl:template>
19 <xsl:template match="fragment"> 71 <xsl:template match="fragment">
20 <xsl:apply-templates/> 72 <xsl:apply-templates/>
21 </xsl:template> 73 </xsl:template>
22 <xsl:template match="externalElements"> 74 <xsl:template match="externalElements"></xsl:template>
23 </xsl:template> 75 <xsl:template match="xpointer"></xsl:template>
24 76
25 <xsl:template match="attribute()|text()|comment()|processing-instruction()"> 77 <xsl:template match="attribute()|text()|comment()|processing-instruction()">
26 <xsl:copy> 78 <xsl:copy>
27 <xsl:apply-templates select="attribute()|element()|text()|comment()|processing-instruction()"/> 79 <xsl:apply-templates select="attribute()|element()|text()|comment()|processing-instruction()"/>
28 </xsl:copy> 80 </xsl:copy>
33 <xsl:variable name="elemXmlNodeId" select="concat('/', substring-after(substring-after(substring-after($elemXmlNodeIdTmp, '/'), '/'), '/'))"/> 85 <xsl:variable name="elemXmlNodeId" select="concat('/', substring-after(substring-after(substring-after($elemXmlNodeIdTmp, '/'), '/'), '/'))"/>
34 <xsl:variable name="extElemXmlNodeIds" select="$externalElements//@xmlNodeId"/> 86 <xsl:variable name="extElemXmlNodeIds" select="$externalElements//@xmlNodeId"/>
35 <xsl:variable name="extElemIndex" select="index-of($extElemXmlNodeIds, $elemXmlNodeId)"/> 87 <xsl:variable name="extElemIndex" select="index-of($extElemXmlNodeIds, $elemXmlNodeId)"/>
36 <xsl:variable name="extElem" select="$externalElements/*[$extElemIndex]"/> 88 <xsl:variable name="extElem" select="$externalElements/*[$extElemIndex]"/>
37 <xsl:variable name="extElemContent" select="$extElem/content/*[1]"/> 89 <xsl:variable name="extElemContent" select="$extElem/content/*[1]"/>
38 <xsl:variable name="extElemContentSerialized" select="saxon:serialize($extElemContent, 'myXml')"/> 90 <xsl:variable name="extElemXPointer" select="$extElem/@xpointer"/>
39 <xsl:variable name="before"> 91 <xsl:variable name="extElemXPointerPoint" select="substring-before(substring-after($extElemXPointer, '/point('), ')')"/>
92 <xsl:variable name="extElemXPointerPointInt">
40 <xsl:choose> 93 <xsl:choose>
41 <xsl:when test="empty($extElem/@before) or $extElem/@before = ''"> 94 <xsl:when test="$extElemXPointerPoint != '.0' and $extElemXPointerPoint != '.1' and $extElemXPointerPoint != ''">
42 <xsl:value-of select="''"/> 95 <xsl:value-of select="xs:integer($extElemXPointerPoint)"/>
43 </xsl:when> 96 </xsl:when>
44 <xsl:otherwise> 97 <xsl:otherwise>
45 <xsl:value-of select="string($extElem/@before)"/> 98 <xsl:value-of select="xs:integer(-1)"/>
46 </xsl:otherwise> 99 </xsl:otherwise>
47 </xsl:choose> 100 </xsl:choose>
48 </xsl:variable> 101 </xsl:variable>
49 <xsl:variable name="charPos"> 102 <xsl:variable name="insertedXPointer">
50 <xsl:choose> 103 <xsl:choose>
51 <xsl:when test="empty($extElem/@charPos) or $extElem/@charPos = ''"> 104 <xsl:when test="$xpointerRange != ''">
52 <xsl:value-of select="xs:integer(-1)"/> 105 <xsl:variable name="elemSerialized" select="saxon:serialize(., 'myXml')"/>
106 <xsl:variable name="tmp" select="mpdlxmlutil:insertAtCharPos(mpdlxmlutil:new(), $elemSerialized, string($xpointerRangeFrom), '&lt;seg rend=&quot;highlight&quot;&gt;')"/>
107 <xsl:variable name="tmp2" select="mpdlxmlutil:insertAtCharPos(mpdlxmlutil:new(), $tmp, string($xpointerRangeTo), '&lt;/seg&gt;')"/>
108 <xsl:sequence select="saxon:parse($tmp2)"/>
109 </xsl:when>
110 <xsl:when test="$xpointerPoint = '.0'">
111 <xsl:variable name="elemSerialized" select="saxon:serialize(., 'myXml')"/>
112 <xsl:variable name="tmp" select="'&lt;bla&gt;'"/><xsl:value-of select="'&lt;seg rend=&quot;highlightPoint&quot;/&gt;'"/><xsl:value-of select="$elemSerialized"/><xsl:value-of select="'&lt;/bla&gt;'"/>
113 <xsl:sequence select="saxon:parse($tmp)"/>
114 </xsl:when>
115 <xsl:when test="$xpointerPoint = '.1'">
116 <xsl:variable name="elemSerialized" select="saxon:serialize(., 'myXml')"/>
117 <xsl:variable name="tmp" select="'&lt;bla&gt;'"/><xsl:value-of select="$elemSerialized"/><xsl:value-of select="'&lt;seg rend=&quot;highlightPoint&quot;/&gt;'"/><xsl:value-of select="'&lt;/bla&gt;'"/>
118 <xsl:sequence select="saxon:parse($tmp)"/>
119 </xsl:when>
120 <xsl:when test="$xpointerPoint != ''">
121 <xsl:variable name="elemSerialized" select="saxon:serialize(., 'myXml')"/>
122 <xsl:variable name="tmp" select="mpdlxmlutil:insertAtCharPos(mpdlxmlutil:new(), $elemSerialized, string($xpointerPoint), '&lt;seg rend=&quot;highlightPoint&quot;/&gt;')"/>
123 <xsl:sequence select="saxon:parse($tmp)"/>
53 </xsl:when> 124 </xsl:when>
54 <xsl:otherwise> 125 <xsl:otherwise>
55 <xsl:sequence select="xs:integer($extElem/@charPos)"/> 126 <xsl:value-of select="''"/>
56 </xsl:otherwise> 127 </xsl:otherwise>
57 </xsl:choose> 128 </xsl:choose>
58 </xsl:variable> 129 </xsl:variable>
59 <xsl:variable name="elemSerialized" select="saxon:serialize(., 'myXml')"/> 130 <xsl:variable name="thisElement">
60 <xsl:variable name="insertedElemSerialized" select="mpdlxmlutil:insertAtCharPos(mpdlxmlutil:new(), $elemSerialized, string($charPos), $extElemContentSerialized)"/>
61 <xsl:variable name="insertedElemDeSerializedTmp" select="saxon:parse($insertedElemSerialized)"/>
62 <xsl:variable name="insertedElemDeSerialized">
63 <xsl:element name="{name()}">
64 <xsl:apply-templates select="attribute()"/>
65 <xsl:attribute name="xmlNodeId">
66 <xsl:value-of select="$elemXmlNodeId"/>
67 </xsl:attribute>
68 <xsl:sequence select="$insertedElemDeSerializedTmp/*[1]/node()"/>
69 </xsl:element>
70 </xsl:variable>
71 <xsl:if test="$charPos &lt; 0 and $before = 'true'">
72 <xsl:sequence select="$extElemContent"/>
73 </xsl:if>
74 <xsl:if test="$charPos &gt;= 0">
75 <xsl:sequence select="$insertedElemDeSerialized"/>
76 </xsl:if>
77 <xsl:if test="$charPos &lt; 0">
78 <xsl:copy> 131 <xsl:copy>
79 <xsl:apply-templates select="attribute()"/> 132 <xsl:apply-templates select="attribute()"/>
80 <xsl:attribute name="xmlNodeId"> 133 <xsl:attribute name="xmlNodeId">
81 <xsl:value-of select="$elemXmlNodeId"/> 134 <xsl:value-of select="$elemXmlNodeId"/>
82 </xsl:attribute> 135 </xsl:attribute>
83 <xsl:apply-templates select="element()|text()|comment()|processing-instruction()"/> 136 <xsl:apply-templates select="element()|text()|comment()|processing-instruction()"/>
84 </xsl:copy> 137 </xsl:copy>
138 </xsl:variable>
139 <xsl:if test="$extElemXPointerPoint = '.0'">
140 <xsl:sequence select="$extElemContent"/>
85 </xsl:if> 141 </xsl:if>
86 <xsl:if test="$charPos &lt; 0 and $before = 'false'"> 142 <xsl:if test="$extElemXPointerPointInt &gt;= 0">
143 <xsl:variable name="extElemContent" select="$extElem/content/*[1]"/>
144 <xsl:variable name="extElemContentSerialized" select="saxon:serialize($extElemContent, 'myXml')"/>
145 <xsl:variable name="elemSerialized" select="saxon:serialize(., 'myXml')"/>
146 <xsl:variable name="insertedElemSerialized" select="mpdlxmlutil:insertAtCharPos(mpdlxmlutil:new(), $elemSerialized, string($extElemXPointerPointInt), $extElemContentSerialized)"/>
147 <xsl:variable name="insertedElemDeSerializedTmp" select="saxon:parse($insertedElemSerialized)"/>
148 <xsl:variable name="insertedElemDeSerialized">
149 <xsl:element name="{name()}">
150 <xsl:apply-templates select="attribute()"/>
151 <xsl:attribute name="xmlNodeId">
152 <xsl:value-of select="$elemXmlNodeId"/>
153 </xsl:attribute>
154 <xsl:sequence select="$insertedElemDeSerializedTmp/*[1]/node()"/>
155 </xsl:element>
156 </xsl:variable>
157 <xsl:sequence select="$insertedElemDeSerialized"/>
158 </xsl:if>
159 <xsl:if test="$extElemXPointerPoint = '.0' or $extElemXPointerPoint = '.1' or $extElemXPointerPoint = ''">
160 <xsl:choose>
161 <xsl:when test="$xpointerPath = $elemXmlNodeId and ($xpointerRange != '' or $xpointerPoint != '')">
162 <xsl:sequence select="$insertedXPointer"/>
163 </xsl:when>
164 <xsl:when test="$xpointerPath = $elemXmlNodeId and ($xpointerRange = '' and $xpointerPoint = '')">
165 <seg rend="highlight">
166 <xsl:sequence select="$thisElement"/>
167 </seg>
168 </xsl:when>
169 <xsl:otherwise>
170 <xsl:sequence select="$thisElement"/>
171 </xsl:otherwise>
172 </xsl:choose>
173 </xsl:if>
174 <xsl:if test="$extElemXPointerPoint = '.1'">
87 <xsl:sequence select="$extElemContent"/> 175 <xsl:sequence select="$extElemContent"/>
88 </xsl:if> 176 </xsl:if>
89 </xsl:template> 177 </xsl:template>
90 178
91 </xsl:stylesheet> 179 </xsl:stylesheet>