get-meta.xsl 28 KB

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