get-meta.xsl 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <xsl:stylesheet version="2.0"
  3. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  4. xmlns:xs="http://www.w3.org/2001/XMLSchema"
  5. xmlns:ast="com.elovirta.dita.markdown"
  6. exclude-result-prefixes="xs ast">
  7. <xsl:key name="meta-keywords" match="*[ancestor::*[contains(@class,' topic/keywords ')]]" use="text()[1]"/>
  8. <xsl:template name="getMeta">
  9. <xsl:variable name="fields" as="element()*">
  10. <xsl:for-each select="*[contains(@class, ' topic/prolog ')] | /dita/*[1]/*[contains(@class, ' topic/prolog ')]">
  11. <xsl:call-template name="get-value">
  12. <xsl:with-param name="values" select="*[contains(@class, ' topic/author ')]"/>
  13. </xsl:call-template>
  14. <xsl:call-template name="get-value">
  15. <xsl:with-param name="values" select="*[contains(@class, ' topic/source ')]"/>
  16. </xsl:call-template>
  17. <xsl:call-template name="get-value">
  18. <xsl:with-param name="values" select="*[contains(@class, ' topic/publisher ')]"/>
  19. </xsl:call-template>
  20. <xsl:call-template name="get-value">
  21. <xsl:with-param name="values" select="*[contains(@class, ' topic/permissions ')]/@view"/>
  22. <xsl:with-param name="key" select="'permissions'"/>
  23. </xsl:call-template>
  24. <xsl:for-each select="*[contains(@class, ' topic/metadata ')]">
  25. <xsl:call-template name="get-value">
  26. <xsl:with-param name="values" select="*[contains(@class, ' topic/audience ')]"/>
  27. </xsl:call-template>
  28. <xsl:call-template name="get-value">
  29. <xsl:with-param name="values" select="*[contains(@class, ' topic/category ')]"/>
  30. </xsl:call-template>
  31. <xsl:call-template name="get-value">
  32. <xsl:with-param name="values" select="*[contains(@class, ' topic/keywords ')]/*[contains(@class, ' topic/keyword ')]"/>
  33. </xsl:call-template>
  34. </xsl:for-each>
  35. <xsl:call-template name="get-value">
  36. <xsl:with-param name="values" select="*[contains(@class, ' topic/resourceid ')]/@appid"/>
  37. <xsl:with-param name="key" select="'resourceid'"/>
  38. </xsl:call-template>
  39. </xsl:for-each>
  40. </xsl:variable>
  41. <xsl:if test="exists($fields)">
  42. <head>
  43. <map>
  44. <xsl:copy-of select="$fields"/>
  45. </map>
  46. </head>
  47. </xsl:if>
  48. <!--
  49. <xsl:apply-templates select="." mode="gen-type-metadata"/>
  50. <xsl:apply-templates select="*[contains(@class,' topic/title ')] |
  51. self::dita/*[1]/*[contains(@class,' topic/title ')]" mode="gen-metadata"/>
  52. <xsl:apply-templates select="*[contains(@class,' topic/shortdesc ')] |
  53. self::dita/*[1]/*[contains(@class,' topic/shortdesc ')]" mode="gen-metadata"/>
  54. <xsl:apply-templates select="*[contains(@class,' topic/abstract ')] |
  55. self::dita/*[1]/*[contains(@class,' topic/abstract ')]" mode="gen-shortdesc-metadata"/>
  56. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/source ')]/@href |
  57. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/source ')]/@href" mode="gen-metadata"/>
  58. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/category ')] |
  59. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/category ')]" mode="gen-metadata"/>
  60. <xsl:apply-templates select="." mode="gen-keywords-metadata"/>
  61. <xsl:apply-templates select="*[contains(@class,' topic/related-links ')]/descendant::*/@href |
  62. self::dita/*/*[contains(@class,' topic/related-links ')]/descendant::*/@href" mode="gen-metadata"/>
  63. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/audience ')]/@experiencelevel |
  64. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/audience ')]/@experiencelevel" mode="gen-metadata"/>
  65. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/audience ')]/@importance |
  66. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/audience ')]/@importance" mode="gen-metadata"/>
  67. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/audience ')]/@job |
  68. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/audience ')]/@job" mode="gen-metadata"/>
  69. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/audience ')]/@name |
  70. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/audience ')]/@name" mode="gen-metadata"/>
  71. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/audience ')]/@type |
  72. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/audience ')]/@type" mode="gen-metadata"/>
  73. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/prodname ')] |
  74. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/prodname ')]" mode="gen-metadata"/>
  75. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/vrmlist ')]/*[contains(@class,' topic/vrm ')]/@version |
  76. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/vrmlist ')]/*[contains(@class,' topic/vrm ')]/@version" mode="gen-metadata"/>
  77. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/vrmlist ')]/*[contains(@class,' topic/vrm ')]/@release |
  78. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/vrmlist ')]/*[contains(@class,' topic/vrm ')]/@release" mode="gen-metadata"/>
  79. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/vrmlist ')]/*[contains(@class,' topic/vrm ')]/@modification |
  80. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/vrmlist ')]/*[contains(@class,' topic/vrm ')]/@modification" mode="gen-metadata"/>
  81. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/brand ')] |
  82. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/brand ')]" mode="gen-metadata"/>
  83. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/component ')] |
  84. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/component ')]" mode="gen-metadata"/>
  85. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/featnum ')] |
  86. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/featnum ')]" mode="gen-metadata"/>
  87. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/prognum ')] |
  88. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/prognum ')]" mode="gen-metadata"/>
  89. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/platform ')] |
  90. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/platform ')]" mode="gen-metadata"/>
  91. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/series ')] |
  92. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/prodinfo ')]/*[contains(@class,' topic/series ')]" mode="gen-metadata"/>
  93. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/author ')] |
  94. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/author ')]" mode="gen-metadata"/>
  95. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/publisher ')] |
  96. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/publisher ')]" mode="gen-metadata"/>
  97. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/copyright ')][@type='primary'] |
  98. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/copyright ')][@type='primary']" mode="gen-metadata"/>
  99. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/copyright ')][@type='secondary'] |
  100. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/copyright ')][@type='seconday']" mode="gen-metadata"/>
  101. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/copyright ')][not(@type)] |
  102. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/copyright ')][not(@type)]" mode="gen-metadata"/>
  103. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/permissions ')] |
  104. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/permissions ')]" mode="gen-metadata"/>
  105. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/critdates ')]/*[contains(@class,' topic/created ')] |
  106. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/critdates ')]/*[contains(@class,' topic/created ')]" mode="gen-metadata"/>
  107. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/critdates ')]/*[contains(@class,' topic/revised ')]/@modified |
  108. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/critdates ')]/*[contains(@class,' topic/revised ')]/@modified" mode="gen-metadata"/>
  109. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/critdates ')]/*[contains(@class,' topic/revised ')]/@golive |
  110. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/critdates ')]/*[contains(@class,' topic/revised ')]/@golive" mode="gen-metadata"/>
  111. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/critdates ')]/*[contains(@class,' topic/revised ')]/@expiry |
  112. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/critdates ')]/*[contains(@class,' topic/revised ')]/@expiry" mode="gen-metadata"/>
  113. <xsl:apply-templates select="*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/othermeta ')] |
  114. self::dita/*[1]/*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/othermeta ')]" mode="gen-metadata"/>
  115. <xsl:apply-templates select="." mode="gen-format-metadata"/>
  116. <xsl:apply-templates select="@id | self::dita/*[1]/@id" mode="gen-metadata"/>
  117. <xsl:apply-templates select="@xml:lang | self::dita/*[1]/@xml:lang" mode="gen-metadata"/>
  118. -->
  119. </xsl:template>
  120. <xsl:template name="get-value">
  121. <xsl:param name="values" as="node()*"/>
  122. <xsl:param name="key" select="$values[1]/name()" as="xs:string?"/>
  123. <xsl:choose>
  124. <xsl:when test="count($values) eq 1">
  125. <entry key="{$key}">
  126. <xsl:value-of select="$values"/>
  127. </entry>
  128. </xsl:when>
  129. <xsl:when test="count($values) gt 1">
  130. <entry key="{$key}">
  131. <array>
  132. <xsl:for-each select="$values">
  133. <entry>
  134. <xsl:value-of select="."/>
  135. </entry>
  136. </xsl:for-each>
  137. </array>
  138. </entry>
  139. </xsl:when>
  140. </xsl:choose>
  141. </xsl:template>
  142. <!-- CONTENT: Type -->
  143. <xsl:template match="dita" mode="gen-type-metadata">
  144. <xsl:apply-templates select="*[1]" mode="gen-type-metadata"/>
  145. </xsl:template>
  146. <xsl:template match="*" mode="gen-type-metadata">
  147. <meta name="DC.Type" content="{name(.)}"/>
  148. </xsl:template>
  149. <!-- CONTENT: Title - title -->
  150. <xsl:template match="*[contains(@class,' topic/title ')]" mode="gen-metadata">
  151. <xsl:variable name="titlemeta">
  152. <xsl:apply-templates select="*|text()" mode="text-only"/>
  153. </xsl:variable>
  154. <meta name="DC.Title">
  155. <xsl:attribute name="content"><xsl:value-of select="normalize-space($titlemeta)"/></xsl:attribute>
  156. </meta>
  157. </xsl:template>
  158. <!-- CONTENT: Description - shortdesc -->
  159. <xsl:template match="*[contains(@class,' topic/shortdesc ')]" mode="gen-metadata">
  160. <xsl:variable name="shortmeta">
  161. <xsl:apply-templates select="*|text()" mode="text-only"/>
  162. </xsl:variable>
  163. <meta name="abstract">
  164. <xsl:attribute name="content"><xsl:value-of select="normalize-space($shortmeta)"/></xsl:attribute>
  165. </meta>
  166. <meta name="description">
  167. <xsl:attribute name="content"><xsl:value-of select="normalize-space($shortmeta)"/></xsl:attribute>
  168. </meta>
  169. </xsl:template>
  170. <xsl:template match="*[contains(@class,' topic/abstract ')]" mode="gen-shortdesc-metadata">
  171. <xsl:variable name="shortmeta">
  172. <xsl:for-each select="*[contains(@class,' topic/shortdesc ')]">
  173. <xsl:text> </xsl:text>
  174. <xsl:apply-templates select="*|text()" mode="text-only"/>
  175. </xsl:for-each>
  176. </xsl:variable>
  177. <xsl:if test="normalize-space($shortmeta)!=''">
  178. <meta name="abstract">
  179. <xsl:attribute name="content"><xsl:value-of select="normalize-space($shortmeta)"/></xsl:attribute>
  180. </meta>
  181. <meta name="description">
  182. <xsl:attribute name="content"><xsl:value-of select="normalize-space($shortmeta)"/></xsl:attribute>
  183. </meta>
  184. </xsl:if>
  185. </xsl:template>
  186. <!-- CONTENT: Source - prolog/source/@href -->
  187. <xsl:template match="*[contains(@class,' topic/source ')]/@href" mode="gen-metadata">
  188. <meta name="DC.Source" content="{normalize-space(.)}"/>
  189. </xsl:template>
  190. <!-- CONTENT: Coverage prolog/metadata/category -->
  191. <xsl:template match="*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/category ')]" mode="gen-metadata">
  192. <meta name="DC.Coverage" content="{normalize-space(.)}"/>
  193. </xsl:template>
  194. <!-- CONTENT: Subject - prolog/metadata/keywords -->
  195. <xsl:template match="*" mode="gen-keywords-metadata">
  196. <xsl:variable name="keywords-content">
  197. <!-- for each item inside keywords (including nested index terms) -->
  198. <xsl:for-each select="descendant::*[contains(@class,' topic/prolog ')]/*[contains(@class,' topic/metadata ')]/*[contains(@class,' topic/keywords ')]/descendant-or-self::*">
  199. <!-- If this is the first term or keyword with this value -->
  200. <xsl:if test="generate-id(key('meta-keywords',text()[1])[1])=generate-id(.)">
  201. <xsl:if test="position()>2"><xsl:text>, </xsl:text></xsl:if>
  202. <xsl:value-of select="normalize-space(text()[1])"/>
  203. </xsl:if>
  204. </xsl:for-each>
  205. </xsl:variable>
  206. <xsl:if test="string-length($keywords-content)>0">
  207. <meta name="DC.subject" content="{$keywords-content}"/>
  208. <meta name="keywords" content="{$keywords-content}"/>
  209. </xsl:if>
  210. </xsl:template>
  211. <!-- CONTENT: Relation - related-links -->
  212. <xsl:template match="*[contains(@class,' topic/link ')]/@href" mode="gen-metadata">
  213. <xsl:variable name="linkmeta" select="normalize-space(.)"/>
  214. <xsl:choose>
  215. <xsl:when test="substring($linkmeta,1,1)='#'" /> <!-- ignore internal file links -->
  216. <xsl:otherwise>
  217. <xsl:variable name="linkmeta_ext">
  218. <xsl:choose>
  219. <xsl:when test="not(../@format) or ../@format = 'dita'">
  220. <xsl:call-template name="replace-extension">
  221. <xsl:with-param name="filename" select="$linkmeta"/>
  222. <xsl:with-param name="extension" select="$OUTEXT"/>
  223. </xsl:call-template>
  224. </xsl:when>
  225. <xsl:otherwise>
  226. <xsl:value-of select="$linkmeta"/>
  227. </xsl:otherwise>
  228. </xsl:choose>
  229. </xsl:variable>
  230. <meta name="DC.Relation" scheme="URI">
  231. <xsl:attribute name="content"><xsl:value-of select="$linkmeta_ext"/></xsl:attribute>
  232. </meta>
  233. </xsl:otherwise>
  234. </xsl:choose>
  235. </xsl:template>
  236. <!-- Do not let any other @href's inside related-links generate metadata -->
  237. <xsl:template match="*/@href" mode="gen-metadata" priority="0"/>
  238. <!-- INTELLECTUAL PROPERTY: Contributor - prolog/author -->
  239. <!-- INTELLECTUAL PROPERTY: Creator -->
  240. <!-- Default is type='creator' -->
  241. <xsl:template match="*[contains(@class,' topic/author ')]" mode="gen-metadata">
  242. <xsl:choose>
  243. <xsl:when test="@type= 'contributor'">
  244. <meta name="DC.Contributor" content="{normalize-space(.)}"/>
  245. </xsl:when>
  246. <xsl:otherwise>
  247. <meta name="DC.Creator" content="{normalize-space(.)}"/>
  248. </xsl:otherwise>
  249. </xsl:choose>
  250. </xsl:template>
  251. <!-- INTELLECTUAL PROPERTY: Publisher - prolog/publisher -->
  252. <xsl:template match="*[contains(@class,' topic/publisher ')]" mode="gen-metadata">
  253. <meta name="DC.Publisher" content="{normalize-space(.)}"/>
  254. </xsl:template>
  255. <!-- Rights - prolog/copyright -->
  256. <xsl:template match="*[contains(@class,' topic/copyright ')]" mode="gen-metadata">
  257. <meta name="copyright">
  258. <xsl:attribute name="content">
  259. <xsl:choose>
  260. <!-- ./copyrholder/text() -->
  261. <xsl:when test="*[contains(@class,' topic/copyrholder ')]/text()">
  262. <xsl:value-of select="normalize-space(*[contains(@class,' topic/copyrholder ')])"/>
  263. </xsl:when>
  264. <xsl:otherwise>
  265. <xsl:text>(C) </xsl:text>
  266. <xsl:call-template name="getVariable">
  267. <xsl:with-param name="id" select="'Copyright'"/>
  268. </xsl:call-template>
  269. </xsl:otherwise>
  270. </xsl:choose>
  271. <!-- copyryear -->
  272. <xsl:for-each select="*[contains(@class,' topic/copyryear ')]">
  273. <xsl:text> </xsl:text><xsl:value-of select="@year"/>
  274. </xsl:for-each>
  275. </xsl:attribute>
  276. <xsl:choose>
  277. <xsl:when test="@type = 'secondary'">
  278. <xsl:attribute name="type">secondary</xsl:attribute>
  279. </xsl:when>
  280. <xsl:otherwise>
  281. <xsl:attribute name="type">primary</xsl:attribute>
  282. </xsl:otherwise>
  283. </xsl:choose>
  284. </meta>
  285. <meta name="DC.Rights.Owner">
  286. <xsl:attribute name="content">
  287. <xsl:choose>
  288. <xsl:when test="*[contains(@class,' topic/copyrholder ')]/text()">
  289. <xsl:value-of select="normalize-space(*[contains(@class,' topic/copyrholder ')])"/>
  290. </xsl:when>
  291. <xsl:otherwise>
  292. <xsl:text>(C) </xsl:text>
  293. <xsl:call-template name="getVariable">
  294. <xsl:with-param name="id" select="'Copyright'"/>
  295. </xsl:call-template>
  296. </xsl:otherwise>
  297. </xsl:choose>
  298. <xsl:for-each select="*[contains(@class,' topic/copyryear ')]">
  299. <xsl:text> </xsl:text><xsl:value-of select="@year"/>
  300. </xsl:for-each>
  301. </xsl:attribute>
  302. <xsl:choose>
  303. <xsl:when test="@type = 'secondary'">
  304. <xsl:attribute name="type">secondary</xsl:attribute>
  305. </xsl:when>
  306. <xsl:otherwise>
  307. <xsl:attribute name="type">primary</xsl:attribute>
  308. </xsl:otherwise>
  309. </xsl:choose>
  310. </meta>
  311. </xsl:template>
  312. <!-- Usage Rights - prolog/permissions -->
  313. <xsl:template match="*[contains(@class,' topic/permissions ')]" mode="gen-metadata">
  314. <meta name="DC.Rights.Usage" content="{@view}"/>
  315. </xsl:template>
  316. <!-- = = = = = = = = = = = Product - Audience = = = = = = = = = = = -->
  317. <!-- Audience -->
  318. <xsl:template match="*[contains(@class,' topic/audience ')]/@experiencelevel" mode="gen-metadata">
  319. <meta name="DC.Audience.Experiencelevel" content="{.}"/>
  320. </xsl:template>
  321. <xsl:template match="*[contains(@class,' topic/audience ')]/@importance" mode="gen-metadata">
  322. <meta name="DC.Audience.Importance" content="{.}"/>
  323. </xsl:template>
  324. <xsl:template match="*[contains(@class,' topic/audience ')]/@name" mode="gen-metadata">
  325. <meta name="DC.Audience.Name" content="{.}"/>
  326. </xsl:template>
  327. <xsl:template match="*[contains(@class,' topic/audience ')]/@job" mode="gen-metadata">
  328. <xsl:choose>
  329. <xsl:when test=".='other'">
  330. <meta name="DC.Audience.Job" content="{normalize-space(../@otherjob)}"/>
  331. </xsl:when>
  332. <xsl:otherwise>
  333. <meta name="DC.Audience.Job" content="{.}"/>
  334. </xsl:otherwise>
  335. </xsl:choose>
  336. </xsl:template>
  337. <xsl:template match="*[contains(@class,' topic/audience ')]/@type" mode="gen-metadata">
  338. <xsl:choose>
  339. <xsl:when test=".='other'">
  340. <meta name="DC.Audience.Type" content="{normalize-space(../@othertype)}"/>
  341. </xsl:when>
  342. <xsl:otherwise>
  343. <meta name="DC.Audience.Type" content="{.}"/>
  344. </xsl:otherwise>
  345. </xsl:choose>
  346. </xsl:template>
  347. <xsl:template match="*[contains(@class,' topic/prodname ')]" mode="gen-metadata">
  348. <xsl:variable name="prodnamemeta">
  349. <xsl:apply-templates select="*|text()" mode="text-only"/>
  350. </xsl:variable>
  351. <meta name="prodname">
  352. <xsl:attribute name="content"><xsl:value-of select="normalize-space($prodnamemeta)"/></xsl:attribute>
  353. </meta>
  354. </xsl:template>
  355. <xsl:template match="*[contains(@class,' topic/vrm ')]/@version" mode="gen-metadata">
  356. <meta name="version" content="{.}"/>
  357. </xsl:template>
  358. <xsl:template match="*[contains(@class,' topic/vrm ')]/@release" mode="gen-metadata">
  359. <meta name="release" content="{.}"/>
  360. </xsl:template>
  361. <xsl:template match="*[contains(@class,' topic/vrm ')]/@modification" mode="gen-metadata">
  362. <meta name="modification" content="{.}"/>
  363. </xsl:template>
  364. <xsl:template match="*[contains(@class,' topic/brand ')]" mode="gen-metadata">
  365. <xsl:variable name="brandmeta">
  366. <xsl:apply-templates select="*|text()" mode="text-only"/>
  367. </xsl:variable>
  368. <meta name="brand">
  369. <xsl:attribute name="content"><xsl:value-of select="normalize-space($brandmeta)"/></xsl:attribute>
  370. </meta>
  371. </xsl:template>
  372. <xsl:template match="*[contains(@class,' topic/component ')]" mode="gen-metadata">
  373. <xsl:variable name="componentmeta">
  374. <xsl:apply-templates select="*|text()" mode="text-only"/>
  375. </xsl:variable>
  376. <meta name="component">
  377. <xsl:attribute name="content"><xsl:value-of select="normalize-space($componentmeta)"/></xsl:attribute>
  378. </meta>
  379. </xsl:template>
  380. <xsl:template match="*[contains(@class,' topic/featnum ')]" mode="gen-metadata">
  381. <xsl:variable name="featnummeta">
  382. <xsl:apply-templates select="*|text()" mode="text-only"/>
  383. </xsl:variable>
  384. <meta name="featnum">
  385. <xsl:attribute name="content"><xsl:value-of select="normalize-space($featnummeta)"/></xsl:attribute>
  386. </meta>
  387. </xsl:template>
  388. <xsl:template match="*[contains(@class,' topic/prognum ')]" mode="gen-metadata">
  389. <xsl:variable name="prognummeta">
  390. <xsl:apply-templates select="*|text()" mode="text-only"/>
  391. </xsl:variable>
  392. <meta name="prognum">
  393. <xsl:attribute name="content"><xsl:value-of select="normalize-space($prognummeta)"/></xsl:attribute>
  394. </meta>
  395. </xsl:template>
  396. <xsl:template match="*[contains(@class,' topic/platform ')]" mode="gen-metadata">
  397. <xsl:variable name="platformmeta">
  398. <xsl:apply-templates select="*|text()" mode="text-only"/>
  399. </xsl:variable>
  400. <meta name="platform">
  401. <xsl:attribute name="content"><xsl:value-of select="normalize-space($platformmeta)"/></xsl:attribute>
  402. </meta>
  403. </xsl:template>
  404. <xsl:template match="*[contains(@class,' topic/series ')]" mode="gen-metadata">
  405. <xsl:variable name="seriesmeta">
  406. <xsl:apply-templates select="*|text()" mode="text-only"/>
  407. </xsl:variable>
  408. <meta name="series">
  409. <xsl:attribute name="content"><xsl:value-of select="normalize-space($seriesmeta)"/></xsl:attribute>
  410. </meta>
  411. </xsl:template>
  412. <!-- INSTANTIATION: Date - prolog/critdates/created -->
  413. <xsl:template match="*[contains(@class,' topic/critdates ')]/*[contains(@class,' topic/created ')]" mode="gen-metadata">
  414. <meta name="DC.Date.Created" content="{@date}"/>
  415. </xsl:template>
  416. <!-- prolog/critdates/revised/@modified -->
  417. <xsl:template match="*[contains(@class,' topic/critdates ')]/*[contains(@class,' topic/revised ')]/@modified" mode="gen-metadata">
  418. <meta name="DC.Date.Modified" content="{.}"/>
  419. </xsl:template>
  420. <!-- prolog/critdates/revised/@golive -->
  421. <xsl:template match="*[contains(@class,' topic/critdates ')]/*[contains(@class,' topic/revised ')]/@golive" mode="gen-metadata">
  422. <meta name="DC.Date.Issued" content="{.}"/>
  423. <meta name="DC.Date.Available" content="{.}"/>
  424. </xsl:template>
  425. <!-- prolog/critdates/revised/@expiry -->
  426. <xsl:template match="*[contains(@class,' topic/critdates ')]/*[contains(@class,' topic/revised ')]/@expiry" mode="gen-metadata">
  427. <meta name="DC.Date.Expiry" content="{.}"/>
  428. </xsl:template>
  429. <xsl:template match="*[contains(@class,' topic/othermeta ')]" mode="gen-metadata">
  430. <meta name="{@name}" content="{@content}"/>
  431. </xsl:template>
  432. <xsl:template match="*" mode="gen-format-metadata">
  433. <meta name="DC.Format" content="XHTML"/>
  434. </xsl:template>
  435. <xsl:template match="@id" mode="gen-metadata">
  436. <meta name="DC.Identifier" content="{.}"/>
  437. </xsl:template>
  438. <xsl:template match="@xml:lang" mode="gen-metadata">
  439. <meta name="DC.Language" content="{.}"/>
  440. </xsl:template>
  441. </xsl:stylesheet>