Mercurial > pub > ModelGenerator
comparison xslt/model.xsl @ 8:5fe2e5724331
sync
| author | cin |
|---|---|
| date | Wed, 07 Mar 2018 15:54:22 +0300 |
| parents | 3fe157be5141 |
| children | d3542662cf70 |
comparison
equal
deleted
inserted
replaced
| 7:3fe157be5141 | 8:5fe2e5724331 |
|---|---|
| 166 <xsl:with-param name="scope" select="'keys'"/> | 166 <xsl:with-param name="scope" select="'keys'"/> |
| 167 </xsl:call-template> | 167 </xsl:call-template> |
| 168 </xsl:template> | 168 </xsl:template> |
| 169 | 169 |
| 170 <!-- expand-member templates are used to process relations | 170 <!-- expand-member templates are used to process relations |
| 171 and keys and provide usefull information like properties of | 171 and keys and provide usefull information. This mode is designed |
| 172 the entity which are members of this relation or key. | 172 to recursively traverse members expanding details like special |
| 173 properties generated by relations. | |
| 174 | |
| 175 expand-member-reference is special mode used to traverse inside | |
| 176 members which are referenced from relations. By default this mode | |
| 177 does nothing. | |
| 178 | |
| 179 Use this templates to produce intermediate model for further | |
| 180 processing by specific code-generators. | |
| 173 | 181 |
| 174 @special - means that the member is a composite part and isn't | 182 @special - means that the member is a composite part and isn't |
| 175 accessible directly | 183 accessible directly |
| 176 --> | 184 --> |
| 177 | 185 |
| 186 <xsl:template match="*" mode="expand-member"> | |
| 187 <xsl:apply-templates mode="expand-member"/> | |
| 188 </xsl:template> | |
| 189 <xsl:template match="text()" mode="expand-member"/> | |
| 190 | |
| 191 <xsl:template match="*|text()" mode="expand-member-reference"/> | |
| 192 | |
| 178 <!-- short form of primaryKey{@name, @type} --> | 193 <!-- short form of primaryKey{@name, @type} --> |
| 179 <xsl:template match="m:primaryKey" mode="expand-member"> | 194 <xsl:template match="m:primaryKey" mode="expand-member"> |
| 180 <xsl:copy> | 195 <xsl:variable name="specialProperty"> |
| 181 <xsl:copy-of select="@*"/> | |
| 182 <m:property special="true"> | 196 <m:property special="true"> |
| 183 <xsl:copy-of select="@*" /> | 197 <xsl:copy-of select="@*" /> |
| 198 <m:hiddenBy name="{@name}" type="{@declaringType}"/> | |
| 184 <xsl:copy-of select="*" /> | 199 <xsl:copy-of select="*" /> |
| 185 </m:property> | 200 </m:property> |
| 186 </xsl:copy> | 201 </xsl:variable> |
| 202 <xsl:apply-templates select="exsl:node-set($specialProperty)" mode="expand-member"/> | |
| 203 <xsl:apply-templates mode="expand-member"/> | |
| 187 </xsl:template> | 204 </xsl:template> |
| 188 | 205 |
| 189 <!-- long form of primaryKey{ member{@name}+, property{@name, @type} } --> | 206 <!-- long form of primaryKey{ member{@name}+, property{@name, @type} } --> |
| 190 <xsl:template match="m:primaryKey[m:member | m:property]" mode="expand-member"> | 207 <xsl:template match="m:primaryKey[m:member | m:property]" mode="expand-member"> |
| 191 <xsl:copy> | 208 <xsl:apply-templates mode="expand-member"/> |
| 192 <xsl:copy-of select="@*"/> | |
| 193 <xsl:apply-templates mode="expand-member"/> | |
| 194 </xsl:copy> | |
| 195 </xsl:template> | |
| 196 | |
| 197 <!-- stand alone properties --> | |
| 198 <xsl:template match="m:property" mode="expand-member"> | |
| 199 <xsl:copy-of select="."/> | |
| 200 </xsl:template> | 209 </xsl:template> |
| 201 | 210 |
| 202 <!-- properties declared inside relations, they are @special --> | 211 <!-- properties declared inside relations, they are @special --> |
| 203 <xsl:template match="m:primaryKey/m:property | m:thisKey/m:property" mode="expand-member"> | 212 <xsl:template match="m:primaryKey/m:property | m:thisKey/m:property" mode="expand-member"> |
| 204 <xsl:copy> | 213 <xsl:variable name="specialProperty"> |
| 205 <xsl:attribute name="special">true</xsl:attribute> | 214 <xsl:copy> |
| 206 <xsl:copy-of select="@*"/> | 215 <xsl:attribute name="special">true</xsl:attribute> |
| 207 <xsl:copy-of select="*"/> | 216 <xsl:copy-of select="@*"/> |
| 208 </xsl:copy> | 217 <m:hiddenBy name="{@name}" type="{@declaringType}"/> |
| 209 </xsl:template> | 218 <xsl:copy-of select="*"/> |
| 210 | 219 </xsl:copy> |
| 220 </xsl:variable> | |
| 221 <xsl:apply-templates select="exsl:node-set($specialProperty)" mode="expand-member"/> | |
| 222 </xsl:template> | |
| 223 | |
| 224 <!-- traverse inside referenced members --> | |
| 211 <xsl:template match="m:member" mode="expand-member"> | 225 <xsl:template match="m:member" mode="expand-member"> |
| 212 <xsl:param name="declaringType"/> | 226 <xsl:param name="declaringType"/> |
| 213 <xsl:variable name="expanded"> | 227 <xsl:variable name="expanded"> |
| 214 <xsl:call-template name="getMembers"> | 228 <xsl:call-template name="getMembers"> |
| 215 <xsl:with-param name="memberName" select="@name"/> | 229 <xsl:with-param name="memberName" select="@name"/> |
| 216 <xsl:with-param name="type" select="$declaringType"/> | 230 <xsl:with-param name="type" select="$declaringType"/> |
| 217 </xsl:call-template> | 231 </xsl:call-template> |
| 218 </xsl:variable> | 232 </xsl:variable> |
| 219 <!-- recusive expand --> | 233 <!-- recusive expand --> |
| 220 <xsl:apply-templates select="exsl:node-set($expanded)" mode="expand-member"/> | 234 <xsl:apply-templates select="exsl:node-set($expanded)" mode="expand-member-reference"/> |
| 221 </xsl:template> | 235 </xsl:template> |
| 222 | 236 |
| 223 <xsl:template match="m:hasA" mode="expand-member"> | 237 <xsl:template match="m:hasA/m:thisKey" mode="expand-member"> |
| 224 <xsl:copy> | |
| 225 <xsl:copy-of select="@*"/> | |
| 226 | |
| 227 <xsl:apply-templates mode="expand-member"/> | |
| 228 </xsl:copy> | |
| 229 </xsl:template> | |
| 230 | |
| 231 <xsl:template match="m:thisKey" mode="expand-member"> | |
| 232 <xsl:variable name="otherKey"> | 238 <xsl:variable name="otherKey"> |
| 233 <xsl:call-template name="getPrimaryKey"> | 239 <xsl:call-template name="getPrimaryKey"> |
| 234 <xsl:with-param name="type" select="../@type"/> | 240 <xsl:with-param name="type" select="../@type"/> |
| 235 </xsl:call-template> | 241 </xsl:call-template> |
| 236 </xsl:variable> | 242 </xsl:variable> |
