bolognese 0.4.3 → 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/build.yml +9 -0
  3. data/.github/workflows/changelog.yml +36 -0
  4. data/.github/workflows/ci.yml +22 -0
  5. data/.github/workflows/pull-request.yml +9 -0
  6. data/.github/workflows/release.yml +32 -0
  7. data/.gitignore +4 -0
  8. data/.rubocop.yml +658 -0
  9. data/CHANGELOG.md +1864 -0
  10. data/CITATION +17 -0
  11. data/Gemfile +1 -1
  12. data/Gemfile.lock +250 -98
  13. data/README.md +963 -21
  14. data/Rakefile +1 -0
  15. data/bin/bolognese +5 -1
  16. data/bolognese.gemspec +33 -21
  17. data/lib/bolognese/array.rb +13 -0
  18. data/lib/bolognese/author_utils.rb +147 -33
  19. data/lib/bolognese/citeproc_extensions.rb +48 -0
  20. data/lib/bolognese/cli.rb +28 -21
  21. data/lib/bolognese/datacite_utils.rb +292 -104
  22. data/lib/bolognese/doi_utils.rb +44 -20
  23. data/lib/bolognese/metadata.rb +249 -23
  24. data/lib/bolognese/metadata_utils.rb +228 -0
  25. data/lib/bolognese/pubmed.rb +2 -0
  26. data/lib/bolognese/readers/bibtex_reader.rb +100 -0
  27. data/lib/bolognese/readers/citeproc_reader.rb +125 -0
  28. data/lib/bolognese/readers/codemeta_reader.rb +108 -0
  29. data/lib/bolognese/readers/crosscite_reader.rb +17 -0
  30. data/lib/bolognese/readers/crossref_reader.rb +413 -0
  31. data/lib/bolognese/readers/datacite_json_reader.rb +17 -0
  32. data/lib/bolognese/readers/datacite_reader.rb +341 -0
  33. data/lib/bolognese/readers/npm_reader.rb +115 -0
  34. data/lib/bolognese/readers/ris_reader.rb +114 -0
  35. data/lib/bolognese/readers/schema_org_reader.rb +264 -0
  36. data/lib/bolognese/string.rb +3 -1
  37. data/lib/bolognese/utils.rb +1463 -25
  38. data/lib/bolognese/version.rb +1 -1
  39. data/lib/bolognese/whitelist_scrubber.rb +47 -0
  40. data/lib/bolognese/writers/bibtex_writer.rb +32 -0
  41. data/lib/bolognese/writers/citation_writer.rb +14 -0
  42. data/lib/bolognese/writers/citeproc_writer.rb +11 -0
  43. data/lib/bolognese/writers/codemeta_writer.rb +29 -0
  44. data/lib/bolognese/writers/crosscite_writer.rb +11 -0
  45. data/lib/bolognese/writers/crossref_writer.rb +11 -0
  46. data/lib/bolognese/writers/csv_writer.rb +24 -0
  47. data/lib/bolognese/writers/datacite_json_writer.rb +13 -0
  48. data/lib/bolognese/writers/datacite_writer.rb +12 -0
  49. data/lib/bolognese/writers/jats_writer.rb +137 -0
  50. data/lib/bolognese/writers/rdf_xml_writer.rb +11 -0
  51. data/lib/bolognese/writers/ris_writer.rb +29 -0
  52. data/lib/bolognese/writers/schema_org_writer.rb +55 -0
  53. data/lib/bolognese/writers/turtle_writer.rb +11 -0
  54. data/lib/bolognese.rb +19 -5
  55. data/package.json +12 -0
  56. data/resources/2008/09/xsd.xsl +997 -0
  57. data/resources/datacite-contributorType-v4.xsd +35 -0
  58. data/resources/datacite-dateType-v4.xsd +25 -0
  59. data/resources/datacite-descriptionType-v4.xsd +19 -0
  60. data/resources/datacite-funderIdentifierType-v4.xsd +15 -0
  61. data/resources/datacite-nameType-v4.xsd +10 -0
  62. data/resources/datacite-relatedIdentifierType-v4.xsd +34 -0
  63. data/resources/datacite-relationType-v4.xsd +49 -0
  64. data/resources/datacite-resourceType-v4.xsd +28 -0
  65. data/resources/datacite-titleType-v4.xsd +14 -0
  66. data/resources/kernel-2.1/include/datacite-contributorType-v1.1.xsd +22 -0
  67. data/resources/kernel-2.1/include/datacite-contributorType-v2.xsd +3 -0
  68. data/resources/kernel-2.1/include/datacite-dateType-v1.1.xsd +31 -0
  69. data/resources/kernel-2.1/include/datacite-dateType-v2.xsd +3 -0
  70. data/resources/kernel-2.1/include/datacite-descriptionType-v1.1.xsd +14 -0
  71. data/resources/kernel-2.1/include/datacite-descriptionType-v2.xsd +3 -0
  72. data/resources/kernel-2.1/include/datacite-relatedIdentifierType-v1.1.xsd +24 -0
  73. data/resources/kernel-2.1/include/datacite-relatedIdentifierType-v2.xsd +3 -0
  74. data/resources/kernel-2.1/include/datacite-relationType-v1.1.xsd +29 -0
  75. data/resources/kernel-2.1/include/datacite-relationType-v2.xsd +3 -0
  76. data/resources/kernel-2.1/include/datacite-resourceType-v1.1.xsd +22 -0
  77. data/resources/kernel-2.1/include/datacite-resourceType-v2.xsd +3 -0
  78. data/resources/kernel-2.1/include/datacite-titleType-v1.1.xsd +11 -0
  79. data/resources/kernel-2.1/include/datacite-titleType-v2.xsd +3 -0
  80. data/resources/kernel-2.1/metadata.xsd +315 -0
  81. data/resources/kernel-2.2/include/datacite-contributorType-v2.xsd +29 -0
  82. data/resources/kernel-2.2/include/datacite-dateType-v2.xsd +21 -0
  83. data/resources/kernel-2.2/include/datacite-descriptionType-v2.xsd +15 -0
  84. data/resources/kernel-2.2/include/datacite-relatedIdentifierType-v2.xsd +25 -0
  85. data/resources/kernel-2.2/include/datacite-relationType-v2.xsd +29 -0
  86. data/resources/kernel-2.2/include/datacite-resourceType-v2.xsd +23 -0
  87. data/resources/kernel-2.2/include/datacite-titleType-v2.xsd +10 -0
  88. data/resources/kernel-2.2/metadata.xsd +316 -0
  89. data/resources/kernel-3/include/datacite-contributorType-v3.1.xsd +35 -0
  90. data/resources/kernel-3/include/datacite-dateType-v3.xsd +21 -0
  91. data/resources/kernel-3/include/datacite-descriptionType-v3.xsd +17 -0
  92. data/resources/kernel-3/include/datacite-relatedIdentifierType-v3.1.xsd +30 -0
  93. data/resources/kernel-3/include/datacite-relationType-v3.1.xsd +38 -0
  94. data/resources/kernel-3/include/datacite-resourceType-v3.xsd +26 -0
  95. data/resources/kernel-3/include/datacite-titleType-v3.xsd +12 -0
  96. data/resources/kernel-3/include/xml.xsd +286 -0
  97. data/resources/kernel-3/metadata.xsd +380 -0
  98. data/resources/kernel-3.0/include/datacite-contributorType-v3.xsd +33 -0
  99. data/resources/kernel-3.0/include/datacite-dateType-v3.xsd +21 -0
  100. data/resources/kernel-3.0/include/datacite-descriptionType-v3.xsd +17 -0
  101. data/resources/kernel-3.0/include/datacite-relatedIdentifierType-v3.xsd +27 -0
  102. data/resources/kernel-3.0/include/datacite-relationType-v3.xsd +33 -0
  103. data/resources/kernel-3.0/include/datacite-resourceType-v3.xsd +26 -0
  104. data/resources/kernel-3.0/include/datacite-titleType-v3.xsd +12 -0
  105. data/resources/kernel-3.0/include/xml.xsd +286 -0
  106. data/resources/kernel-3.0/metadata.xsd +377 -0
  107. data/resources/kernel-3.1/include/datacite-contributorType-v3.1.xsd +35 -0
  108. data/resources/kernel-3.1/include/datacite-dateType-v3.xsd +21 -0
  109. data/resources/kernel-3.1/include/datacite-descriptionType-v3.xsd +17 -0
  110. data/resources/kernel-3.1/include/datacite-relatedIdentifierType-v3.1.xsd +30 -0
  111. data/resources/kernel-3.1/include/datacite-relationType-v3.1.xsd +38 -0
  112. data/resources/kernel-3.1/include/datacite-resourceType-v3.xsd +26 -0
  113. data/resources/kernel-3.1/include/datacite-titleType-v3.xsd +12 -0
  114. data/resources/kernel-3.1/include/xml.xsd +286 -0
  115. data/resources/kernel-3.1/metadata.xsd +380 -0
  116. data/resources/kernel-4/include/datacite-contributorType-v4.xsd +37 -0
  117. data/resources/kernel-4/include/datacite-dateType-v4.xsd +27 -0
  118. data/resources/kernel-4/include/datacite-descriptionType-v4.xsd +19 -0
  119. data/resources/kernel-4/include/datacite-funderIdentifierType-v4.xsd +16 -0
  120. data/resources/kernel-4/include/datacite-nameType-v4.xsd +10 -0
  121. data/resources/kernel-4/include/datacite-numberType-v4.xsd +12 -0
  122. data/resources/kernel-4/include/datacite-relatedIdentifierType-v4.xsd +39 -0
  123. data/resources/kernel-4/include/datacite-relationType-v4.xsd +59 -0
  124. data/resources/kernel-4/include/datacite-resourceType-v4.xsd +52 -0
  125. data/resources/kernel-4/include/datacite-titleType-v4.xsd +14 -0
  126. data/resources/kernel-4/include/xml.xsd +286 -0
  127. data/resources/kernel-4/metadata.xsd +715 -0
  128. data/resources/kernel-4.0/include/datacite-contributorType-v4.xsd +1 -1
  129. data/resources/kernel-4.0/include/datacite-dateType-v4.xsd +1 -1
  130. data/resources/kernel-4.0/include/datacite-descriptionType-v4.xsd +1 -1
  131. data/resources/kernel-4.0/include/datacite-funderIdentifierType-v4.xsd +1 -1
  132. data/resources/kernel-4.0/include/datacite-relatedIdentifierType-v4.xsd +1 -1
  133. data/resources/kernel-4.0/include/datacite-relationType-v4.xsd +1 -1
  134. data/resources/kernel-4.0/include/datacite-resourceType-v4.xsd +1 -1
  135. data/resources/kernel-4.0/include/datacite-titleType-v4.xsd +1 -1
  136. data/resources/kernel-4.0/include/xml.xsd +286 -0
  137. data/resources/kernel-4.0/metadata.xsd +2 -2
  138. data/resources/kernel-4.1/include/datacite-contributorType-v4.xsd +35 -0
  139. data/resources/kernel-4.1/include/datacite-dateType-v4.1.xsd +23 -0
  140. data/resources/kernel-4.1/include/datacite-descriptionType-v4.xsd +19 -0
  141. data/resources/kernel-4.1/include/datacite-funderIdentifierType-v4.xsd +15 -0
  142. data/resources/kernel-4.1/include/datacite-nameType-v4.1.xsd +10 -0
  143. data/resources/kernel-4.1/include/datacite-relatedIdentifierType-v4.xsd +32 -0
  144. data/resources/kernel-4.1/include/datacite-relationType-v4.1.xsd +46 -0
  145. data/resources/kernel-4.1/include/datacite-resourceType-v4.1.xsd +28 -0
  146. data/resources/kernel-4.1/include/datacite-titleType-v4.xsd +14 -0
  147. data/resources/kernel-4.1/include/xml.xsd +286 -0
  148. data/resources/kernel-4.1/metadata.xsd +483 -0
  149. data/resources/kernel-4.2/include/datacite-contributorType-v4.xsd +35 -0
  150. data/resources/kernel-4.2/include/datacite-dateType-v4.xsd +25 -0
  151. data/resources/kernel-4.2/include/datacite-descriptionType-v4.xsd +19 -0
  152. data/resources/kernel-4.2/include/datacite-funderIdentifierType-v4.xsd +15 -0
  153. data/resources/kernel-4.2/include/datacite-nameType-v4.xsd +10 -0
  154. data/resources/kernel-4.2/include/datacite-relatedIdentifierType-v4.xsd +34 -0
  155. data/resources/kernel-4.2/include/datacite-relationType-v4.xsd +49 -0
  156. data/resources/kernel-4.2/include/datacite-resourceType-v4.xsd +28 -0
  157. data/resources/kernel-4.2/include/datacite-titleType-v4.xsd +14 -0
  158. data/resources/kernel-4.2/include/xml.xsd +286 -0
  159. data/resources/kernel-4.2/metadata.xsd +479 -0
  160. data/resources/kernel-4.3/include/datacite-contributorType-v4.xsd +35 -0
  161. data/resources/kernel-4.3/include/datacite-dateType-v4.xsd +25 -0
  162. data/resources/kernel-4.3/include/datacite-descriptionType-v4.xsd +19 -0
  163. data/resources/kernel-4.3/include/datacite-funderIdentifierType-v4.xsd +16 -0
  164. data/resources/kernel-4.3/include/datacite-nameType-v4.xsd +10 -0
  165. data/resources/kernel-4.3/include/datacite-relatedIdentifierType-v4.xsd +34 -0
  166. data/resources/kernel-4.3/include/datacite-relationType-v4.xsd +49 -0
  167. data/resources/kernel-4.3/include/datacite-resourceType-v4.xsd +28 -0
  168. data/resources/kernel-4.3/include/datacite-titleType-v4.xsd +14 -0
  169. data/resources/kernel-4.3/include/xml.xsd +286 -0
  170. data/resources/kernel-4.3/metadata.xsd +515 -0
  171. data/resources/kernel-4.4/include/datacite-contributorType-v4.xsd +35 -0
  172. data/resources/kernel-4.4/include/datacite-dateType-v4.xsd +25 -0
  173. data/resources/kernel-4.4/include/datacite-descriptionType-v4.xsd +19 -0
  174. data/resources/kernel-4.4/include/datacite-funderIdentifierType-v4.xsd +16 -0
  175. data/resources/kernel-4.4/include/datacite-nameType-v4.xsd +10 -0
  176. data/resources/kernel-4.4/include/datacite-numberType-v4.xsd +12 -0
  177. data/resources/kernel-4.4/include/datacite-relatedIdentifierType-v4.xsd +34 -0
  178. data/resources/kernel-4.4/include/datacite-relationType-v4.xsd +51 -0
  179. data/resources/kernel-4.4/include/datacite-resourceType-v4.xsd +43 -0
  180. data/resources/kernel-4.4/include/datacite-titleType-v4.xsd +14 -0
  181. data/resources/kernel-4.4/include/xml.xsd +286 -0
  182. data/resources/kernel-4.4/metadata.xsd +707 -0
  183. data/resources/kernel-4.5/include/datacite-contributorType-v4.xsd +35 -0
  184. data/resources/kernel-4.5/include/datacite-dateType-v4.xsd +25 -0
  185. data/resources/kernel-4.5/include/datacite-descriptionType-v4.xsd +19 -0
  186. data/resources/kernel-4.5/include/datacite-funderIdentifierType-v4.xsd +16 -0
  187. data/resources/kernel-4.5/include/datacite-nameType-v4.xsd +10 -0
  188. data/resources/kernel-4.5/include/datacite-numberType-v4.xsd +12 -0
  189. data/resources/kernel-4.5/include/datacite-relatedIdentifierType-v4.xsd +34 -0
  190. data/resources/kernel-4.5/include/datacite-relationType-v4.xsd +53 -0
  191. data/resources/kernel-4.5/include/datacite-resourceType-v4.xsd +45 -0
  192. data/resources/kernel-4.5/include/datacite-titleType-v4.xsd +14 -0
  193. data/resources/kernel-4.5/include/xml.xsd +286 -0
  194. data/resources/kernel-4.5/metadata.xsd +711 -0
  195. data/resources/kernel-4.6/include/datacite-contributorType-v4.xsd +37 -0
  196. data/resources/kernel-4.6/include/datacite-dateType-v4.xsd +27 -0
  197. data/resources/kernel-4.6/include/datacite-descriptionType-v4.xsd +19 -0
  198. data/resources/kernel-4.6/include/datacite-funderIdentifierType-v4.xsd +16 -0
  199. data/resources/kernel-4.6/include/datacite-nameType-v4.xsd +10 -0
  200. data/resources/kernel-4.6/include/datacite-numberType-v4.xsd +12 -0
  201. data/resources/kernel-4.6/include/datacite-relatedIdentifierType-v4.xsd +37 -0
  202. data/resources/kernel-4.6/include/datacite-relationType-v4.xsd +57 -0
  203. data/resources/kernel-4.6/include/datacite-resourceType-v4.xsd +49 -0
  204. data/resources/kernel-4.6/include/datacite-titleType-v4.xsd +14 -0
  205. data/resources/kernel-4.6/include/xml.xsd +286 -0
  206. data/resources/kernel-4.6/metadata.xsd +712 -0
  207. data/resources/kernel-4.7/include/datacite-contributorType-v4.xsd +37 -0
  208. data/resources/kernel-4.7/include/datacite-dateType-v4.xsd +27 -0
  209. data/resources/kernel-4.7/include/datacite-descriptionType-v4.xsd +19 -0
  210. data/resources/kernel-4.7/include/datacite-funderIdentifierType-v4.xsd +16 -0
  211. data/resources/kernel-4.7/include/datacite-nameType-v4.xsd +10 -0
  212. data/resources/kernel-4.7/include/datacite-numberType-v4.xsd +12 -0
  213. data/resources/kernel-4.7/include/datacite-relatedIdentifierType-v4.xsd +39 -0
  214. data/resources/kernel-4.7/include/datacite-relationType-v4.xsd +59 -0
  215. data/resources/kernel-4.7/include/datacite-resourceType-v4.xsd +52 -0
  216. data/resources/kernel-4.7/include/datacite-titleType-v4.xsd +14 -0
  217. data/resources/kernel-4.7/include/xml.xsd +286 -0
  218. data/resources/kernel-4.7/metadata.xsd +715 -0
  219. data/resources/oecd/dfg-mappings.json +1866 -0
  220. data/resources/oecd/for-mappings.json +1101 -0
  221. data/resources/oecd/fos-mappings.json +198 -0
  222. data/resources/schema_org/jsonldcontext.json +7477 -0
  223. data/resources/spdx/licenses.json +5297 -0
  224. data/resources/xml.xsd +286 -0
  225. metadata +466 -179
  226. data/.travis.yml +0 -23
  227. data/lib/bolognese/crossref.rb +0 -233
  228. data/lib/bolognese/datacite.rb +0 -176
  229. data/lib/bolognese/date_utils.rb +0 -48
  230. data/lib/bolognese/github.rb +0 -106
  231. data/lib/bolognese/orcid.rb +0 -24
  232. data/lib/bolognese/schema_org.rb +0 -170
  233. data/spec/cli_spec.rb +0 -56
  234. data/spec/crossref_spec.rb +0 -190
  235. data/spec/datacite_spec.rb +0 -93
  236. data/spec/datacite_utils_spec.rb +0 -159
  237. data/spec/doi_utils_spec.rb +0 -89
  238. data/spec/fixtures/crossref.xml +0 -742
  239. data/spec/fixtures/datacite.xml +0 -40
  240. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/read/crossref/as_crossref.yml +0 -760
  241. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/read/crossref/as_datacite.yml +0 -1476
  242. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/read/crossref/as_schema_org.yml +0 -1476
  243. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/read/datacite/as_datacite.yml +0 -214
  244. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/read/datacite/as_schema_org.yml +0 -384
  245. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/read/schema_org/as_datacite.yml +0 -653
  246. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/read/schema_org/as_schema_org.yml +0 -653
  247. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/doi_registration_agency/crossref.yml +0 -971
  248. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/doi_registration_agency/datacite.yml +0 -971
  249. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/doi_registration_agency/medra.yml +0 -971
  250. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/doi_registration_agency/not_found.yml +0 -971
  251. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/get_metadata/DOI_with_ORCID_ID.yml +0 -506
  252. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/get_metadata/DOI_with_SICI_DOI.yml +0 -214
  253. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/get_metadata/DOI_with_data_citation.yml +0 -901
  254. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/get_metadata/date_in_future.yml +0 -305
  255. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/get_metadata/journal_article.yml +0 -1080
  256. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/get_metadata/not_found_error.yml +0 -183
  257. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/get_metadata/posted_content.yml +0 -389
  258. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/get_metadata_as_datacite_xml/DOI_with_ORCID_ID.yml +0 -506
  259. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/get_metadata_as_datacite_xml/DOI_with_data_citation.yml +0 -901
  260. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/get_metadata_as_datacite_xml/with_ORCID_ID.yml +0 -366
  261. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/get_metadata_as_datacite_xml/with_data_citation.yml +0 -719
  262. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/get_metadata_as_datacite_xml/with_editor.yml +0 -930
  263. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/get_metadata_as_string/DOI_with_data_citation.yml +0 -719
  264. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/normalize_doi/SICI_doi.yml +0 -930
  265. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/normalize_doi/doi.yml +0 -930
  266. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/normalize_doi/doi_from_url_without_doi_proxy.yml +0 -930
  267. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/normalize_doi/doi_prefix_too_long.yml +0 -930
  268. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/normalize_doi/doi_prefix_with_string.yml +0 -930
  269. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/normalize_doi/doi_with_protocol.yml +0 -930
  270. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/normalize_doi/dx_doi_org_url.yml +0 -930
  271. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/normalize_doi/https_url.yml +0 -930
  272. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/normalize_doi/not_valid_doi_prefix.yml +0 -930
  273. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/normalize_ids/doi.yml +0 -930
  274. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/normalize_ids/url.yml +0 -930
  275. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/normalize_url/doi.yml +0 -930
  276. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/normalize_url/url.yml +0 -930
  277. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/parse_attribute/array.yml +0 -930
  278. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/parse_attribute/hash.yml +0 -930
  279. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/parse_attribute/nil.yml +0 -930
  280. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/parse_attribute/string.yml +0 -930
  281. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/parse_attributes/array.yml +0 -930
  282. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/parse_attributes/hash.yml +0 -930
  283. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/parse_attributes/nil.yml +0 -930
  284. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/parse_attributes/string.yml +0 -930
  285. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/validate_url/DOI.yml +0 -930
  286. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/validate_url/URL.yml +0 -930
  287. data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/validate_url/string.yml +0 -930
  288. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata/BlogPosting.yml +0 -477
  289. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata/Dataset.yml +0 -1925
  290. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata/Date.yml +0 -458
  291. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata_as_string/Dataset.yml +0 -173
  292. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_alternate_identifiers/insert.yml +0 -173
  293. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_contributors/insert.yml +0 -173
  294. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_contributors/none.yml +0 -173
  295. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_creators/insert.yml +0 -173
  296. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_dates/insert.yml +0 -173
  297. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_descriptions/insert.yml +0 -155
  298. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_identifier/doi.yml +0 -173
  299. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_person/creator.yml +0 -173
  300. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_person/creator_given_and_family_name.yml +0 -173
  301. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_person/creator_only_name.yml +0 -173
  302. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_publication_year/insert.yml +0 -173
  303. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_publisher/insert.yml +0 -173
  304. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_related_identifiers/get_related_identifier_type.yml +0 -173
  305. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_related_identifiers/get_related_identifier_type_DOI.yml +0 -173
  306. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_related_identifiers/get_related_identifier_type_URL.yml +0 -173
  307. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_related_identifiers/insert.yml +0 -173
  308. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_related_identifiers/rel_identifiers.yml +0 -173
  309. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_resource_type/insert.yml +0 -173
  310. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_rights_list/insert.yml +0 -173
  311. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_subjects/insert.yml +0 -173
  312. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_titles/doi.yml +0 -173
  313. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_titles/insert.yml +0 -173
  314. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_version/insert.yml +0 -173
  315. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_PID_provider/crossref.yml +0 -44
  316. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_PID_provider/crossref_doi_not_url.yml +0 -44
  317. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_PID_provider/datacite.yml +0 -44
  318. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_PID_provider/datacite_doi_http.yml +0 -44
  319. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_PID_provider/orcid.yml +0 -44
  320. data/spec/fixtures/vcr_cassettes/Bolognese_SchemaOrg/get_metadata/BlogPosting.yml +0 -632
  321. data/spec/fixtures/vcr_cassettes/Bolognese_SchemaOrg/get_metadata/not_found_error.yml +0 -93
  322. data/spec/metadata_spec.rb +0 -41
  323. data/spec/orcid_spec.rb +0 -23
  324. data/spec/schema_org_spec.rb +0 -33
  325. data/spec/spec_helper.rb +0 -88
  326. data/spec/utils_spec.rb +0 -107
@@ -0,0 +1,997 @@
1
+ <!DOCTYPE xsl:stylesheet [
2
+ <!--*
3
+ <!DOCTYPE xsl:stylesheet PUBLIC 'http://www.w3.org/1999/XSL/Transform'
4
+ '../../People/cmsmcq/lib/xslt10.dtd' [
5
+ *-->
6
+ <!ATTLIST xsl:stylesheet
7
+ xmlns:xsl CDATA "http://www.w3.org/1999/XSL/Transform"
8
+ xmlns:xsd CDATA #IMPLIED
9
+ xmlns:xhtml CDATA #IMPLIED
10
+ >
11
+ <!ATTLIST xsl:text
12
+ xmlns:xsl CDATA "http://www.w3.org/1999/XSL/Transform"
13
+ >
14
+
15
+ <!ENTITY copy "&#169;" ><!--=copyright sign-->
16
+ <!ENTITY reg "&#174;" ><!--/circledR =registered sign-->
17
+ <!ENTITY rarr "&#x2192;" ><!--/rightarrow /to A: =rightward arrow-->
18
+
19
+ <!ENTITY nl "&#xA;">
20
+ <!ENTITY lsquo "&#x2018;" ><!--=single quotation mark, left-->
21
+ <!ENTITY rsquo "&#x2019;" ><!--=single quotation mark, right-->
22
+ <!ENTITY ldquo "&#x201C;" ><!--=double quotation mark, left-->
23
+ <!ENTITY rdquo "&#x201D;" ><!--=double quotation mark, right-->
24
+
25
+ ]>
26
+ <xsl:stylesheet version="1.0"
27
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
28
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
29
+ xmlns:xhtml="http://www.w3.org/1999/xhtml"
30
+ >
31
+
32
+ <!--* xsd.xsl: format an XSD schema document for simple display in a Web browser.
33
+ * http://www.w3.org/XML/2004/xml-schema-test-suite/xsd.xsl
34
+ *
35
+ * Copyright © 2008-2009 World Wide Web Consortium, (Massachusetts
36
+ * Institute of Technology, European Research Consortium for
37
+ * Informatics and Mathematics, Keio University). All Rights
38
+ * Reserved. This work is distributed under the W3C® Software
39
+ * License [1] in the hope that it will be useful, but WITHOUT ANY
40
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
41
+ * FITNESS FOR A PARTICULAR PURPOSE.
42
+ *
43
+ * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
44
+ *
45
+ *-->
46
+
47
+ <!--* Revisions:
48
+ * 2012-05-03 : CMSMcQ : reissue under Software License, not document
49
+ * license
50
+ * 2009-01-21 : CMSMcQ : wrap start-tags only when necessary
51
+ * 2009-01-20 : CMSMcQ : wrap start-tags
52
+ * 2008-12-19 : CMSMcQ : add toc for schema documents with more than
53
+ * five children of xsd:schema
54
+ * 2008-12-18 : CMSMcQ : fix problems with text breaking
55
+ * add rule for top-level attribute groups
56
+ * 2008-09-27 : CMSMcQ : made first version of this stylesheet
57
+ *-->
58
+
59
+ <xsl:output method="html" indent="yes"/>
60
+
61
+ <xsl:param name="line-wrap-length" select="60"/>
62
+ <xsl:param name="ind-depth" select="6"/>
63
+ <xsl:param name="additional-indent" select="substring(
64
+ ' ',
65
+ 1,$ind-depth)"/>
66
+
67
+ <xsl:variable name="tns">
68
+ <xsl:value-of select="/xsd:schema/@targetNamespace"/>
69
+ </xsl:variable>
70
+
71
+ <!--* 0 Document root *-->
72
+ <xsl:template match="/">
73
+
74
+ <xsl:variable name="doctitle">
75
+ <xsl:text>Schema document for </xsl:text>
76
+ <xsl:choose>
77
+ <xsl:when test="xsd:schema/@targetNamespace">
78
+ <xsl:text>namespace </xsl:text>
79
+ <xsl:value-of select="$tns"/>
80
+ </xsl:when>
81
+ <xsl:otherwise>
82
+ <xsl:text>unspecified namespace</xsl:text>
83
+ </xsl:otherwise>
84
+ </xsl:choose>
85
+ </xsl:variable>
86
+
87
+ <xsl:variable name="docHasHeading" select="
88
+ xsd:schema/xsd:annotation[1]/xsd:documentation/*[1]
89
+ [self::xhtml:h1 or self::h1]
90
+ or
91
+ xsd:schema/xsd:annotation[1]/xsd:documentation/xhtml:div/*[1]
92
+ [self::xhtml:h1 or self::h1]
93
+ "/>
94
+ <xsl:variable name="docIsProlific" select="
95
+ count(xsd:schema/child::*) &gt; 5
96
+ "/>
97
+
98
+ <xsl:element name="html">
99
+ <xsl:element name="head">
100
+ <xsl:element name="title">
101
+ <xsl:value-of select="$doctitle"/>
102
+ </xsl:element>
103
+ <xsl:element name="style">
104
+ <xsl:attribute name="type">text/css</xsl:attribute>
105
+ .bodytext .bodytext {
106
+ margin-left: 0;
107
+ margin-right: 0;
108
+ }
109
+ .bodytext {
110
+ margin-left: 15%;
111
+ margin-right: 2%;
112
+ }
113
+ .annotation {
114
+ <!--* anything special to do here? *-->
115
+ <!--* color: navy; *-->
116
+ }
117
+ .same-ns {
118
+ color: Green;
119
+ }
120
+ .diff-ns {
121
+ color: maroon;
122
+ }
123
+ .warning {
124
+ color: red;
125
+ }
126
+ p.note {
127
+ font-style: italic;
128
+ }
129
+ p.dt {
130
+ font-weight: bold;
131
+ }
132
+ span.rfc {
133
+ font-variant: small-caps;
134
+ }
135
+ </xsl:element>
136
+ </xsl:element>
137
+ <xsl:element name="body">
138
+
139
+ <xsl:choose>
140
+ <xsl:when test="$docHasHeading and not($docIsProlific)">
141
+ <!--* If the first thing in the first documentation element is a heading,
142
+ * and there are few children, then don't interfere.
143
+ *-->
144
+ <xsl:comment>* <xsl:value-of select="$doctitle"/> *</xsl:comment>
145
+ </xsl:when>
146
+ <xsl:otherwise>
147
+ <!--* either document has no heading (and needs one), or
148
+ * we're going to do a toc and need a heading anyway
149
+ *-->
150
+ <xsl:element name="h1">
151
+ <xsl:value-of select="$doctitle"/>
152
+ </xsl:element>
153
+ <xsl:if test="$docIsProlific">
154
+ <xsl:element name="div">
155
+ <xsl:element name="hr"/>
156
+ <xsl:element name="ul">
157
+ <xsl:attribute name="class">bodytext</xsl:attribute>
158
+ <xsl:apply-templates mode="toc" select="./xsd:schema/*"/>
159
+ </xsl:element>
160
+ <xsl:element name="hr"/>
161
+ </xsl:element>
162
+ </xsl:if>
163
+ </xsl:otherwise>
164
+ </xsl:choose>
165
+ <xsl:apply-templates/>
166
+ </xsl:element>
167
+ </xsl:element>
168
+ </xsl:template>
169
+
170
+ <!--* 2 Schema element *-->
171
+ <xsl:template match="xsd:schema">
172
+ <!--* optional future change: write out information here about
173
+ * the attributes of xsd:schema: version, finalDefault, blockDefault,
174
+ * elementFormDefault, atgtributeFormDefault, namespace bindings ...
175
+ *-->
176
+ <xsl:apply-templates/>
177
+ </xsl:template>
178
+
179
+ <!--* 3 Anotation *-->
180
+ <xsl:template match="xsd:annotation">
181
+ <xsl:element name="div">
182
+ <xsl:attribute name="class">annotation</xsl:attribute>
183
+ <xsl:attribute name="id">
184
+ <xsl:call-template name="leid">
185
+ </xsl:call-template>
186
+ </xsl:attribute>
187
+ <xsl:if test="not(./xsd:documentation//*[@class='bodytext'])">
188
+ <xsl:element name="h3">Annotation</xsl:element>
189
+ </xsl:if>
190
+ <xsl:element name="div">
191
+ <xsl:choose>
192
+ <xsl:when test="./xsd:documentation//*[@class='bodytext']">
193
+ <!--* if the schema document is already using class=bodytext,
194
+ * let the schema author control the margins, don't
195
+ * assign the class here.
196
+ *-->
197
+ </xsl:when>
198
+ <xsl:otherwise>
199
+ <xsl:attribute name="class">bodytext</xsl:attribute>
200
+ </xsl:otherwise>
201
+ </xsl:choose>
202
+ <xsl:apply-templates/>
203
+ </xsl:element>
204
+ </xsl:element>
205
+ </xsl:template>
206
+
207
+ <xsl:template match="xsd:documentation">
208
+ <xsl:choose>
209
+ <xsl:when test=".//xhtml:* or .//div or .//p or .//li">
210
+ <xsl:copy-of select="*"/>
211
+ </xsl:when>
212
+ <xsl:when test="./*">
213
+ <xsl:message>! Unrecognized children in xs:documentation element</xsl:message>
214
+ <xsl:copy-of select="*"/>
215
+ </xsl:when>
216
+ <xsl:otherwise>
217
+ <xsl:call-template name="break-pcdata">
218
+ <xsl:with-param name="s" select="string(.)"/>
219
+ </xsl:call-template>
220
+ </xsl:otherwise>
221
+ </xsl:choose>
222
+ </xsl:template>
223
+
224
+ <xsl:template name="break-pcdata">
225
+ <xsl:param name="s"></xsl:param>
226
+
227
+ <xsl:choose>
228
+ <xsl:when test="starts-with($s,'&#xA;')">
229
+ <xsl:text>&#xA;</xsl:text>
230
+ <xsl:element name="br"/>
231
+ <xsl:call-template name="break-pcdata">
232
+ <xsl:with-param name="s" select="substring($s,2)"/>
233
+ </xsl:call-template>
234
+ </xsl:when>
235
+ <xsl:when test="starts-with($s,' ')">
236
+ <xsl:text>&#xA0;</xsl:text>
237
+ <xsl:call-template name="break-pcdata">
238
+ <xsl:with-param name="s" select="substring($s,2)"/>
239
+ </xsl:call-template>
240
+ </xsl:when>
241
+ <xsl:when test="contains($s,'&#xA;')">
242
+ <xsl:value-of select="substring-before($s,'&#xA;')"/>
243
+ <xsl:text>&#xA;</xsl:text>
244
+ <xsl:element name="br"/>
245
+ <xsl:call-template name="break-pcdata">
246
+ <xsl:with-param name="s" select="substring-after($s,'&#xA;')"/>
247
+ </xsl:call-template>
248
+ </xsl:when>
249
+ <xsl:otherwise>
250
+ <xsl:value-of select="$s"/>
251
+ </xsl:otherwise>
252
+ </xsl:choose>
253
+ </xsl:template>
254
+
255
+ <!--* 4 Top-level components *-->
256
+ <xsl:template match="
257
+ xsd:schema/xsd:attribute
258
+ | xsd:schema/xsd:element
259
+ | xsd:schema/xsd:simpleType
260
+ | xsd:schema/xsd:complexType
261
+ | xsd:schema/xsd:attributeGroup
262
+ | xsd:schema/xsd:import
263
+ | xsd:schema/xsd:group
264
+ | xsd:schema/xsd:notation
265
+ ">
266
+ <xsl:call-template name="show-top-level-component"/>
267
+ </xsl:template>
268
+
269
+ <xsl:template name="show-top-level-component">
270
+ <xsl:variable name="sort">
271
+ <xsl:call-template name="sort"/>
272
+ </xsl:variable>
273
+ <xsl:variable name="leid">
274
+ <xsl:call-template name="leid"/>
275
+ </xsl:variable>
276
+ <xsl:variable name="has-heading-already">
277
+ <xsl:choose>
278
+ <xsl:when test="./xsd:annotation[1]/xsd:documentation/*//*
279
+ [self::xhtml:*[starts-with(local-name(),'h')]
280
+ or
281
+ self::*[contains(' h1 h2 h3 h4 h5 ',local-name())]
282
+ ]">
283
+ <xsl:value-of select="'true'"/>
284
+ </xsl:when>
285
+ <xsl:otherwise>
286
+ <xsl:value-of select="'false'"/>
287
+ </xsl:otherwise>
288
+ </xsl:choose>
289
+ </xsl:variable>
290
+
291
+ <xsl:element name="div">
292
+ <xsl:attribute name="id">
293
+ <xsl:value-of select="$leid"/>
294
+ </xsl:attribute>
295
+ <xsl:element name="h3">
296
+ <xsl:element name="a">
297
+ <xsl:attribute name="name">
298
+ <xsl:value-of select="$leid"/>
299
+ </xsl:attribute>
300
+ <xsl:value-of select="concat($sort,' ')"/>
301
+ <xsl:choose>
302
+ <xsl:when test="count(@name) = 1">
303
+ <xsl:element name="em">
304
+ <xsl:value-of select="@name"/>
305
+ </xsl:element>
306
+ </xsl:when>
307
+ <xsl:when test="self::xsd:import and (count(@namespace) = 1)">
308
+ <xsl:element name="code">
309
+ <xsl:value-of select="@namespace"/>
310
+ </xsl:element>
311
+ </xsl:when>
312
+ </xsl:choose>
313
+ </xsl:element>
314
+ </xsl:element>
315
+
316
+ <xsl:element name="div">
317
+ <xsl:attribute name="class">bodytext</xsl:attribute>
318
+
319
+ <xsl:if test="./xsd:annotation/xsd:documentation">
320
+ <xsl:element name="div">
321
+ <xsl:if test="$has-heading-already = 'false'">
322
+ <xsl:element name="h4">Notes</xsl:element>
323
+ </xsl:if><!-- /if .$has-heading-already *-->
324
+ <xsl:apply-templates select="xsd:annotation/xsd:documentation"/>
325
+ <xsl:if test="count(./xsd:annotation/xsd:documentation/@source) = 1">
326
+ <xsl:element name="p">
327
+ <xsl:text>External documentation at </xsl:text>
328
+ <xsl:element name="code">
329
+ <xsl:element name="a">
330
+ <xsl:attribute name="href">
331
+ <xsl:value-of select="./xsd:annotation/xsd:documentation/@source"/>
332
+ </xsl:attribute>
333
+ <xsl:value-of select="./xsd:annotation/xsd:documentation/@source"/>
334
+ </xsl:element>
335
+ </xsl:element>
336
+ </xsl:element>
337
+ </xsl:if>
338
+ </xsl:element>
339
+ </xsl:if><!-- /if ./xsd:annotation/xsd:documentation *-->
340
+
341
+ <xsl:element name="div">
342
+ <xsl:element name="h4">Formal declaration in XSD source form</xsl:element>
343
+ <xsl:element name="pre">
344
+ <xsl:variable name="preceding-node"
345
+ select="./preceding-sibling::node()[1]"/>
346
+ <xsl:if test="not($preceding-node/self::*)
347
+ and (normalize-space($preceding-node) = '')">
348
+ <xsl:value-of select="$preceding-node"/>
349
+ </xsl:if>
350
+ <xsl:apply-templates select="." mode="echo-xml"/>
351
+ </xsl:element>
352
+ </xsl:element><!--* div for XSD source form *-->
353
+ </xsl:element><!--* div for documentation and formal description *-->
354
+
355
+ </xsl:element><!--* div for top-level component *-->
356
+ </xsl:template>
357
+
358
+
359
+ <!--* 5 xml mode *-->
360
+ <xsl:template match="*" mode="echo-xml">
361
+ <xsl:variable name="s0">
362
+ <xsl:call-template name="lastline-suffix">
363
+ <xsl:with-param name="s0" select="preceding-sibling::text()
364
+ [string-length(.) > 0][1]" />
365
+ </xsl:call-template>
366
+ </xsl:variable>
367
+ <xsl:variable name="width">
368
+ <xsl:call-template name="stag-width">
369
+ <xsl:with-param name="indent-length" select="string-length($s0)"/>
370
+ </xsl:call-template>
371
+ </xsl:variable>
372
+ <!--* <xsl:message>Start-tag width for <xsl:value-of select="name()"/>
373
+ = <xsl:value-of select="$width"/></xsl:message> *-->
374
+
375
+ <xsl:text>&lt;</xsl:text>
376
+ <xsl:value-of select="name()"/>
377
+ <xsl:apply-templates select="@*" mode="echo-xml">
378
+ <xsl:with-param name="break-or-nobreak">
379
+ <xsl:choose>
380
+ <xsl:when test="$width > $line-wrap-length">break</xsl:when>
381
+ <xsl:otherwise>nobreak</xsl:otherwise>
382
+ </xsl:choose>
383
+ </xsl:with-param>
384
+ <xsl:with-param name="s0">
385
+ <xsl:call-template name="lastline-suffix">
386
+ <xsl:with-param name="s0" select="preceding-sibling::text()
387
+ [string-length(.) > 0][1]" />
388
+ </xsl:call-template>
389
+ </xsl:with-param>
390
+ </xsl:apply-templates>
391
+ <xsl:choose>
392
+ <xsl:when test="child::node()">
393
+ <xsl:text>&gt;</xsl:text>
394
+ <xsl:apply-templates select="node()" mode="echo-xml"/>
395
+ <xsl:text>&lt;/</xsl:text>
396
+ <xsl:value-of select="name()"/>
397
+ <xsl:text>&gt;</xsl:text>
398
+ </xsl:when>
399
+ <xsl:otherwise>/&gt;</xsl:otherwise>
400
+ </xsl:choose>
401
+ <!--* </xsl:element> *-->
402
+ </xsl:template>
403
+
404
+ <xsl:template match="xsd:annotation" mode="echo-xml"/>
405
+ <xsl:template match="@xml:space" mode="echo-xml"/>
406
+
407
+ <xsl:template match="@*" mode="echo-xml">
408
+ <xsl:param name="break-or-nobreak">nobreak</xsl:param>
409
+ <xsl:param name="s0"></xsl:param>
410
+ <xsl:variable name="indent">
411
+ <xsl:choose>
412
+ <xsl:when test="normalize-space($s0) = ''">
413
+ <xsl:value-of select="concat($additional-indent,$s0)"/>
414
+ </xsl:when>
415
+ <xsl:otherwise>
416
+ <xsl:value-of select="' '"/>
417
+ </xsl:otherwise>
418
+ </xsl:choose>
419
+ </xsl:variable>
420
+
421
+ <xsl:choose>
422
+ <xsl:when test="parent::xsd:* and $break-or-nobreak = 'break'">
423
+ <xsl:text>&#xA;</xsl:text>
424
+ <xsl:value-of select="$indent"/>
425
+ </xsl:when>
426
+ <xsl:otherwise>
427
+ <xsl:text> </xsl:text>
428
+ </xsl:otherwise>
429
+ </xsl:choose>
430
+ <xsl:value-of select="name()"/>
431
+ <xsl:text>="</xsl:text>
432
+ <xsl:choose>
433
+ <xsl:when test="parent::xsd:element
434
+ and namespace-uri() = ''
435
+ and local-name() = 'ref'
436
+ ">
437
+ <xsl:call-template name="makelink-maybe"/>
438
+ </xsl:when>
439
+ <xsl:when test="parent::xsd:attribute
440
+ and namespace-uri() = ''
441
+ and local-name() = 'ref'
442
+ ">
443
+ <xsl:call-template name="makelink-maybe"/>
444
+ </xsl:when>
445
+ <xsl:when test="parent::xsd:restriction
446
+ and namespace-uri() = ''
447
+ and local-name() = 'base'
448
+ ">
449
+ <xsl:call-template name="makelink-maybe"/>
450
+ </xsl:when>
451
+ <xsl:when test="parent::xsd:extension
452
+ and namespace-uri() = ''
453
+ and local-name() = 'base'
454
+ ">
455
+ <xsl:call-template name="makelink-maybe"/>
456
+ </xsl:when>
457
+ <xsl:when test="parent::xsd:group
458
+ and namespace-uri() = ''
459
+ and local-name() = 'ref'
460
+ ">
461
+ <xsl:call-template name="makelink-maybe"/>
462
+ </xsl:when>
463
+ <xsl:when test="parent::xsd:list
464
+ and namespace-uri() = ''
465
+ and local-name() = 'itemType'
466
+ ">
467
+ <xsl:call-template name="makelink-maybe"/>
468
+ </xsl:when>
469
+ <xsl:when test="parent::xsd:union
470
+ and namespace-uri() = ''
471
+ and local-name() = 'memberTypes'
472
+ ">
473
+ <xsl:call-template name="makelink-several-maybe"/>
474
+ </xsl:when>
475
+ <xsl:when test="parent::xsd:element
476
+ and namespace-uri() = ''
477
+ and local-name() = 'type'
478
+ ">
479
+ <xsl:call-template name="makelink-maybe"/>
480
+ </xsl:when>
481
+ <xsl:when test="parent::xsd:attribute
482
+ and namespace-uri() = ''
483
+ and local-name() = 'type'
484
+ ">
485
+ <xsl:call-template name="makelink-maybe"/>
486
+ </xsl:when>
487
+ <xsl:when test="parent::xsd:element
488
+ and namespace-uri() = ''
489
+ and local-name() = 'substitutionGroup'
490
+ ">
491
+ <xsl:call-template name="makelink-several-maybe"/>
492
+ </xsl:when>
493
+
494
+ <xsl:otherwise>
495
+ <xsl:value-of select="."/>
496
+ </xsl:otherwise>
497
+ </xsl:choose>
498
+ <xsl:text>"</xsl:text>
499
+
500
+ </xsl:template>
501
+ <xsl:template match="text()" mode="echo-xml">
502
+ <xsl:value-of select="."/>
503
+ </xsl:template>
504
+
505
+
506
+ <!--* 6 toc *-->
507
+ <xsl:template mode="toc" match="
508
+ xsd:schema/xsd:annotation
509
+ | xsd:schema/xsd:attribute
510
+ | xsd:schema/xsd:element
511
+ | xsd:schema/xsd:simpleType
512
+ | xsd:schema/xsd:complexType
513
+ | xsd:schema/xsd:attributeGroup
514
+ | xsd:schema/xsd:import
515
+ | xsd:schema/xsd:group
516
+ | xsd:schema/xsd:notation
517
+ ">
518
+ <xsl:call-template name="toc-entry"/>
519
+ </xsl:template>
520
+
521
+ <xsl:template name="toc-entry">
522
+ <xsl:variable name="sort">
523
+ <xsl:call-template name="sort"/>
524
+ </xsl:variable>
525
+ <xsl:variable name="leid">
526
+ <xsl:call-template name="leid"/>
527
+ </xsl:variable>
528
+ <xsl:element name="li">
529
+ <xsl:element name="a">
530
+ <xsl:attribute name="href">
531
+ <xsl:value-of select="concat('#',$leid)"/>
532
+ </xsl:attribute>
533
+ <xsl:choose>
534
+ <xsl:when test="self::xsd:annotation
535
+ and
536
+ ( descendant::xhtml:h1 or descendant::xhtml:h2 or descendant::xhtml:h3
537
+ or descendant::h1 or descendant::h2 or descendant::h3)
538
+ ">
539
+ <xsl:choose>
540
+ <xsl:when test="descendant::xhtml:h1">
541
+ <xsl:value-of select="descendant::xhtml:h1[1]"/>
542
+ </xsl:when>
543
+ <xsl:when test="descendant::h1">
544
+ <xsl:value-of select="descendant::h1[1]"/>
545
+ </xsl:when>
546
+ <xsl:when test="descendant::xhtml:h2">
547
+ <xsl:value-of select="descendant::xhtml:h2[1]"/>
548
+ </xsl:when>
549
+ <xsl:when test="descendant::h2">
550
+ <xsl:value-of select="descendant::h2[1]"/>
551
+ </xsl:when>
552
+ <xsl:when test="descendant::xhtml:h3">
553
+ <xsl:value-of select="descendant::xhtml:h3[1]"/>
554
+ </xsl:when>
555
+ <xsl:when test="descendant::h3">
556
+ <xsl:value-of select="descendant::h3[1]"/>
557
+ </xsl:when>
558
+ </xsl:choose>
559
+
560
+ </xsl:when>
561
+ <xsl:otherwise>
562
+ <xsl:value-of select="concat($sort,' ')"/>
563
+ <xsl:choose>
564
+ <xsl:when test="count(@name) = 1">
565
+ <xsl:element name="em">
566
+ <xsl:value-of select="@name"/>
567
+ </xsl:element>
568
+ </xsl:when>
569
+ <xsl:when test="self::xsd:annotation">
570
+ <xsl:value-of select="1 + count(preceding-sibling::xsd:annotation)"/>
571
+ </xsl:when>
572
+ <xsl:when test="self::xsd:import">
573
+ <xsl:element name="code">
574
+ <xsl:value-of select="@namespace"/>
575
+ </xsl:element>
576
+ </xsl:when>
577
+ <xsl:otherwise>
578
+ <!--* fake it *-->
579
+ <xsl:variable name="gi" select="local-name()"/>
580
+ <xsl:value-of select="1 + count(preceding-sibling::*[local-name() = $gi])"/>
581
+ </xsl:otherwise>
582
+ </xsl:choose>
583
+ </xsl:otherwise>
584
+ </xsl:choose>
585
+ </xsl:element>
586
+ </xsl:element>
587
+
588
+ </xsl:template>
589
+
590
+ <!--* 7 common code for calculating sort and little-endian IDs *-->
591
+ <xsl:template name="sort">
592
+ <xsl:choose>
593
+ <xsl:when test="self::xsd:annotation">
594
+ <xsl:value-of select="'Annotation'"/>
595
+ </xsl:when>
596
+ <xsl:when test="self::xsd:attribute">
597
+ <xsl:value-of select="'Attribute'"/>
598
+ </xsl:when>
599
+ <xsl:when test="self::xsd:element">
600
+ <xsl:value-of select="'Element'"/>
601
+ </xsl:when>
602
+ <xsl:when test="self::xsd:simpleType">
603
+ <xsl:value-of select="'Simple type'"/>
604
+ </xsl:when>
605
+ <xsl:when test="self::xsd:complexType">
606
+ <xsl:value-of select="'Complex type'"/>
607
+ </xsl:when>
608
+ <xsl:when test="self::xsd:attributeGroup">
609
+ <xsl:value-of select="'Attribute group'"/>
610
+ </xsl:when>
611
+ <xsl:when test="self::xsd:group">
612
+ <xsl:value-of select="'Model group'"/>
613
+ </xsl:when>
614
+ <xsl:otherwise>
615
+ <xsl:variable name="gi" select="local-name()"/>
616
+ <xsl:value-of select="concat(
617
+ translate(substring($gi,1,1),'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ'),
618
+ substring($gi,2)
619
+ )"/>
620
+ </xsl:otherwise>
621
+ </xsl:choose>
622
+ </xsl:template>
623
+ <xsl:template name="leid">
624
+ <xsl:choose>
625
+ <xsl:when test="self::xsd:annotation">
626
+ <xsl:value-of select="concat('ann_',
627
+ string(1+count(preceding-sibling::xsd:annotation)))"/>
628
+ </xsl:when>
629
+ <xsl:when test="self::xsd:attribute">
630
+ <xsl:value-of select="concat('att_',@name)"/>
631
+ </xsl:when>
632
+ <xsl:when test="self::xsd:element">
633
+ <xsl:value-of select="concat('elem_',@name)"/>
634
+ </xsl:when>
635
+ <xsl:when test="self::xsd:simpleType">
636
+ <xsl:value-of select="concat('type_',@name)"/>
637
+ </xsl:when>
638
+ <xsl:when test="self::xsd:complexType">
639
+ <xsl:value-of select="concat('type_',@name)"/>
640
+ </xsl:when>
641
+ <xsl:when test="self::xsd:attributeGroup">
642
+ <xsl:value-of select="concat('attgrp_',@name)"/>
643
+ </xsl:when>
644
+ <xsl:when test="self::xsd:group">
645
+ <xsl:value-of select="concat('grp_',@name)"/>
646
+ </xsl:when>
647
+ <xsl:when test="self::xsd:import">
648
+ <xsl:value-of select="concat('imp_',
649
+ string(1+count(preceding-sibling::xsd:import)))"/>
650
+ </xsl:when>
651
+ <xsl:otherwise>
652
+ <xsl:choose>
653
+ <xsl:when test="@name">
654
+ <xsl:variable name="sort" select="local-name()"/>
655
+ <xsl:value-of select="concat($sort,'_',@name)"/>
656
+ </xsl:when>
657
+ <xsl:otherwise>
658
+ <xsl:variable name="sort" select="local-name()"/>
659
+ <xsl:variable name="pos" select="1 + count(preceding-sibling::*[local-name() = $sort])"/>
660
+ <xsl:value-of select="concat($sort,'_',$pos)"/>
661
+ </xsl:otherwise>
662
+ </xsl:choose>
663
+ </xsl:otherwise>
664
+ </xsl:choose>
665
+ </xsl:template>
666
+
667
+ <!--* 8 unmatched elements (mostly diagnostic for development) *-->
668
+ <xsl:template match="*|@*">
669
+ <xsl:variable name="fqgi">
670
+ <xsl:call-template name="fqgi"/>
671
+ </xsl:variable>
672
+ <xsl:message>Warning: <xsl:value-of select="$fqgi"/> not matched.</xsl:message>
673
+ <xsl:element name="div">
674
+ <xsl:attribute name="class">warning</xsl:attribute>
675
+ <xsl:value-of select="concat('&lt;',name(),'>')"/>
676
+ <xsl:copy>
677
+ <xsl:apply-templates select="@*|node()"/>
678
+ </xsl:copy>
679
+ <xsl:value-of select="concat('&lt;/',name(),'>')"/>
680
+ </xsl:element>
681
+ </xsl:template>
682
+
683
+ <xsl:template name="fqgi" match="*" mode="fqgi">
684
+ <xsl:param name="sBuf"/>
685
+ <xsl:variable name="sCur">
686
+ <xsl:choose>
687
+ <xsl:when test="self::*">
688
+ <!--* elements *-->
689
+ <xsl:value-of select="name()"/>
690
+ </xsl:when>
691
+ <xsl:otherwise>
692
+ <!--* attributes and other riffraff *-->
693
+ <xsl:value-of select="concat('@',name())"/>
694
+ </xsl:otherwise>
695
+ </xsl:choose>
696
+ </xsl:variable>
697
+ <!--*
698
+ <xsl:message>FQGI(<xsl:value-of select="concat($sBuf,',',$sCur)"/>)</xsl:message>
699
+ *-->
700
+ <xsl:choose>
701
+ <xsl:when test="parent::*">
702
+ <xsl:apply-templates mode="fqgi" select="parent::*">
703
+ <xsl:with-param name="sBuf">
704
+ <xsl:value-of select="concat('/',$sCur,$sBuf)"/>
705
+ </xsl:with-param>
706
+ </xsl:apply-templates>
707
+ </xsl:when>
708
+ <xsl:otherwise>
709
+ <xsl:value-of select="concat('/',$sCur,$sBuf)"/>
710
+ </xsl:otherwise>
711
+ </xsl:choose>
712
+ </xsl:template>
713
+
714
+
715
+ <!--* 9 intra-document link calculation, qname manipulation *-->
716
+ <xsl:template name="makelink-several-maybe">
717
+ <xsl:param name="lQNames" select="normalize-space(.)"/>
718
+ <xsl:choose>
719
+ <xsl:when test="contains($lQNames,' ')">
720
+ <!--* recur *-->
721
+ <xsl:call-template name="makelink-maybe">
722
+ <xsl:with-param name="qn" select="substring-before($lQNames,' ')"/>
723
+ </xsl:call-template>
724
+ <xsl:text> </xsl:text>
725
+ <xsl:call-template name="makelink-several-maybe">
726
+ <xsl:with-param name="lQNames" select="substring-after($lQNames,' ')"/>
727
+ </xsl:call-template>
728
+ </xsl:when>
729
+ <xsl:otherwise>
730
+ <!--* base step, no blank so at most one QName *-->
731
+ <xsl:call-template name="makelink-maybe">
732
+ <xsl:with-param name="qn" select="$lQNames"/>
733
+ </xsl:call-template>
734
+ </xsl:otherwise>
735
+ </xsl:choose>
736
+ </xsl:template>
737
+
738
+ <xsl:template name="makelink-maybe">
739
+ <xsl:param name="qn" select="."/>
740
+ <xsl:param name="refns">
741
+ <xsl:call-template name="qname-to-uri">
742
+ <xsl:with-param name="qname" select="$qn"/>
743
+ </xsl:call-template>
744
+ </xsl:param>
745
+ <xsl:param name="lname">
746
+ <xsl:call-template name="qname-to-ncname">
747
+ <xsl:with-param name="qname" select="$qn"/>
748
+ </xsl:call-template>
749
+ </xsl:param>
750
+
751
+ <xsl:variable name="linktarget">
752
+ <xsl:choose>
753
+ <xsl:when test="$tns = $refns">
754
+ <xsl:choose>
755
+ <xsl:when test="parent::xsd:element
756
+ and local-name() = 'ref'
757
+ and count(/xsd:schema/xsd:element[@name = $lname]) = 1">
758
+ <xsl:value-of select="concat('elem_',$lname)"/>
759
+ </xsl:when>
760
+ <xsl:when test="parent::xsd:element
761
+ and local-name() = 'substitutionGroup'
762
+ and count(/xsd:schema/xsd:element[@name = $lname]) = 1">
763
+ <xsl:value-of select="concat('elem_',$lname)"/>
764
+ </xsl:when>
765
+ <xsl:when test="parent::xsd:attribute
766
+ and local-name() = 'ref'
767
+ and count(/xsd:schema/xsd:attribute[@name = $lname]) = 1">
768
+ <xsl:value-of select="concat('att_',$lname)"/>
769
+ </xsl:when>
770
+ <xsl:when test="parent::xsd:restriction
771
+ and count(/xsd:schema/xsd:*[@name = $lname
772
+ and (self::xsd:simpleType or self::xsd:complexType)])
773
+ = 1">
774
+ <xsl:value-of select="concat('type_',$lname)"/>
775
+ </xsl:when>
776
+ <xsl:when test="parent::xsd:extension
777
+ and count(/xsd:schema/xsd:*[@name = $lname
778
+ and (self::xsd:simpleType or self::xsd:complexType)])
779
+ = 1">
780
+ <xsl:value-of select="concat('type_',$lname)"/>
781
+ </xsl:when>
782
+ <xsl:when test="parent::xsd:element
783
+ and local-name() = 'type'
784
+ and count(/xsd:schema/xsd:*[@name = $lname
785
+ and (self::xsd:simpleType or self::xsd:complexType)])
786
+ = 1">
787
+ <xsl:value-of select="concat('type_',$lname)"/>
788
+ </xsl:when>
789
+ <xsl:when test="parent::xsd:attribute
790
+ and local-name() = 'type'
791
+ and count(/xsd:schema/xsd:*[@name = $lname
792
+ and (self::xsd:simpleType or self::xsd:complexType)])
793
+ = 1">
794
+ <xsl:value-of select="concat('type_',$lname)"/>
795
+ </xsl:when>
796
+ <xsl:when test="parent::xsd:list
797
+ and count(/xsd:schema/xsd:*[@name = $lname
798
+ and (self::xsd:simpleType or self::xsd:complexType)])
799
+ = 1">
800
+ <xsl:value-of select="concat('type_',$lname)"/>
801
+ </xsl:when>
802
+ <xsl:when test="parent::xsd:union
803
+ and count(/xsd:schema/xsd:*[@name = $lname
804
+ and (self::xsd:simpleType or self::xsd:complexType)])
805
+ = 1">
806
+ <xsl:value-of select="concat('type_',$lname)"/>
807
+ </xsl:when>
808
+ <xsl:when test="parent::xsd:group
809
+ and count(/xsd:schema/xsd:group[@name = $lname]) = 1">
810
+ <xsl:value-of select="concat('grp_',$lname)"/>
811
+ </xsl:when>
812
+ <xsl:when test="parent::xsd:attributeGroup
813
+ and count(/xsd:schema/xsd:atributeGroup[@name = $lname]) = 1">
814
+ <xsl:value-of select="concat('attgrp_',$lname)"/>
815
+ </xsl:when>
816
+ <!--* static links to built-ins could be handled here *-->
817
+ </xsl:choose>
818
+ </xsl:when>
819
+ <xsl:when test="count(ancestor::*/namespace::*) = 0">
820
+ <!--* we are either in a no-namespace document in Opera,
821
+ * or we are in Firefox, without ns support.
822
+ *-->
823
+ <xsl:value-of select="'no-ns-support'"/>
824
+ </xsl:when>
825
+ <xsl:otherwise>
826
+ <!--* namespaces did not match, no target *-->
827
+ <xsl:value-of select="'no-target'"/>
828
+ </xsl:otherwise>
829
+ </xsl:choose>
830
+ </xsl:variable>
831
+
832
+ <xsl:choose>
833
+ <xsl:when test="($linktarget='no-ns-support')">
834
+ <xsl:value-of select="$qn"/>
835
+ </xsl:when>
836
+ <xsl:when test="($linktarget='no-target' or $linktarget='')
837
+ and ($tns = $refns)">
838
+ <xsl:element name="span">
839
+ <xsl:attribute name="class">external-link same-ns</xsl:attribute>
840
+ <xsl:value-of select="$qn"/>
841
+ </xsl:element>
842
+ </xsl:when>
843
+ <xsl:when test="($linktarget='no-target')
844
+ and not($tns = $refns)">
845
+ <xsl:element name="span">
846
+ <xsl:attribute name="class">external-link diff-ns</xsl:attribute>
847
+ <xsl:value-of select="$qn"/>
848
+ </xsl:element>
849
+ </xsl:when>
850
+ <xsl:otherwise>
851
+ <xsl:element name="a">
852
+ <xsl:attribute name="href">
853
+ <xsl:value-of select="concat('#',$linktarget)"/>
854
+ </xsl:attribute>
855
+ <xsl:value-of select="$qn"/>
856
+ </xsl:element>
857
+ </xsl:otherwise>
858
+ </xsl:choose>
859
+ </xsl:template>
860
+
861
+ <xsl:template name="qname-to-uri" match="*" mode="qname-to-uri">
862
+ <xsl:param name="qname" select="."/>
863
+ <xsl:variable name="prefix" select="substring-before($qname,':')"/>
864
+ <xsl:choose>
865
+ <xsl:when test="(1=1) and ($prefix='xml')">
866
+ <!--* we need to special-case 'xml', since
867
+ * Opera does not provide a ns node for it.
868
+ *-->
869
+ <xsl:value-of select="'http://www.w3.org/XML/1998/namespace'"/>
870
+ </xsl:when>
871
+ <xsl:when test="self::*">
872
+ <!--* we're an element *-->
873
+ <xsl:value-of select="string(namespace::*[name()=$prefix])"/>
874
+ </xsl:when>
875
+ <xsl:otherwise>
876
+ <!--* we're not an element *-->
877
+ <xsl:value-of select="string(parent::*/namespace::*[name()=$prefix])"/>
878
+ </xsl:otherwise>
879
+ </xsl:choose>
880
+ </xsl:template>
881
+ <xsl:template name="qname-to-ncname">
882
+ <xsl:param name="qname" select="."/>
883
+ <xsl:choose>
884
+ <xsl:when test="contains($qname,':')">
885
+ <xsl:value-of select="substring-after($qname,':')"/>
886
+ </xsl:when>
887
+ <xsl:otherwise>
888
+ <xsl:value-of select="$qname"/>
889
+ </xsl:otherwise>
890
+ </xsl:choose>
891
+ </xsl:template>
892
+
893
+ <xsl:template name="lastline-suffix">
894
+ <xsl:param name="s0"></xsl:param>
895
+ <xsl:choose>
896
+ <xsl:when test="contains($s0,'&#xA;')">
897
+ <xsl:call-template name="lastline-suffix">
898
+ <xsl:with-param name="s0" select="substring-after($s0,'&#xA;')"/>
899
+ </xsl:call-template>
900
+ </xsl:when>
901
+ <xsl:otherwise>
902
+ <xsl:value-of select="$s0"/>
903
+ </xsl:otherwise>
904
+ </xsl:choose>
905
+ </xsl:template>
906
+
907
+
908
+ <xsl:template name="stag-width">
909
+ <xsl:param name="indent-length" select="0"/>
910
+
911
+ <xsl:variable name="attcount" select="count(@*)"/>
912
+ <xsl:variable name="list-attname-lengths">
913
+ <xsl:call-template name="make-length-list">
914
+ <xsl:with-param name="kw">attnames</xsl:with-param>
915
+ </xsl:call-template>
916
+ </xsl:variable>
917
+
918
+ <xsl:variable name="list-attval-lengths">
919
+ <xsl:call-template name="make-length-list">
920
+ <xsl:with-param name="kw">attvals</xsl:with-param>
921
+ </xsl:call-template>
922
+ </xsl:variable>
923
+
924
+ <xsl:variable name="sum-att-lengths">
925
+ <xsl:call-template name="sum-list">
926
+ <xsl:with-param name="s0" select="concat($list-attname-lengths,' ',$list-attval-lengths)"/>
927
+ </xsl:call-template>
928
+ </xsl:variable>
929
+
930
+ <!--*
931
+ <xsl:message>indent-length = <xsl:value-of select="$indent-length"/></xsl:message>
932
+ <xsl:message>attcount = <xsl:value-of select="$attcount"/></xsl:message>
933
+ <xsl:message>sum-att-lengths = <xsl:value-of select="$sum-att-lengths"/></xsl:message>
934
+ <xsl:message>namelen = <xsl:value-of select="string-length(name())"/></xsl:message>
935
+ *-->
936
+
937
+ <xsl:value-of select="$indent-length + (4 * $attcount) + $sum-att-lengths + string-length(name()) + 3"/>
938
+
939
+ </xsl:template>
940
+
941
+
942
+ <xsl:template name="make-length-list">
943
+ <xsl:param name="kw">unknown</xsl:param>
944
+ <xsl:choose>
945
+ <xsl:when test="$kw = 'attnames'">
946
+ <xsl:apply-templates select="@*" mode="attnamelength"/>
947
+ </xsl:when>
948
+ <xsl:when test="$kw = 'attvals'">
949
+ <xsl:apply-templates select="@*" mode="attvallength"/>
950
+ </xsl:when>
951
+ <xsl:otherwise>0</xsl:otherwise>
952
+ </xsl:choose>
953
+ </xsl:template>
954
+
955
+ <xsl:template name="sum-list">
956
+ <xsl:param name="n0" select="0"/>
957
+ <xsl:param name="s0"/>
958
+
959
+ <xsl:variable name="s1" select="normalize-space($s0)"/>
960
+
961
+ <!--*
962
+ <xsl:message><xsl:value-of select="concat('n0 =', $n0, ', s1 = /',$s1,'/')"/></xsl:message>
963
+ *-->
964
+
965
+ <xsl:choose>
966
+ <xsl:when test="contains($s1,' ')">
967
+ <xsl:variable name="term" select="substring-before($s1,' ')"/>
968
+ <xsl:variable name="s2" select="substring-after($s1,' ')"/>
969
+ <xsl:call-template name="sum-list">
970
+ <xsl:with-param name="n0" select="$n0 + $term"/>
971
+ <xsl:with-param name="s0" select="$s2"/>
972
+ </xsl:call-template>
973
+ </xsl:when>
974
+ <xsl:otherwise>
975
+ <xsl:value-of select="$n0 + $s1"/>
976
+ </xsl:otherwise>
977
+ </xsl:choose>
978
+ </xsl:template>
979
+
980
+ <xsl:template match="@*" mode="attnamelength">
981
+ <xsl:value-of select="concat(string-length(name()), ' ')"/>
982
+ </xsl:template>
983
+ <xsl:template match="@*" mode="attvallength">
984
+ <xsl:value-of select="concat(string-length(.), ' ')"/>
985
+ </xsl:template>
986
+
987
+ </xsl:stylesheet>
988
+ <!-- Keep this comment at the end of the file
989
+ Local variables:
990
+ mode: xml
991
+ sgml-default-dtd-file:"/Library/SGML/Public/Emacs/xslt.ced"
992
+ sgml-omittag:t
993
+ sgml-shorttag:t
994
+ sgml-indent-data:t
995
+ sgml-indent-step:1
996
+ End:
997
+ -->