svg_conform 0.1.0

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 (335) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/rake.yml +15 -0
  3. data/.github/workflows/release.yml +23 -0
  4. data/.github/workflows/svgcheck-compatibility.yml +135 -0
  5. data/.gitignore +12 -0
  6. data/.rspec +3 -0
  7. data/.rubocop.yml +13 -0
  8. data/.rubocop_todo.yml +183 -0
  9. data/CODE_OF_CONDUCT.md +132 -0
  10. data/Gemfile +14 -0
  11. data/README.adoc +1384 -0
  12. data/Rakefile +15 -0
  13. data/config/profiles/base.yml +34 -0
  14. data/config/profiles/lucid_fix.yml +37 -0
  15. data/config/profiles/metanorma.yml +212 -0
  16. data/config/profiles/no_external_css.yml +20 -0
  17. data/config/profiles/svg_1_2_rfc.yml +284 -0
  18. data/config/profiles/svg_1_2_rfc_with_rdf.yml +145 -0
  19. data/config/svgcheck_mapping.yml +180 -0
  20. data/docs/profiles.adoc +547 -0
  21. data/docs/rdf_metadata_support.adoc +212 -0
  22. data/docs/remediation.adoc +732 -0
  23. data/docs/requirements.adoc +709 -0
  24. data/examples/demo.rb +116 -0
  25. data/examples/requirements_demo.rb +240 -0
  26. data/exe/svg_conform +7 -0
  27. data/lib/svg_conform/batch_report.rb +70 -0
  28. data/lib/svg_conform/cli.rb +107 -0
  29. data/lib/svg_conform/commands/check.rb +390 -0
  30. data/lib/svg_conform/commands/profiles.rb +118 -0
  31. data/lib/svg_conform/commands/svgcheck.rb +90 -0
  32. data/lib/svg_conform/commands/svgcheck_compare.rb +92 -0
  33. data/lib/svg_conform/commands/svgcheck_compatibility.rb +43 -0
  34. data/lib/svg_conform/commands/svgcheck_generate.rb +262 -0
  35. data/lib/svg_conform/compatibility/analysis_context.rb +68 -0
  36. data/lib/svg_conform/compatibility/comparison_result.rb +147 -0
  37. data/lib/svg_conform/compatibility/compatibility_analyzer.rb +85 -0
  38. data/lib/svg_conform/compatibility/file_processor.rb +109 -0
  39. data/lib/svg_conform/compatibility/pattern_discovery.rb +319 -0
  40. data/lib/svg_conform/compatibility/report_formatter.rb +359 -0
  41. data/lib/svg_conform/compatibility/svg_analysis_engine.rb +316 -0
  42. data/lib/svg_conform/compatibility/validity_analysis.rb +252 -0
  43. data/lib/svg_conform/compatibility/xml_analysis_engine.rb +198 -0
  44. data/lib/svg_conform/compatibility_analyzer.rb +285 -0
  45. data/lib/svg_conform/conformance_report.rb +267 -0
  46. data/lib/svg_conform/constants.rb +199 -0
  47. data/lib/svg_conform/css_color.rb +262 -0
  48. data/lib/svg_conform/document.rb +203 -0
  49. data/lib/svg_conform/external_checkers/svgcheck/compatibility_engine.rb +166 -0
  50. data/lib/svg_conform/external_checkers/svgcheck/output_generator.rb +101 -0
  51. data/lib/svg_conform/external_checkers/svgcheck/parser.rb +200 -0
  52. data/lib/svg_conform/external_checkers/svgcheck/report_comparator.rb +175 -0
  53. data/lib/svg_conform/external_checkers/svgcheck/report_generator.rb +82 -0
  54. data/lib/svg_conform/external_checkers/svgcheck/validation_pipeline.rb +249 -0
  55. data/lib/svg_conform/external_checkers/svgcheck.rb +56 -0
  56. data/lib/svg_conform/external_checkers.rb +34 -0
  57. data/lib/svg_conform/fixer.rb +56 -0
  58. data/lib/svg_conform/profile.rb +164 -0
  59. data/lib/svg_conform/profiles.rb +60 -0
  60. data/lib/svg_conform/remediation_engine.rb +92 -0
  61. data/lib/svg_conform/remediation_result.rb +36 -0
  62. data/lib/svg_conform/remediation_runner.rb +225 -0
  63. data/lib/svg_conform/remediations/base_remediation.rb +165 -0
  64. data/lib/svg_conform/remediations/color_remediation.rb +226 -0
  65. data/lib/svg_conform/remediations/font_embedding_remediation.rb +145 -0
  66. data/lib/svg_conform/remediations/font_remediation.rb +122 -0
  67. data/lib/svg_conform/remediations/image_embedding_remediation.rb +154 -0
  68. data/lib/svg_conform/remediations/invalid_id_references_remediation.rb +129 -0
  69. data/lib/svg_conform/remediations/namespace_attribute_remediation.rb +244 -0
  70. data/lib/svg_conform/remediations/namespace_remediation.rb +151 -0
  71. data/lib/svg_conform/remediations/no_external_css_remediation.rb +192 -0
  72. data/lib/svg_conform/remediations/style_promotion_remediation.rb +93 -0
  73. data/lib/svg_conform/remediations/viewbox_remediation.rb +127 -0
  74. data/lib/svg_conform/remediations.rb +40 -0
  75. data/lib/svg_conform/report_comparator.rb +772 -0
  76. data/lib/svg_conform/requirements/allowed_elements_requirement.rb +367 -0
  77. data/lib/svg_conform/requirements/base_requirement.rb +98 -0
  78. data/lib/svg_conform/requirements/color_restrictions_requirement.rb +126 -0
  79. data/lib/svg_conform/requirements/element_requirement_config.rb +75 -0
  80. data/lib/svg_conform/requirements/font_family_requirement.rb +133 -0
  81. data/lib/svg_conform/requirements/forbidden_content_requirement.rb +60 -0
  82. data/lib/svg_conform/requirements/id_reference_requirement.rb +133 -0
  83. data/lib/svg_conform/requirements/invalid_id_references_requirement.rb +132 -0
  84. data/lib/svg_conform/requirements/link_validation_requirement.rb +55 -0
  85. data/lib/svg_conform/requirements/namespace_attributes_requirement.rb +211 -0
  86. data/lib/svg_conform/requirements/namespace_requirement.rb +294 -0
  87. data/lib/svg_conform/requirements/no_external_css_requirement.rb +132 -0
  88. data/lib/svg_conform/requirements/no_external_fonts_requirement.rb +121 -0
  89. data/lib/svg_conform/requirements/no_external_images_requirement.rb +91 -0
  90. data/lib/svg_conform/requirements/style_promotion_requirement.rb +72 -0
  91. data/lib/svg_conform/requirements/style_requirement.rb +226 -0
  92. data/lib/svg_conform/requirements/viewbox_required_requirement.rb +96 -0
  93. data/lib/svg_conform/requirements.rb +49 -0
  94. data/lib/svg_conform/semantic_comparator.rb +829 -0
  95. data/lib/svg_conform/validation_context.rb +408 -0
  96. data/lib/svg_conform/validation_result.rb +146 -0
  97. data/lib/svg_conform/validator.rb +91 -0
  98. data/lib/svg_conform/version.rb +5 -0
  99. data/lib/svg_conform.rb +68 -0
  100. data/lib/tasks/fixtures.rake +321 -0
  101. data/lib/tasks/svgcheck.rake +111 -0
  102. data/reference-docs/SVG-1.2-RFC.rnc.txt +1676 -0
  103. data/reference-docs/Scalable Vector Graphics (SVG) 1.1 (Second Edition).html +40764 -0
  104. data/reference-docs/Scalable Vector Graphics (SVG) Tiny 1.2 Specification.html +44591 -0
  105. data/reference-docs/rfc7996.txt +2971 -0
  106. data/sig/svg_conform.rbs +4 -0
  107. data/spec/fixtures/allowed_elements/inputs/basic_violations.svg +21 -0
  108. data/spec/fixtures/allowed_elements/repair/basic_violations.svg +18 -0
  109. data/spec/fixtures/color_restrictions/inputs/basic_violations.svg +23 -0
  110. data/spec/fixtures/color_restrictions/repair/basic_violations.svg +23 -0
  111. data/spec/fixtures/comprehensive/inputs/multiple_violations.svg +21 -0
  112. data/spec/fixtures/comprehensive/repair/multiple_violations.svg +16 -0
  113. data/spec/fixtures/font_family/inputs/basic_violations.svg +17 -0
  114. data/spec/fixtures/font_family/repair/basic_violations.svg +17 -0
  115. data/spec/fixtures/forbidden_content/inputs/basic_violations.svg +27 -0
  116. data/spec/fixtures/forbidden_content/repair/basic_violations.svg +19 -0
  117. data/spec/fixtures/id_reference/inputs/basic_violations.svg +17 -0
  118. data/spec/fixtures/id_reference/repair/basic_violations.svg +15 -0
  119. data/spec/fixtures/link_validation/inputs/basic_violations.svg +20 -0
  120. data/spec/fixtures/link_validation/repair/basic_violations.svg +16 -0
  121. data/spec/fixtures/lucid/inputs/simple.svg +67 -0
  122. data/spec/fixtures/lucid/repair/simple.svg +63 -0
  123. data/spec/fixtures/namespace/inputs/basic_violations.svg +20 -0
  124. data/spec/fixtures/namespace/repair/basic_violations.svg +17 -0
  125. data/spec/fixtures/namespace_attributes/inputs/basic_violations.svg +16 -0
  126. data/spec/fixtures/namespace_attributes/repair/basic_violations.svg +15 -0
  127. data/spec/fixtures/no_external_css/inputs/basic_violations.svg +20 -0
  128. data/spec/fixtures/no_external_css/repair/basic_violations.svg +18 -0
  129. data/spec/fixtures/style/inputs/basic_violations.svg +22 -0
  130. data/spec/fixtures/style/repair/basic_violations.svg +22 -0
  131. data/spec/fixtures/style_promotion/inputs/basic_test.svg +15 -0
  132. data/spec/fixtures/style_promotion/repair/basic_test.svg +15 -0
  133. data/spec/fixtures/svg_1_2_rfc/inputs/allowed_elements_violations.svg +18 -0
  134. data/spec/fixtures/svg_1_2_rfc/inputs/color_restrictions_violations.svg +23 -0
  135. data/spec/fixtures/svgcheck/check/DrawBerry-sample-2.svg.code +1 -0
  136. data/spec/fixtures/svgcheck/check/DrawBerry-sample-2.svg.err +0 -0
  137. data/spec/fixtures/svgcheck/check/DrawBerry-sample-2.svg.out +23 -0
  138. data/spec/fixtures/svgcheck/check/IETF-test.svg.code +1 -0
  139. data/spec/fixtures/svgcheck/check/IETF-test.svg.err +0 -0
  140. data/spec/fixtures/svgcheck/check/IETF-test.svg.out +20 -0
  141. data/spec/fixtures/svgcheck/check/circle.svg.code +1 -0
  142. data/spec/fixtures/svgcheck/check/circle.svg.err +0 -0
  143. data/spec/fixtures/svgcheck/check/circle.svg.out +2 -0
  144. data/spec/fixtures/svgcheck/check/colors.svg.code +1 -0
  145. data/spec/fixtures/svgcheck/check/colors.svg.err +0 -0
  146. data/spec/fixtures/svgcheck/check/colors.svg.out +13 -0
  147. data/spec/fixtures/svgcheck/check/dia-sample-svg.svg.code +1 -0
  148. data/spec/fixtures/svgcheck/check/dia-sample-svg.svg.err +0 -0
  149. data/spec/fixtures/svgcheck/check/dia-sample-svg.svg.out +76 -0
  150. data/spec/fixtures/svgcheck/check/example-dot.svg.code +1 -0
  151. data/spec/fixtures/svgcheck/check/example-dot.svg.err +0 -0
  152. data/spec/fixtures/svgcheck/check/example-dot.svg.out +11 -0
  153. data/spec/fixtures/svgcheck/check/full-tiny.svg.code +1 -0
  154. data/spec/fixtures/svgcheck/check/full-tiny.svg.err +0 -0
  155. data/spec/fixtures/svgcheck/check/full-tiny.svg.out +5835 -0
  156. data/spec/fixtures/svgcheck/check/good.svg.code +1 -0
  157. data/spec/fixtures/svgcheck/check/good.svg.err +0 -0
  158. data/spec/fixtures/svgcheck/check/good.svg.out +1 -0
  159. data/spec/fixtures/svgcheck/check/httpbis-proxy20-fig6.svg.code +1 -0
  160. data/spec/fixtures/svgcheck/check/httpbis-proxy20-fig6.svg.err +0 -0
  161. data/spec/fixtures/svgcheck/check/httpbis-proxy20-fig6.svg.out +5 -0
  162. data/spec/fixtures/svgcheck/check/malformed.svg.code +1 -0
  163. data/spec/fixtures/svgcheck/check/malformed.svg.err +0 -0
  164. data/spec/fixtures/svgcheck/check/malformed.svg.out +8 -0
  165. data/spec/fixtures/svgcheck/check/rfc-svg.svg.code +1 -0
  166. data/spec/fixtures/svgcheck/check/rfc-svg.svg.err +0 -0
  167. data/spec/fixtures/svgcheck/check/rfc-svg.svg.out +1 -0
  168. data/spec/fixtures/svgcheck/check/rfc.xml.code +1 -0
  169. data/spec/fixtures/svgcheck/check/rfc.xml.err +0 -0
  170. data/spec/fixtures/svgcheck/check/rfc.xml.out +2 -0
  171. data/spec/fixtures/svgcheck/check/rgb.svg.code +1 -0
  172. data/spec/fixtures/svgcheck/check/rgb.svg.err +0 -0
  173. data/spec/fixtures/svgcheck/check/rgb.svg.out +9 -0
  174. data/spec/fixtures/svgcheck/check/svg-wordle.svg.code +1 -0
  175. data/spec/fixtures/svgcheck/check/svg-wordle.svg.err +0 -0
  176. data/spec/fixtures/svgcheck/check/svg-wordle.svg.out +508 -0
  177. data/spec/fixtures/svgcheck/check/threshold.svg.code +1 -0
  178. data/spec/fixtures/svgcheck/check/threshold.svg.err +0 -0
  179. data/spec/fixtures/svgcheck/check/threshold.svg.out +20 -0
  180. data/spec/fixtures/svgcheck/check/utf8.svg.code +1 -0
  181. data/spec/fixtures/svgcheck/check/utf8.svg.err +0 -0
  182. data/spec/fixtures/svgcheck/check/utf8.svg.out +162 -0
  183. data/spec/fixtures/svgcheck/check/viewBox-both.svg.code +1 -0
  184. data/spec/fixtures/svgcheck/check/viewBox-both.svg.err +0 -0
  185. data/spec/fixtures/svgcheck/check/viewBox-both.svg.out +4 -0
  186. data/spec/fixtures/svgcheck/check/viewBox-height.svg.code +1 -0
  187. data/spec/fixtures/svgcheck/check/viewBox-height.svg.err +0 -0
  188. data/spec/fixtures/svgcheck/check/viewBox-height.svg.out +3 -0
  189. data/spec/fixtures/svgcheck/check/viewBox-none.svg.code +1 -0
  190. data/spec/fixtures/svgcheck/check/viewBox-none.svg.err +0 -0
  191. data/spec/fixtures/svgcheck/check/viewBox-none.svg.out +3 -0
  192. data/spec/fixtures/svgcheck/check/viewBox-width.svg.code +1 -0
  193. data/spec/fixtures/svgcheck/check/viewBox-width.svg.err +0 -0
  194. data/spec/fixtures/svgcheck/check/viewBox-width.svg.out +3 -0
  195. data/spec/fixtures/svgcheck/inputs/DrawBerry-sample-2.svg +28 -0
  196. data/spec/fixtures/svgcheck/inputs/IETF-test.svg +28 -0
  197. data/spec/fixtures/svgcheck/inputs/circle.svg +3 -0
  198. data/spec/fixtures/svgcheck/inputs/colors.svg +18 -0
  199. data/spec/fixtures/svgcheck/inputs/dia-sample-svg.svg +47 -0
  200. data/spec/fixtures/svgcheck/inputs/example-dot.svg +75 -0
  201. data/spec/fixtures/svgcheck/inputs/full-tiny.svg +16194 -0
  202. data/spec/fixtures/svgcheck/inputs/good.svg +19 -0
  203. data/spec/fixtures/svgcheck/inputs/httpbis-proxy20-fig6.svg +2 -0
  204. data/spec/fixtures/svgcheck/inputs/malformed.svg +11 -0
  205. data/spec/fixtures/svgcheck/inputs/rfc-svg.svg +1028 -0
  206. data/spec/fixtures/svgcheck/inputs/rfc.xml +37 -0
  207. data/spec/fixtures/svgcheck/inputs/rgb.svg +9 -0
  208. data/spec/fixtures/svgcheck/inputs/svg-wordle.svg +330 -0
  209. data/spec/fixtures/svgcheck/inputs/threshold.svg +26 -0
  210. data/spec/fixtures/svgcheck/inputs/utf8.svg +448 -0
  211. data/spec/fixtures/svgcheck/inputs/viewBox-both.svg +3 -0
  212. data/spec/fixtures/svgcheck/inputs/viewBox-height.svg +3 -0
  213. data/spec/fixtures/svgcheck/inputs/viewBox-none.svg +3 -0
  214. data/spec/fixtures/svgcheck/inputs/viewBox-width.svg +3 -0
  215. data/spec/fixtures/svgcheck/repair/DrawBerry-sample-2.svg.code +1 -0
  216. data/spec/fixtures/svgcheck/repair/DrawBerry-sample-2.svg.err +0 -0
  217. data/spec/fixtures/svgcheck/repair/DrawBerry-sample-2.svg.file +0 -0
  218. data/spec/fixtures/svgcheck/repair/DrawBerry-sample-2.svg.out +23 -0
  219. data/spec/fixtures/svgcheck/repair/IETF-test.svg.code +1 -0
  220. data/spec/fixtures/svgcheck/repair/IETF-test.svg.err +0 -0
  221. data/spec/fixtures/svgcheck/repair/IETF-test.svg.file +29 -0
  222. data/spec/fixtures/svgcheck/repair/IETF-test.svg.out +20 -0
  223. data/spec/fixtures/svgcheck/repair/circle.svg.code +1 -0
  224. data/spec/fixtures/svgcheck/repair/circle.svg.err +0 -0
  225. data/spec/fixtures/svgcheck/repair/circle.svg.file +4 -0
  226. data/spec/fixtures/svgcheck/repair/circle.svg.out +2 -0
  227. data/spec/fixtures/svgcheck/repair/colors.svg.code +1 -0
  228. data/spec/fixtures/svgcheck/repair/colors.svg.err +0 -0
  229. data/spec/fixtures/svgcheck/repair/colors.svg.file +19 -0
  230. data/spec/fixtures/svgcheck/repair/colors.svg.out +13 -0
  231. data/spec/fixtures/svgcheck/repair/dia-sample-svg.svg.code +1 -0
  232. data/spec/fixtures/svgcheck/repair/dia-sample-svg.svg.err +0 -0
  233. data/spec/fixtures/svgcheck/repair/dia-sample-svg.svg.file +47 -0
  234. data/spec/fixtures/svgcheck/repair/dia-sample-svg.svg.out +76 -0
  235. data/spec/fixtures/svgcheck/repair/example-dot.svg.code +1 -0
  236. data/spec/fixtures/svgcheck/repair/example-dot.svg.err +0 -0
  237. data/spec/fixtures/svgcheck/repair/example-dot.svg.file +69 -0
  238. data/spec/fixtures/svgcheck/repair/example-dot.svg.out +11 -0
  239. data/spec/fixtures/svgcheck/repair/good.svg.code +1 -0
  240. data/spec/fixtures/svgcheck/repair/good.svg.err +0 -0
  241. data/spec/fixtures/svgcheck/repair/good.svg.file +0 -0
  242. data/spec/fixtures/svgcheck/repair/good.svg.out +1 -0
  243. data/spec/fixtures/svgcheck/repair/httpbis-proxy20-fig6.svg.code +1 -0
  244. data/spec/fixtures/svgcheck/repair/httpbis-proxy20-fig6.svg.err +0 -0
  245. data/spec/fixtures/svgcheck/repair/httpbis-proxy20-fig6.svg.file +73 -0
  246. data/spec/fixtures/svgcheck/repair/httpbis-proxy20-fig6.svg.out +5 -0
  247. data/spec/fixtures/svgcheck/repair/malformed.svg.code +1 -0
  248. data/spec/fixtures/svgcheck/repair/malformed.svg.err +0 -0
  249. data/spec/fixtures/svgcheck/repair/malformed.svg.file +9 -0
  250. data/spec/fixtures/svgcheck/repair/malformed.svg.out +8 -0
  251. data/spec/fixtures/svgcheck/repair/rfc-svg.svg.code +1 -0
  252. data/spec/fixtures/svgcheck/repair/rfc-svg.svg.err +0 -0
  253. data/spec/fixtures/svgcheck/repair/rfc-svg.svg.file +0 -0
  254. data/spec/fixtures/svgcheck/repair/rfc-svg.svg.out +1 -0
  255. data/spec/fixtures/svgcheck/repair/rfc.xml.code +1 -0
  256. data/spec/fixtures/svgcheck/repair/rfc.xml.err +0 -0
  257. data/spec/fixtures/svgcheck/repair/rfc.xml.file +37 -0
  258. data/spec/fixtures/svgcheck/repair/rfc.xml.out +2 -0
  259. data/spec/fixtures/svgcheck/repair/rgb.svg.code +1 -0
  260. data/spec/fixtures/svgcheck/repair/rgb.svg.err +0 -0
  261. data/spec/fixtures/svgcheck/repair/rgb.svg.file +10 -0
  262. data/spec/fixtures/svgcheck/repair/rgb.svg.out +9 -0
  263. data/spec/fixtures/svgcheck/repair/svg-wordle.svg.code +1 -0
  264. data/spec/fixtures/svgcheck/repair/svg-wordle.svg.err +0 -0
  265. data/spec/fixtures/svgcheck/repair/svg-wordle.svg.file +112 -0
  266. data/spec/fixtures/svgcheck/repair/svg-wordle.svg.out +508 -0
  267. data/spec/fixtures/svgcheck/repair/threshold.svg.code +1 -0
  268. data/spec/fixtures/svgcheck/repair/threshold.svg.err +0 -0
  269. data/spec/fixtures/svgcheck/repair/threshold.svg.file +27 -0
  270. data/spec/fixtures/svgcheck/repair/threshold.svg.out +20 -0
  271. data/spec/fixtures/svgcheck/repair/utf8.svg.code +1 -0
  272. data/spec/fixtures/svgcheck/repair/utf8.svg.err +0 -0
  273. data/spec/fixtures/svgcheck/repair/utf8.svg.file +381 -0
  274. data/spec/fixtures/svgcheck/repair/utf8.svg.out +162 -0
  275. data/spec/fixtures/svgcheck/repair/viewBox-both.svg.code +1 -0
  276. data/spec/fixtures/svgcheck/repair/viewBox-both.svg.err +0 -0
  277. data/spec/fixtures/svgcheck/repair/viewBox-both.svg.file +4 -0
  278. data/spec/fixtures/svgcheck/repair/viewBox-both.svg.out +4 -0
  279. data/spec/fixtures/svgcheck/repair/viewBox-height.svg.code +1 -0
  280. data/spec/fixtures/svgcheck/repair/viewBox-height.svg.err +0 -0
  281. data/spec/fixtures/svgcheck/repair/viewBox-height.svg.file +4 -0
  282. data/spec/fixtures/svgcheck/repair/viewBox-height.svg.out +3 -0
  283. data/spec/fixtures/svgcheck/repair/viewBox-none.svg.code +1 -0
  284. data/spec/fixtures/svgcheck/repair/viewBox-none.svg.err +0 -0
  285. data/spec/fixtures/svgcheck/repair/viewBox-none.svg.file +4 -0
  286. data/spec/fixtures/svgcheck/repair/viewBox-none.svg.out +3 -0
  287. data/spec/fixtures/svgcheck/repair/viewBox-width.svg.code +1 -0
  288. data/spec/fixtures/svgcheck/repair/viewBox-width.svg.err +0 -0
  289. data/spec/fixtures/svgcheck/repair/viewBox-width.svg.file +4 -0
  290. data/spec/fixtures/svgcheck/repair/viewBox-width.svg.out +3 -0
  291. data/spec/fixtures/viewbox_required/inputs/missing_viewbox.svg +10 -0
  292. data/spec/fixtures/viewbox_required/repair/missing_viewbox.svg +10 -0
  293. data/spec/spec_helper.rb +16 -0
  294. data/spec/svg_conform/batch_report_spec.rb +99 -0
  295. data/spec/svg_conform/commands/check_command_spec.rb +90 -0
  296. data/spec/svg_conform/commands/profiles_command_spec.rb +20 -0
  297. data/spec/svg_conform/commands/svgcheck_compare_command_spec.rb +13 -0
  298. data/spec/svg_conform/commands/svgcheck_compatibility_command_spec.rb +13 -0
  299. data/spec/svg_conform/commands/svgcheck_generate_command_spec.rb +14 -0
  300. data/spec/svg_conform/profiles/base_profile_spec.rb +42 -0
  301. data/spec/svg_conform/profiles/lucid_fix_profile_spec.rb +46 -0
  302. data/spec/svg_conform/profiles/lucid_profile_spec.rb +84 -0
  303. data/spec/svg_conform/profiles/metanorma_profile_spec.rb +62 -0
  304. data/spec/svg_conform/profiles/no_external_css_profile_spec.rb +66 -0
  305. data/spec/svg_conform/profiles/svg_1_2_rfc_profile_spec.rb +200 -0
  306. data/spec/svg_conform/profiles/svg_1_2_rfc_with_rdf_profile_spec.rb +81 -0
  307. data/spec/svg_conform/remediations/color_remediation_spec.rb +95 -0
  308. data/spec/svg_conform/remediations/font_embedding_remediation_spec.rb +20 -0
  309. data/spec/svg_conform/remediations/font_remediation_spec.rb +95 -0
  310. data/spec/svg_conform/remediations/image_embedding_remediation_spec.rb +20 -0
  311. data/spec/svg_conform/remediations/invalid_id_references_remediation_spec.rb +97 -0
  312. data/spec/svg_conform/remediations/namespace_attribute_remediation_spec.rb +97 -0
  313. data/spec/svg_conform/remediations/namespace_remediation_spec.rb +95 -0
  314. data/spec/svg_conform/remediations/no_external_css_remediation_spec.rb +97 -0
  315. data/spec/svg_conform/remediations/style_promotion_remediation_spec.rb +97 -0
  316. data/spec/svg_conform/remediations/viewbox_remediation_spec.rb +95 -0
  317. data/spec/svg_conform/requirements/allowed_elements_requirement_spec.rb +118 -0
  318. data/spec/svg_conform/requirements/color_restrictions_requirement_spec.rb +168 -0
  319. data/spec/svg_conform/requirements/font_family_requirement_spec.rb +188 -0
  320. data/spec/svg_conform/requirements/forbidden_content_requirement_spec.rb +195 -0
  321. data/spec/svg_conform/requirements/id_reference_requirement_spec.rb +78 -0
  322. data/spec/svg_conform/requirements/invalid_id_references_requirement_spec.rb +78 -0
  323. data/spec/svg_conform/requirements/link_validation_requirement_spec.rb +78 -0
  324. data/spec/svg_conform/requirements/namespace_attributes_requirement_spec.rb +86 -0
  325. data/spec/svg_conform/requirements/namespace_requirement_spec.rb +184 -0
  326. data/spec/svg_conform/requirements/no_external_css_requirement_spec.rb +78 -0
  327. data/spec/svg_conform/requirements/no_external_fonts_requirement_spec.rb +20 -0
  328. data/spec/svg_conform/requirements/no_external_images_requirement_spec.rb +20 -0
  329. data/spec/svg_conform/requirements/style_promotion_requirement_spec.rb +78 -0
  330. data/spec/svg_conform/requirements/style_requirement_spec.rb +76 -0
  331. data/spec/svg_conform/requirements/viewbox_required_requirement_spec.rb +165 -0
  332. data/spec/svg_conform_spec.rb +32 -0
  333. data/spec/svgcheck_compatibility_spec.rb +355 -0
  334. data/svg_conform.gemspec +35 -0
  335. metadata +436 -0
@@ -0,0 +1,1676 @@
1
+ # SVG-1.2-RFC.rnc
2
+ #
3
+ # SVG 1.2 RFC RNC schema as specified in RFC 7996.
4
+ #
5
+ # This schema is automatically included by the parent RFCXML v3 RNC schema
6
+ # and so needs to be present for succesful validation but does not need to
7
+ # be specified separately.
8
+ #
9
+ # Documentation is at https://authors.ietf.org/en/templates-and-schemas
10
+ #
11
+ # Nevil Brownlee, Tue Jan 16 2018 (NZDT)
12
+
13
+ default namespace = "http://www.w3.org/2000/svg"
14
+ namespace xlink = "http://www.w3.org/1999/xlink"
15
+
16
+ rfc-color = ( # SVG-1.2-RFC doesn't allow "color or grey-scale"
17
+ "black" | "white" | "#000000" | "#FFFFFF" | "#ffffff" |
18
+ "currentColor" | "inherit" )
19
+
20
+ start = svg
21
+
22
+ svg =
23
+ element svg {
24
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
25
+ attribute stroke-opacity { "inherit" | xsd:string }?)
26
+ & (attribute fill { "none" | rfc-color }?,
27
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
28
+ attribute stroke { rfc-color }?,
29
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
30
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
31
+ attribute stroke-linecap {
32
+ "butt" | "round" | "square" | "inherit"
33
+ }?,
34
+ attribute stroke-linejoin {
35
+ "miter" | "round" | "bevel" | "inherit"
36
+ }?,
37
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
38
+ attribute stroke-width { "inherit" | xsd:string }?,
39
+ attribute color { rfc-color }?,
40
+ attribute color-rendering {
41
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
42
+ }?)
43
+ & attribute vector-effect {
44
+ "none" | "non-scaling-stroke" | "inherit"
45
+ }?
46
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
47
+ attribute unicode-bidi {
48
+ "normal" | "embed" | "bidi-override" | "inherit"
49
+ }?)
50
+ & (attribute solid-color { rfc-color }?,
51
+ attribute solid-opacity { "inherit" | xsd:string }?)
52
+ & (attribute display-align {
53
+ "auto" | "before" | "center" | "after" | "inherit"
54
+ }?,
55
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
56
+ & (attribute stop-color { rfc-color }?,
57
+ attribute stop-opacity { "inherit" | xsd:string }?)
58
+ & (attribute font-family { "serif" | "sans-serif" | "monospace"
59
+ | "inherit" }?,
60
+ attribute font-size { "inherit" | xsd:string }?,
61
+ attribute font-style {
62
+ "normal" | "italic" | "oblique" | "inherit"
63
+ }?,
64
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
65
+ attribute font-weight {
66
+ "normal"
67
+ | "bold"
68
+ | "bolder"
69
+ | "lighter"
70
+ }?,
71
+ attribute text-anchor {
72
+ "start" | "middle" | "end" | "inherit"}?,
73
+ attribute text-align {
74
+ "start" | "center" | "end" | "inherit"
75
+ }?)),
76
+ (attribute id { xsd:NCName }
77
+ | attribute xml:id { xsd:NCName })?,
78
+ attribute xml:base { xsd:anyURI | xsd:string }?,
79
+ attribute xml:lang { xsd:language? }?,
80
+ attribute class { xsd:NMTOKENS }?,
81
+ attribute role { xsd:string }?,
82
+ attribute rel { xsd:string }?,
83
+ attribute rev { xsd:string }?,
84
+ attribute typeof { xsd:string }?,
85
+ attribute content { xsd:string }?,
86
+ attribute datatype { xsd:string }?,
87
+ attribute resource { xsd:string }?,
88
+ attribute about { xsd:string }?,
89
+ attribute property { xsd:string }?,
90
+ attribute xml:space { "default" | "preserve" }?,
91
+ attribute width { xsd:string }?,
92
+ attribute height { xsd:string }?,
93
+ attribute preserveAspectRatio {
94
+ xsd:string { pattern = "\s*(none|xMidYMid)\s*(meet)?\s*" }
95
+ }?,
96
+ attribute viewBox { text }?,
97
+ attribute version {
98
+ xsd:string "1.0" | xsd:string "1.1" | xsd:string "1.2"
99
+ }?,
100
+ attribute baseProfile {
101
+ xsd:string "none"
102
+ | xsd:string "tiny"
103
+ | xsd:string "basic"
104
+ | xsd:string "full"
105
+ }?,
106
+ attribute snapshotTime { xsd:string "none" | xsd:string }?,
107
+ (desc
108
+ | svgTitle
109
+ | path
110
+ | rect
111
+ | circle
112
+ | line
113
+ | ellipse
114
+ | polyline
115
+ | polygon
116
+ | solidColor
117
+ | textArea
118
+ | \text
119
+ | g
120
+ | defs
121
+ | use
122
+ | a)*
123
+ }
124
+
125
+ desc =
126
+ element desc {
127
+ (attribute id { xsd:NCName }
128
+ | attribute xml:id { xsd:NCName })?,
129
+ attribute xml:base { xsd:anyURI | xsd:string }?,
130
+ attribute xml:lang { xsd:language? }?,
131
+ attribute class { xsd:NMTOKENS }?,
132
+ attribute role { xsd:string }?,
133
+ attribute rel { xsd:string }?,
134
+ attribute rev { xsd:string }?,
135
+ attribute typeof { xsd:string }?,
136
+ attribute content { xsd:string }?,
137
+ attribute datatype { xsd:string }?,
138
+ attribute resource { xsd:string }?,
139
+ attribute about { xsd:string }?,
140
+ attribute property { xsd:string }?,
141
+ attribute xml:space { "default" | "preserve" }?,
142
+ ((attribute display {
143
+ "inline"
144
+ | "block"
145
+ | "list-item"
146
+ | "run-in"
147
+ | "compact"
148
+ | "marker"
149
+ | "table"
150
+ | "inline-table"
151
+ | "table-row-group"
152
+ | "table-header-group"
153
+ | "table-footer-group"
154
+ | "table-row"
155
+ | "table-column-group"
156
+ | "table-column"
157
+ | "table-cell"
158
+ | "table-caption"
159
+ | "none"
160
+ | "inherit"
161
+ }?,
162
+ attribute visibility { "visible" | "hidden" | "collapse" | "inherit" }?,
163
+ attribute image-rendering {
164
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
165
+ }?,
166
+ attribute shape-rendering {
167
+ "auto"
168
+ | "optimizeSpeed"
169
+ | "crispEdges"
170
+ | "geometricPrecision"
171
+ | "inherit"
172
+ }?,
173
+ attribute text-rendering {
174
+ "auto"
175
+ | "optimizeSpeed"
176
+ | "optimizeLegibility"
177
+ | "geometricPrecision"
178
+ | "inherit"
179
+ }?,
180
+ attribute buffered-rendering {
181
+ "auto" | "dynamic" | "static" | "inherit"
182
+ }?)
183
+ & (attribute viewport-fill { "none" | rfc-color }?,
184
+ attribute viewport-fill-opacity { "inherit" | xsd:string }?)),
185
+ text
186
+ }
187
+
188
+ svgTitle =
189
+ element title {
190
+ (attribute id { xsd:NCName }
191
+ | attribute xml:id { xsd:NCName })?,
192
+ attribute xml:base { xsd:anyURI | xsd:string }?,
193
+ attribute xml:lang { xsd:language? }?,
194
+ attribute class { xsd:NMTOKENS }?,
195
+ attribute role { xsd:string }?,
196
+ attribute rel { xsd:string }?,
197
+ attribute rev { xsd:string }?,
198
+ attribute typeof { xsd:string }?,
199
+ attribute content { xsd:string }?,
200
+ attribute datatype { xsd:string }?,
201
+ attribute resource { xsd:string }?,
202
+ attribute about { xsd:string }?,
203
+ attribute property { xsd:string }?,
204
+ attribute xml:space { "default" | "preserve" }?,
205
+ ((attribute display {
206
+ "inline"
207
+ | "block"
208
+ | "list-item"
209
+ | "run-in"
210
+ | "compact"
211
+ | "marker"
212
+ | "table"
213
+ | "inline-table"
214
+ | "table-row-group"
215
+ | "table-header-group"
216
+ | "table-footer-group"
217
+ | "table-row"
218
+ | "table-column-group"
219
+ | "table-column"
220
+ | "table-cell"
221
+ | "table-caption"
222
+ | "none"
223
+ | "inherit"
224
+ }?,
225
+ attribute visibility { "visible" | "hidden" | "collapse" | "inherit" }?,
226
+ attribute image-rendering {
227
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
228
+ }?,
229
+ attribute shape-rendering {
230
+ "auto"
231
+ | "optimizeSpeed"
232
+ | "crispEdges"
233
+ | "geometricPrecision"
234
+ | "inherit"
235
+ }?,
236
+ attribute text-rendering {
237
+ "auto"
238
+ | "optimizeSpeed"
239
+ | "optimizeLegibility"
240
+ | "geometricPrecision"
241
+ | "inherit"
242
+ }?,
243
+ attribute buffered-rendering {
244
+ "auto" | "dynamic" | "static" | "inherit"
245
+ }?)
246
+ & (attribute viewport-fill { "none" | rfc-color }?,
247
+ attribute viewport-fill-opacity { "inherit" | xsd:string }?)),
248
+ text
249
+ }
250
+
251
+ path =
252
+ element path {
253
+ (attribute id { xsd:NCName }
254
+ | attribute xml:id { xsd:NCName })?,
255
+ attribute xml:base { xsd:anyURI | xsd:string }?,
256
+ attribute xml:lang { xsd:language? }?,
257
+ attribute class { xsd:NMTOKENS }?,
258
+ attribute role { xsd:string }?,
259
+ attribute rel { xsd:string }?,
260
+ attribute rev { xsd:string }?,
261
+ attribute typeof { xsd:string }?,
262
+ attribute content { xsd:string }?,
263
+ attribute datatype { xsd:string }?,
264
+ attribute resource { xsd:string }?,
265
+ attribute about { xsd:string }?,
266
+ attribute property { xsd:string }?,
267
+ attribute xml:space { "default" | "preserve" }?,
268
+ attribute transform { xsd:string | "none" }?,
269
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
270
+ attribute stroke-opacity { "inherit" | xsd:string }?)
271
+ & (attribute fill { "none" | rfc-color }?,
272
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
273
+ attribute stroke { rfc-color }?,
274
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
275
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
276
+ attribute stroke-linecap {
277
+ "butt" | "round" | "square" | "inherit"
278
+ }?,
279
+ attribute stroke-linejoin {
280
+ "miter" | "round" | "bevel" | "inherit"
281
+ }?,
282
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
283
+ attribute stroke-width { "inherit" | xsd:string }?,
284
+ attribute color { rfc-color }?,
285
+ attribute color-rendering {
286
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
287
+ }?)
288
+ & attribute vector-effect {
289
+ "none" | "non-scaling-stroke" | "inherit"
290
+ }?
291
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
292
+ attribute unicode-bidi {
293
+ "normal" | "embed" | "bidi-override" | "inherit"
294
+ }?)
295
+ & (attribute solid-color { rfc-color }?,
296
+ attribute solid-opacity { "inherit" | xsd:string }?)
297
+ & (attribute display-align {
298
+ "auto" | "before" | "center" | "after" | "inherit"
299
+ }?,
300
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
301
+ & (attribute stop-color { rfc-color }?,
302
+ attribute stop-opacity { "inherit" | xsd:string }?)
303
+ & (attribute font-family { "serif" | "sans-serif" | "monospace"
304
+ | "inherit" }?,
305
+ attribute font-size { "inherit" | xsd:string }?,
306
+ attribute font-style {
307
+ "normal" | "italic" | "oblique" | "inherit"
308
+ }?,
309
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
310
+ attribute font-weight {
311
+ "normal"
312
+ | "bold"
313
+ | "bolder"
314
+ | "lighter"
315
+ | "inherit"
316
+ }?,
317
+ attribute text-anchor {
318
+ "start" | "middle" | "end" | "inherit"
319
+ }?,
320
+ attribute text-align {
321
+ "start" | "center" | "end" | "inherit"
322
+ }?)),
323
+ attribute d { xsd:string }?,
324
+ attribute pathLength { xsd:string }?,
325
+ (desc
326
+ | svgTitle)*
327
+ }
328
+
329
+ rect =
330
+ element rect {
331
+ (attribute id { xsd:NCName }
332
+ | attribute xml:id { xsd:NCName })?,
333
+ attribute xml:base { xsd:anyURI | xsd:string }?,
334
+ attribute xml:lang { xsd:language? }?,
335
+ attribute class { xsd:NMTOKENS }?,
336
+ attribute role { xsd:string }?,
337
+ attribute rel { xsd:string }?,
338
+ attribute rev { xsd:string }?,
339
+ attribute typeof { xsd:string }?,
340
+ attribute content { xsd:string }?,
341
+ attribute datatype { xsd:string }?,
342
+ attribute resource { xsd:string }?,
343
+ attribute about { xsd:string }?,
344
+ attribute property { xsd:string }?,
345
+ attribute xml:space { "default" | "preserve" }?,
346
+ attribute transform { xsd:string | "none" }?,
347
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
348
+ attribute stroke-opacity { "inherit" | xsd:string }?)
349
+ & (attribute fill { "none" | rfc-color }?,
350
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
351
+ attribute stroke { rfc-color }?,
352
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
353
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
354
+ attribute stroke-linecap {
355
+ "butt" | "round" | "square" | "inherit"
356
+ }?,
357
+ attribute stroke-linejoin {
358
+ "miter" | "round" | "bevel" | "inherit"
359
+ }?,
360
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
361
+ attribute stroke-width { "inherit" | xsd:string }?,
362
+ attribute color { rfc-color }?,
363
+ attribute color-rendering {
364
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
365
+ }?)
366
+ & attribute vector-effect {
367
+ "none" | "non-scaling-stroke" | "inherit"
368
+ }?
369
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
370
+ attribute unicode-bidi {
371
+ "normal" | "embed" | "bidi-override" | "inherit"
372
+ }?)
373
+ & (attribute solid-color { rfc-color }?,
374
+ attribute solid-opacity { "inherit" | xsd:string }?)
375
+ & (attribute display-align {
376
+ "auto" | "before" | "center" | "after" | "inherit"
377
+ }?,
378
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
379
+ & (attribute stop-color { rfc-color }?,
380
+ attribute stop-opacity { "inherit" | xsd:string }?)
381
+ & (attribute font-family { "serif" | "sans-serif" | "monospace"
382
+ | "inherit" }?,
383
+ attribute font-size { "inherit" | xsd:string }?,
384
+ attribute font-style {
385
+ "normal" | "italic" | "oblique" | "inherit"
386
+ }?,
387
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
388
+ attribute font-weight {
389
+ "normal"
390
+ | "bold"
391
+ | "bolder"
392
+ | "lighter"
393
+ | "inherit"
394
+ }?,
395
+ attribute text-anchor {
396
+ "start" | "middle" | "end" | "inherit"
397
+ }?,
398
+ attribute text-align {
399
+ "start" | "center" | "end" | "inherit"
400
+ }?)),
401
+ attribute x { xsd:string }?,
402
+ attribute y { xsd:string }?,
403
+ attribute width { xsd:string }?,
404
+ attribute height { xsd:string }?,
405
+ attribute rx { xsd:string }?,
406
+ attribute ry { xsd:string }?,
407
+ (desc
408
+ | svgTitle)*
409
+ }
410
+
411
+ circle =
412
+ element circle {
413
+ (attribute id { xsd:NCName }
414
+ | attribute xml:id { xsd:NCName })?,
415
+ attribute xml:base { xsd:anyURI | xsd:string }?,
416
+ attribute xml:lang { xsd:language? }?,
417
+ attribute class { xsd:NMTOKENS }?,
418
+ attribute role { xsd:string }?,
419
+ attribute rel { xsd:string }?,
420
+ attribute rev { xsd:string }?,
421
+ attribute typeof { xsd:string }?,
422
+ attribute content { xsd:string }?,
423
+ attribute datatype { xsd:string }?,
424
+ attribute resource { xsd:string }?,
425
+ attribute about { xsd:string }?,
426
+ attribute property { xsd:string }?,
427
+ attribute xml:space { "default" | "preserve" }?,
428
+ attribute transform { xsd:string | "none" }?,
429
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
430
+ attribute stroke-opacity { "inherit" | xsd:string }?)
431
+ & (attribute fill { "none" | rfc-color }?,
432
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
433
+ attribute stroke { rfc-color }?,
434
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
435
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
436
+ attribute stroke-linecap {
437
+ "butt" | "round" | "square" | "inherit"
438
+ }?,
439
+ attribute stroke-linejoin {
440
+ "miter" | "round" | "bevel" | "inherit"
441
+ }?,
442
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
443
+ attribute stroke-width { "inherit" | xsd:string }?,
444
+ attribute color { rfc-color }?,
445
+ attribute color-rendering {
446
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
447
+ }?)
448
+ & attribute vector-effect {
449
+ "none" | "non-scaling-stroke" | "inherit"
450
+ }?
451
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
452
+ attribute unicode-bidi {
453
+ "normal" | "embed" | "bidi-override" | "inherit"
454
+ }?)
455
+ & (attribute solid-color { rfc-color }?,
456
+ attribute solid-opacity { "inherit" | xsd:string }?)
457
+ & (attribute display-align {
458
+ "auto" | "before" | "center" | "after" | "inherit"
459
+ }?,
460
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
461
+ & (attribute stop-color { rfc-color }?,
462
+ attribute stop-opacity { "inherit" | xsd:string }?)
463
+ & (attribute font-family { "serif" | "sans-serif" | "monospace"
464
+ | "inherit" }?,
465
+ attribute font-size { "inherit" | xsd:string }?,
466
+ attribute font-style {
467
+ "normal" | "italic" | "oblique" | "inherit"
468
+ }?,
469
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
470
+ attribute font-weight {
471
+ "normal"
472
+ | "bold"
473
+ | "bolder"
474
+ | "lighter"
475
+ | "inherit"
476
+ }?,
477
+ attribute text-anchor {
478
+ "start" | "middle" | "end" | "inherit"
479
+ }?,
480
+ attribute text-align {
481
+ "start" | "center" | "end" | "inherit"
482
+ }?)),
483
+ attribute cx { xsd:string }?,
484
+ attribute cy { xsd:string }?,
485
+ attribute r { xsd:string }?,
486
+ (desc
487
+ | svgTitle)*
488
+ }
489
+
490
+ line =
491
+ element line {
492
+ (attribute id { xsd:NCName }
493
+ | attribute xml:id { xsd:NCName })?,
494
+ attribute xml:base { xsd:anyURI | xsd:string }?,
495
+ attribute xml:lang { xsd:language? }?,
496
+ attribute class { xsd:NMTOKENS }?,
497
+ attribute role { xsd:string }?,
498
+ attribute rel { xsd:string }?,
499
+ attribute rev { xsd:string }?,
500
+ attribute typeof { xsd:string }?,
501
+ attribute content { xsd:string }?,
502
+ attribute datatype { xsd:string }?,
503
+ attribute resource { xsd:string }?,
504
+ attribute about { xsd:string }?,
505
+ attribute property { xsd:string }?,
506
+ attribute xml:space { "default" | "preserve" }?,
507
+ attribute transform { xsd:string | "none" }?,
508
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
509
+ attribute stroke-opacity { "inherit" | xsd:string }?)
510
+ & (attribute fill { "none" | rfc-color }?,
511
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
512
+ attribute stroke { rfc-color }?,
513
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
514
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
515
+ attribute stroke-linecap {
516
+ "butt" | "round" | "square" | "inherit"
517
+ }?,
518
+ attribute stroke-linejoin {
519
+ "miter" | "round" | "bevel" | "inherit"
520
+ }?,
521
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
522
+ attribute stroke-width { "inherit" | xsd:string }?,
523
+ attribute color { rfc-color }?,
524
+ attribute color-rendering {
525
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
526
+ }?)
527
+ & attribute vector-effect {
528
+ "none" | "non-scaling-stroke" | "inherit"
529
+ }?
530
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
531
+ attribute unicode-bidi {
532
+ "normal" | "embed" | "bidi-override" | "inherit"
533
+ }?)
534
+ & (attribute solid-color { rfc-color }?,
535
+ attribute solid-opacity { "inherit" | xsd:string }?)
536
+ & (attribute display-align {
537
+ "auto" | "before" | "center" | "after" | "inherit"
538
+ }?,
539
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
540
+ & (attribute stop-color { rfc-color }?,
541
+ attribute stop-opacity { "inherit" | xsd:string }?)
542
+ & (attribute font-family { "serif" | "sans-serif" | "monospace"
543
+ | "inherit" }?,
544
+ attribute font-size { "inherit" | xsd:string }?,
545
+ attribute font-style {
546
+ "normal" | "italic" | "oblique" | "inherit"
547
+ }?,
548
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
549
+ attribute font-weight {
550
+ "normal"
551
+ | "bold"
552
+ | "bolder"
553
+ | "lighter"
554
+ | "inherit"
555
+ }?,
556
+ attribute text-anchor {
557
+ "start" | "middle" | "end" | "inherit"
558
+ }?,
559
+ attribute text-align {
560
+ "start" | "center" | "end" | "inherit"
561
+ }?)),
562
+ attribute x1 { xsd:string }?,
563
+ attribute y1 { xsd:string }?,
564
+ attribute x2 { xsd:string }?,
565
+ attribute y2 { xsd:string }?,
566
+ (desc
567
+ | svgTitle)*
568
+ }
569
+
570
+ ellipse =
571
+ element ellipse {
572
+ (attribute id { xsd:NCName }
573
+ | attribute xml:id { xsd:NCName })?,
574
+ attribute xml:base { xsd:anyURI | xsd:string }?,
575
+ attribute xml:lang { xsd:language? }?,
576
+ attribute class { xsd:NMTOKENS }?,
577
+ attribute role { xsd:string }?,
578
+ attribute rel { xsd:string }?,
579
+ attribute rev { xsd:string }?,
580
+ attribute typeof { xsd:string }?,
581
+ attribute content { xsd:string }?,
582
+ attribute datatype { xsd:string }?,
583
+ attribute resource { xsd:string }?,
584
+ attribute about { xsd:string }?,
585
+ attribute property { xsd:string }?,
586
+ attribute xml:space { "default" | "preserve" }?,
587
+ attribute transform { xsd:string | "none" }?,
588
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
589
+ attribute stroke-opacity { "inherit" | xsd:string }?)
590
+ & (attribute fill { "none" | rfc-color }?,
591
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
592
+ attribute stroke { rfc-color }?,
593
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
594
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
595
+ attribute stroke-linecap {
596
+ "butt" | "round" | "square" | "inherit"
597
+ }?,
598
+ attribute stroke-linejoin {
599
+ "miter" | "round" | "bevel" | "inherit"
600
+ }?,
601
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
602
+ attribute stroke-width { "inherit" | xsd:string }?,
603
+ attribute color { rfc-color }?,
604
+ attribute color-rendering {
605
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
606
+ }?)
607
+ & attribute vector-effect {
608
+ "none" | "non-scaling-stroke" | "inherit"
609
+ }?
610
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
611
+ attribute unicode-bidi {
612
+ "normal" | "embed" | "bidi-override" | "inherit"
613
+ }?)
614
+ & (attribute solid-color { rfc-color }?,
615
+ attribute solid-opacity { "inherit" | xsd:string }?)
616
+ & (attribute display-align {
617
+ "auto" | "before" | "center" | "after" | "inherit"
618
+ }?,
619
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
620
+ & (attribute stop-color { rfc-color }?,
621
+ attribute stop-opacity { "inherit" | xsd:string }?)
622
+ & (attribute font-family { "serif" | "sans-serif" | "monospace"
623
+ | "inherit" }?,
624
+ attribute font-size { "inherit" | xsd:string }?,
625
+ attribute font-style {
626
+ "normal" | "italic" | "oblique" | "inherit"
627
+ }?,
628
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
629
+ attribute font-weight {
630
+ "normal"
631
+ | "bold"
632
+ | "bolder"
633
+ | "lighter"
634
+ | "inherit"
635
+ }?,
636
+ attribute text-anchor {
637
+ "start" | "middle" | "end" | "inherit"
638
+ }?,
639
+ attribute text-align {
640
+ "start" | "center" | "end" | "inherit"
641
+ }?)),
642
+ attribute rx { xsd:string }?,
643
+ attribute ry { xsd:string }?,
644
+ attribute cx { xsd:string }?,
645
+ attribute cy { xsd:string }?,
646
+ (desc
647
+ | svgTitle)*
648
+ }
649
+
650
+ polyline =
651
+ element polyline {
652
+ (attribute id { xsd:NCName }
653
+ | attribute xml:id { xsd:NCName })?,
654
+ attribute xml:base { xsd:anyURI | xsd:string }?,
655
+ attribute xml:lang { xsd:language? }?,
656
+ attribute class { xsd:NMTOKENS }?,
657
+ attribute role { xsd:string }?,
658
+ attribute rel { xsd:string }?,
659
+ attribute rev { xsd:string }?,
660
+ attribute typeof { xsd:string }?,
661
+ attribute content { xsd:string }?,
662
+ attribute datatype { xsd:string }?,
663
+ attribute resource { xsd:string }?,
664
+ attribute about { xsd:string }?,
665
+ attribute property { xsd:string }?,
666
+ attribute xml:space { "default" | "preserve" }?,
667
+ attribute transform { xsd:string | "none" }?,
668
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
669
+ attribute stroke-opacity { "inherit" | xsd:string }?)
670
+ & (attribute fill { "none" | rfc-color }?,
671
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
672
+ attribute stroke { rfc-color }?,
673
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
674
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
675
+ attribute stroke-linecap {
676
+ "butt" | "round" | "square" | "inherit"
677
+ }?,
678
+ attribute stroke-linejoin {
679
+ "miter" | "round" | "bevel" | "inherit"
680
+ }?,
681
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
682
+ attribute stroke-width { "inherit" | xsd:string }?,
683
+ attribute color { rfc-color }?,
684
+ attribute color-rendering {
685
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
686
+ }?)
687
+ & attribute vector-effect {
688
+ "none" | "non-scaling-stroke" | "inherit"
689
+ }?
690
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
691
+ attribute unicode-bidi {
692
+ "normal" | "embed" | "bidi-override" | "inherit"
693
+ }?)
694
+ & (attribute solid-color { rfc-color }?,
695
+ attribute solid-opacity { "inherit" | xsd:string }?)
696
+ & (attribute display-align {
697
+ "auto" | "before" | "center" | "after" | "inherit"
698
+ }?,
699
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
700
+ & (attribute stop-color { rfc-color }?,
701
+ attribute stop-opacity { "inherit" | xsd:string }?)
702
+ & (attribute font-family { "serif" | "sans-serif" | "monospace"
703
+ | "inherit" }?,
704
+ attribute font-size { "inherit" | xsd:string }?,
705
+ attribute font-style {
706
+ "normal" | "italic" | "oblique" | "inherit"
707
+ }?,
708
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
709
+ attribute font-weight {
710
+ "normal"
711
+ | "bold"
712
+ | "bolder"
713
+ | "lighter"
714
+ | "inherit"
715
+ }?,
716
+ attribute text-anchor {
717
+ "start" | "middle" | "end" | "inherit"
718
+ }?,
719
+ attribute text-align {
720
+ "start" | "center" | "end" | "inherit"
721
+ }?)),
722
+ attribute points { xsd:string }?,
723
+ (desc
724
+ | svgTitle)*
725
+ }
726
+
727
+ polygon =
728
+ element polygon {
729
+ (attribute id { xsd:NCName }
730
+ | attribute xml:id { xsd:NCName })?,
731
+ attribute xml:base { xsd:anyURI | xsd:string }?,
732
+ attribute xml:lang { xsd:language? }?,
733
+ attribute class { xsd:NMTOKENS }?,
734
+ attribute role { xsd:string }?,
735
+ attribute rel { xsd:string }?,
736
+ attribute rev { xsd:string }?,
737
+ attribute typeof { xsd:string }?,
738
+ attribute content { xsd:string }?,
739
+ attribute datatype { xsd:string }?,
740
+ attribute resource { xsd:string }?,
741
+ attribute about { xsd:string }?,
742
+ attribute property { xsd:string }?,
743
+ attribute xml:space { "default" | "preserve" }?,
744
+ attribute transform { xsd:string | "none" }?,
745
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
746
+ attribute stroke-opacity { "inherit" | xsd:string }?)
747
+ & (attribute fill { "none" | rfc-color }?,
748
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
749
+ attribute stroke { rfc-color }?,
750
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
751
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
752
+ attribute stroke-linecap {
753
+ "butt" | "round" | "square" | "inherit"
754
+ }?,
755
+ attribute stroke-linejoin {
756
+ "miter" | "round" | "bevel" | "inherit"
757
+ }?,
758
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
759
+ attribute stroke-width { "inherit" | xsd:string }?,
760
+ attribute color { rfc-color }?,
761
+ attribute color-rendering {
762
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
763
+ }?)
764
+ & attribute vector-effect {
765
+ "none" | "non-scaling-stroke" | "inherit"
766
+ }?
767
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
768
+ attribute unicode-bidi {
769
+ "normal" | "embed" | "bidi-override" | "inherit"
770
+ }?)
771
+ & (attribute solid-color { rfc-color }?,
772
+ attribute solid-opacity { "inherit" | xsd:string }?)
773
+ & (attribute display-align {
774
+ "auto" | "before" | "center" | "after" | "inherit"
775
+ }?,
776
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
777
+ & (attribute stop-color { rfc-color }?,
778
+ attribute stop-opacity { "inherit" | xsd:string }?)
779
+ & (attribute font-family { "serif" | "sans-serif" | "monospace"
780
+ | "inherit" }?,
781
+ attribute font-size { "inherit" | xsd:string }?,
782
+ attribute font-style {
783
+ "normal" | "italic" | "oblique" | "inherit"
784
+ }?,
785
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
786
+ attribute font-weight {
787
+ "normal"
788
+ | "bold"
789
+ | "bolder"
790
+ | "lighter"
791
+ | "inherit"
792
+ }?,
793
+ attribute text-anchor {
794
+ "start" | "middle" | "end" | "inherit"
795
+ }?,
796
+ attribute text-align {
797
+ "start" | "center" | "end" | "inherit"
798
+ }?)),
799
+ attribute points { xsd:string }?,
800
+ (desc
801
+ | svgTitle)*
802
+ }
803
+
804
+ solidColor =
805
+ element solidColor {
806
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
807
+ attribute stroke-opacity { "inherit" | xsd:string }?)
808
+ & (attribute fill { "none" | rfc-color }?,
809
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
810
+ attribute stroke { rfc-color }?,
811
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
812
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
813
+ attribute stroke-linecap {
814
+ "butt" | "round" | "square" | "inherit"
815
+ }?,
816
+ attribute stroke-linejoin {
817
+ "miter" | "round" | "bevel" | "inherit"
818
+ }?,
819
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
820
+ attribute stroke-width { "inherit" | xsd:string }?,
821
+ attribute color { rfc-color }?,
822
+ attribute color-rendering {
823
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
824
+ }?)
825
+ & attribute vector-effect {
826
+ "none" | "non-scaling-stroke" | "inherit"
827
+ }?
828
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
829
+ attribute unicode-bidi {
830
+ "normal" | "embed" | "bidi-override" | "inherit"
831
+ }?)
832
+ & (attribute solid-color { rfc-color }?,
833
+ attribute solid-opacity { "inherit" | xsd:string }?)
834
+ & (attribute display-align {
835
+ "auto" | "before" | "center" | "after" | "inherit"
836
+ }?,
837
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
838
+ & (attribute stop-color { rfc-color }?,
839
+ attribute stop-opacity { "inherit" | xsd:string }?)
840
+ & (attribute font-family { "serif" | "sans-serif" | "monospace"
841
+ | "inherit" }?,
842
+ attribute font-size { "inherit" | xsd:string }?,
843
+ attribute font-style {
844
+ "normal" | "italic" | "oblique" | "inherit"
845
+ }?,
846
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
847
+ attribute font-weight {
848
+ "normal"
849
+ | "bold"
850
+ | "bolder"
851
+ | "lighter"
852
+ | "inherit"
853
+ }?,
854
+ attribute text-anchor {
855
+ "start" | "middle" | "end" | "inherit"
856
+ }?,
857
+ attribute text-align {
858
+ "start" | "center" | "end" | "inherit"
859
+ }?)),
860
+ (attribute id { xsd:NCName }
861
+ | attribute xml:id { xsd:NCName })?,
862
+ attribute xml:base { xsd:anyURI | xsd:string }?,
863
+ attribute xml:lang { xsd:language? }?,
864
+ attribute class { xsd:NMTOKENS }?,
865
+ attribute role { xsd:string }?,
866
+ attribute rel { xsd:string }?,
867
+ attribute rev { xsd:string }?,
868
+ attribute typeof { xsd:string }?,
869
+ attribute content { xsd:string }?,
870
+ attribute datatype { xsd:string }?,
871
+ attribute resource { xsd:string }?,
872
+ attribute about { xsd:string }?,
873
+ attribute property { xsd:string }?,
874
+ attribute xml:space { "default" | "preserve" }?,
875
+ (desc
876
+ | svgTitle)*
877
+ }
878
+
879
+ textArea =
880
+ element textArea {
881
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
882
+ attribute stroke-opacity { "inherit" | xsd:string }?)
883
+ & (attribute fill { "none" | rfc-color }?,
884
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
885
+ attribute stroke { rfc-color }?,
886
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
887
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
888
+ attribute stroke-linecap {
889
+ "butt" | "round" | "square" | "inherit"
890
+ }?,
891
+ attribute stroke-linejoin {
892
+ "miter" | "round" | "bevel" | "inherit"
893
+ }?,
894
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
895
+ attribute stroke-width { "inherit" | xsd:string }?,
896
+ attribute color { rfc-color }?,
897
+ attribute color-rendering {
898
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
899
+ }?)
900
+ & attribute vector-effect {
901
+ "none" | "non-scaling-stroke" | "inherit"
902
+ }?
903
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
904
+ attribute unicode-bidi {
905
+ "normal" | "embed" | "bidi-override" | "inherit"
906
+ }?)
907
+ & (attribute solid-color { rfc-color }?,
908
+ attribute solid-opacity { "inherit" | xsd:string }?)
909
+ & (attribute display-align {
910
+ "auto" | "before" | "center" | "after" | "inherit"
911
+ }?,
912
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
913
+ & (attribute stop-color { rfc-color }?,
914
+ attribute stop-opacity { "inherit" | xsd:string }?)
915
+ & (attribute font-family { "serif" | "sans-serif" | "monospace"
916
+ | "inherit" }?,
917
+ attribute font-size { "inherit" | xsd:string }?,
918
+ attribute font-style {
919
+ "normal" | "italic" | "oblique" | "inherit"
920
+ }?,
921
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
922
+ attribute font-weight {
923
+ "normal"
924
+ | "bold"
925
+ | "bolder"
926
+ | "lighter"
927
+ | "inherit"
928
+ }?,
929
+ attribute text-anchor {
930
+ "start" | "middle" | "end" | "inherit"
931
+ }?,
932
+ attribute text-align {
933
+ "start" | "center" | "end" | "inherit"
934
+ }?)),
935
+ (attribute id { xsd:NCName }
936
+ | attribute xml:id { xsd:NCName })?,
937
+ attribute xml:base { xsd:anyURI | xsd:string }?,
938
+ attribute xml:lang { xsd:language? }?,
939
+ attribute class { xsd:NMTOKENS }?,
940
+ attribute role { xsd:string }?,
941
+ attribute rel { xsd:string }?,
942
+ attribute rev { xsd:string }?,
943
+ attribute typeof { xsd:string }?,
944
+ attribute content { xsd:string }?,
945
+ attribute datatype { xsd:string }?,
946
+ attribute resource { xsd:string }?,
947
+ attribute about { xsd:string }?,
948
+ attribute property { xsd:string }?,
949
+ attribute xml:space { "default" | "preserve" }?,
950
+ attribute transform { xsd:string | "none" }?,
951
+ attribute x { xsd:string }?,
952
+ attribute y { xsd:string }?,
953
+ attribute width { xsd:string | "auto" }?,
954
+ attribute height { xsd:string | "auto" }?,
955
+ (tspan
956
+ | desc
957
+ | svgTitle
958
+ | tspan_2
959
+ | text
960
+ | a_2)+
961
+ }
962
+
963
+ \text =
964
+ element text {
965
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
966
+ attribute stroke-opacity { "inherit" | xsd:string }?)
967
+ & (attribute fill { "none" | rfc-color }?,
968
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
969
+ attribute stroke { rfc-color }?,
970
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
971
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
972
+ attribute stroke-linecap {
973
+ "butt" | "round" | "square" | "inherit"
974
+ }?,
975
+ attribute stroke-linejoin {
976
+ "miter" | "round" | "bevel" | "inherit"
977
+ }?,
978
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
979
+ attribute stroke-width { "inherit" | xsd:string }?,
980
+ attribute color { rfc-color }?,
981
+ attribute color-rendering {
982
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
983
+ }?)
984
+ & attribute vector-effect {
985
+ "none" | "non-scaling-stroke" | "inherit"
986
+ }?
987
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
988
+ attribute unicode-bidi {
989
+ "normal" | "embed" | "bidi-override" | "inherit"
990
+ }?)
991
+ & (attribute solid-color { rfc-color }?,
992
+ attribute solid-opacity { "inherit" | xsd:string }?)
993
+ & (attribute display-align {
994
+ "auto" | "before" | "center" | "after" | "inherit"
995
+ }?,
996
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
997
+ & (attribute stop-color { rfc-color }?,
998
+ attribute stop-opacity { "inherit" | xsd:string }?)
999
+ & (attribute font-family { "serif" | "sans-serif" | "monospace"
1000
+ | "inherit" }?,
1001
+ attribute font-size { "inherit" | xsd:string }?,
1002
+ attribute font-style {
1003
+ "normal" | "italic" | "oblique" | "inherit"
1004
+ }?,
1005
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
1006
+ attribute font-weight {
1007
+ "normal"
1008
+ | "bold"
1009
+ | "bolder"
1010
+ | "lighter"
1011
+ | "inherit"
1012
+ }?,
1013
+ attribute text-anchor {
1014
+ "start" | "middle" | "end" | "inherit"
1015
+ }?,
1016
+ attribute text-align {
1017
+ "start" | "center" | "end" | "inherit"
1018
+ }?)),
1019
+ (attribute id { xsd:NCName }
1020
+ | attribute xml:id { xsd:NCName })?,
1021
+ attribute xml:base { xsd:anyURI | xsd:string }?,
1022
+ attribute xml:lang { xsd:language? }?,
1023
+ attribute class { xsd:NMTOKENS }?,
1024
+ attribute role { xsd:string }?,
1025
+ attribute rel { xsd:string }?,
1026
+ attribute rev { xsd:string }?,
1027
+ attribute typeof { xsd:string }?,
1028
+ attribute content { xsd:string }?,
1029
+ attribute datatype { xsd:string }?,
1030
+ attribute resource { xsd:string }?,
1031
+ attribute about { xsd:string }?,
1032
+ attribute property { xsd:string }?,
1033
+ attribute xml:space { "default" | "preserve" }?,
1034
+ attribute transform { xsd:string | "none" }?,
1035
+ attribute x { xsd:string }?,
1036
+ attribute y { xsd:string }?,
1037
+ attribute rotate { xsd:string }?,
1038
+ (desc
1039
+ | svgTitle
1040
+ | tspan_2
1041
+ | text
1042
+ | a_2)+
1043
+ }
1044
+
1045
+ g =
1046
+ element g {
1047
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
1048
+ attribute stroke-opacity { "inherit" | xsd:string }?)
1049
+ & (attribute fill { "none" | rfc-color }?,
1050
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
1051
+ attribute stroke { rfc-color }?,
1052
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
1053
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
1054
+ attribute stroke-linecap {
1055
+ "butt" | "round" | "square" | "inherit"
1056
+ }?,
1057
+ attribute stroke-linejoin {
1058
+ "miter" | "round" | "bevel" | "inherit"
1059
+ }?,
1060
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
1061
+ attribute stroke-width { "inherit" | xsd:string }?,
1062
+ attribute color { rfc-color }?,
1063
+ attribute color-rendering {
1064
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
1065
+ }?)
1066
+ & attribute vector-effect {
1067
+ "none" | "non-scaling-stroke" | "inherit"
1068
+ }?
1069
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
1070
+ attribute unicode-bidi {
1071
+ "normal" | "embed" | "bidi-override" | "inherit"
1072
+ }?)
1073
+ & (attribute solid-color { rfc-color }?,
1074
+ attribute solid-opacity { "inherit" | xsd:string }?)
1075
+ & (attribute display-align {
1076
+ "auto" | "before" | "center" | "after" | "inherit"
1077
+ }?,
1078
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
1079
+ & (attribute stop-color { rfc-color }?,
1080
+ attribute stop-opacity { "inherit" | xsd:string }?)
1081
+ & (attribute font-family { "serif" | "sans-serif" | "monospace"
1082
+ | "inherit" }?,
1083
+ attribute font-size { "inherit" | xsd:string }?,
1084
+ attribute font-style {
1085
+ "normal" | "italic" | "oblique" | "inherit"
1086
+ }?,
1087
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
1088
+ attribute font-weight {
1089
+ "normal"
1090
+ | "bold"
1091
+ | "bolder"
1092
+ | "lighter"
1093
+ | "inherit"
1094
+ }?,
1095
+ attribute text-anchor {
1096
+ "start" | "middle" | "end" | "inherit"
1097
+ }?,
1098
+ attribute text-align {
1099
+ "start" | "center" | "end" | "inherit"
1100
+ }?)),
1101
+ (attribute id { xsd:NCName }
1102
+ | attribute xml:id { xsd:NCName })?,
1103
+ attribute xml:base { xsd:anyURI | xsd:string }?,
1104
+ attribute xml:lang { xsd:language? }?,
1105
+ attribute class { xsd:NMTOKENS }?,
1106
+ attribute role { xsd:string }?,
1107
+ attribute rel { xsd:string }?,
1108
+ attribute rev { xsd:string }?,
1109
+ attribute typeof { xsd:string }?,
1110
+ attribute content { xsd:string }?,
1111
+ attribute datatype { xsd:string }?,
1112
+ attribute resource { xsd:string }?,
1113
+ attribute about { xsd:string }?,
1114
+ attribute property { xsd:string }?,
1115
+ attribute xml:space { "default" | "preserve" }?,
1116
+ attribute transform { xsd:string | "none" }?,
1117
+ (desc
1118
+ | svgTitle
1119
+ | path
1120
+ | rect
1121
+ | circle
1122
+ | line
1123
+ | ellipse
1124
+ | polyline
1125
+ | polygon
1126
+ | solidColor
1127
+ | textArea
1128
+ | \text
1129
+ | g
1130
+ | defs
1131
+ | use
1132
+ | a)*
1133
+ }
1134
+
1135
+ defs =
1136
+ element defs {
1137
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
1138
+ attribute stroke-opacity { "inherit" | xsd:string }?)
1139
+ & (attribute fill { "none" | rfc-color }?,
1140
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
1141
+ attribute stroke { rfc-color }?,
1142
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
1143
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
1144
+ attribute stroke-linecap {
1145
+ "butt" | "round" | "square" | "inherit"
1146
+ }?,
1147
+ attribute stroke-linejoin {
1148
+ "miter" | "round" | "bevel" | "inherit"
1149
+ }?,
1150
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
1151
+ attribute stroke-width { "inherit" | xsd:string }?,
1152
+ attribute color { rfc-color }?,
1153
+ attribute color-rendering {
1154
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
1155
+ }?)
1156
+ & attribute vector-effect {
1157
+ "none" | "non-scaling-stroke" | "inherit"
1158
+ }?
1159
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
1160
+ attribute unicode-bidi {
1161
+ "normal" | "embed" | "bidi-override" | "inherit"
1162
+ }?)
1163
+ & (attribute solid-color { rfc-color }?,
1164
+ attribute solid-opacity { "inherit" | xsd:string }?)
1165
+ & (attribute display-align {
1166
+ "auto" | "before" | "center" | "after" | "inherit"
1167
+ }?,
1168
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
1169
+ & (attribute stop-color { rfc-color }?,
1170
+ attribute stop-opacity { "inherit" | xsd:string }?)
1171
+ & (attribute font-family { "serif" | "sans-serif" | "monospace"
1172
+ | "inherit" }?,
1173
+ attribute font-size { "inherit" | xsd:string }?,
1174
+ attribute font-style {
1175
+ "normal" | "italic" | "oblique" | "inherit"
1176
+ }?,
1177
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
1178
+ attribute font-weight {
1179
+ "normal"
1180
+ | "bold"
1181
+ | "bolder"
1182
+ | "lighter"
1183
+ | "inherit"
1184
+ }?,
1185
+ attribute text-anchor {
1186
+ "start" | "middle" | "end" | "inherit"
1187
+ }?,
1188
+ attribute text-align {
1189
+ "start" | "center" | "end" | "inherit"
1190
+ }?)),
1191
+ (attribute id { xsd:NCName }
1192
+ | attribute xml:id { xsd:NCName })?,
1193
+ attribute xml:base { xsd:anyURI | xsd:string }?,
1194
+ attribute xml:lang { xsd:language? }?,
1195
+ attribute class { xsd:NMTOKENS }?,
1196
+ attribute role { xsd:string }?,
1197
+ attribute rel { xsd:string }?,
1198
+ attribute rev { xsd:string }?,
1199
+ attribute typeof { xsd:string }?,
1200
+ attribute content { xsd:string }?,
1201
+ attribute datatype { xsd:string }?,
1202
+ attribute resource { xsd:string }?,
1203
+ attribute about { xsd:string }?,
1204
+ attribute property { xsd:string }?,
1205
+ attribute xml:space { "default" | "preserve" }?,
1206
+ (desc
1207
+ | svgTitle
1208
+ | path
1209
+ | rect
1210
+ | circle
1211
+ | line
1212
+ | ellipse
1213
+ | polyline
1214
+ | polygon
1215
+ | solidColor
1216
+ | textArea
1217
+ | \text
1218
+ | g
1219
+ | defs
1220
+ | use
1221
+ | a)*
1222
+ }
1223
+
1224
+ use =
1225
+ element use {
1226
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
1227
+ attribute stroke-opacity { "inherit" | xsd:string }?)
1228
+ & (attribute fill { "none" | rfc-color }?,
1229
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
1230
+ attribute stroke { rfc-color }?,
1231
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
1232
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
1233
+ attribute stroke-linecap {
1234
+ "butt" | "round" | "square" | "inherit"
1235
+ }?,
1236
+ attribute stroke-linejoin {
1237
+ "miter" | "round" | "bevel" | "inherit"
1238
+ }?,
1239
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
1240
+ attribute stroke-width { "inherit" | xsd:string }?,
1241
+ attribute color { rfc-color }?,
1242
+ attribute color-rendering {
1243
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
1244
+ }?)
1245
+ & attribute vector-effect {
1246
+ "none" | "non-scaling-stroke" | "inherit"
1247
+ }?
1248
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
1249
+ attribute unicode-bidi {
1250
+ "normal" | "embed" | "bidi-override" | "inherit"
1251
+ }?)
1252
+ & (attribute solid-color { rfc-color }?,
1253
+ attribute solid-opacity { "inherit" | xsd:string }?)
1254
+ & (attribute display-align {
1255
+ "auto" | "before" | "center" | "after" | "inherit"
1256
+ }?,
1257
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
1258
+ & (attribute stop-color { rfc-color }?,
1259
+ attribute stop-opacity { "inherit" | xsd:string }?)
1260
+ & (attribute font-family { "serif" | "sans-serif" | "monospace"
1261
+ | "inherit" }?,
1262
+ attribute font-size { "inherit" | xsd:string }?,
1263
+ attribute font-style {
1264
+ "normal" | "italic" | "oblique" | "inherit"
1265
+ }?,
1266
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
1267
+ attribute font-weight {
1268
+ "normal"
1269
+ | "bold"
1270
+ | "bolder"
1271
+ | "lighter"
1272
+ | "inherit"
1273
+ }?,
1274
+ attribute text-anchor {
1275
+ "start" | "middle" | "end" | "inherit"
1276
+ }?,
1277
+ attribute text-align {
1278
+ "start" | "center" | "end" | "inherit"
1279
+ }?)),
1280
+ (attribute id { xsd:NCName }
1281
+ | attribute xml:id { xsd:NCName })?,
1282
+ attribute xml:base { xsd:anyURI | xsd:string }?,
1283
+ attribute xml:lang { xsd:language? }?,
1284
+ attribute class { xsd:NMTOKENS }?,
1285
+ attribute role { xsd:string }?,
1286
+ attribute rel { xsd:string }?,
1287
+ attribute rev { xsd:string }?,
1288
+ attribute typeof { xsd:string }?,
1289
+ attribute content { xsd:string }?,
1290
+ attribute datatype { xsd:string }?,
1291
+ attribute resource { xsd:string }?,
1292
+ attribute about { xsd:string }?,
1293
+ attribute property { xsd:string }?,
1294
+ attribute xml:space { "default" | "preserve" }?,
1295
+ attribute transform { xsd:string | "none" }?,
1296
+ attribute xlink:show { "embed" }?,
1297
+ attribute xlink:actuate { "onLoad" }?,
1298
+ attribute xlink:type { "simple" }?,
1299
+ attribute xlink:role { xsd:anyURI | xsd:string }?,
1300
+ attribute xlink:arcrole { xsd:anyURI | xsd:string }?,
1301
+ attribute xlink:title { text }?,
1302
+ attribute xlink:href { xsd:anyURI | xsd:string }?,
1303
+ attribute x { xsd:string }?,
1304
+ attribute y { xsd:string }?,
1305
+ (desc
1306
+ | svgTitle)*
1307
+ }
1308
+
1309
+ a =
1310
+ element a {
1311
+ (attribute id { xsd:NCName }
1312
+ | attribute xml:id { xsd:NCName })?,
1313
+ attribute xml:base { xsd:anyURI | xsd:string }?,
1314
+ attribute xml:lang { xsd:language? }?,
1315
+ attribute class { xsd:NMTOKENS }?,
1316
+ attribute role { xsd:string }?,
1317
+ attribute rel { xsd:string }?,
1318
+ attribute rev { xsd:string }?,
1319
+ attribute typeof { xsd:string }?,
1320
+ attribute content { xsd:string }?,
1321
+ attribute datatype { xsd:string }?,
1322
+ attribute resource { xsd:string }?,
1323
+ attribute about { xsd:string }?,
1324
+ attribute property { xsd:string }?,
1325
+ attribute xml:space { "default" | "preserve" }?,
1326
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
1327
+ attribute stroke-opacity { "inherit" | xsd:string }?)
1328
+ & (attribute fill { "none" | rfc-color }?,
1329
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
1330
+ attribute stroke { rfc-color }?,
1331
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
1332
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
1333
+ attribute stroke-linecap {
1334
+ "butt" | "round" | "square" | "inherit"
1335
+ }?,
1336
+ attribute stroke-linejoin {
1337
+ "miter" | "round" | "bevel" | "inherit"
1338
+ }?,
1339
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
1340
+ attribute stroke-width { "inherit" | xsd:string }?,
1341
+ attribute color { rfc-color }?,
1342
+ attribute color-rendering {
1343
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
1344
+ }?)
1345
+ & attribute vector-effect {
1346
+ "none" | "non-scaling-stroke" | "inherit"
1347
+ }?
1348
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
1349
+ attribute unicode-bidi {
1350
+ "normal" | "embed" | "bidi-override" | "inherit"
1351
+ }?)
1352
+ & (attribute solid-color { rfc-color }?,
1353
+ attribute solid-opacity { "inherit" | xsd:string }?)
1354
+ & (attribute display-align {
1355
+ "auto" | "before" | "center" | "after" | "inherit"
1356
+ }?,
1357
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
1358
+ & (attribute stop-color { rfc-color }?,
1359
+ attribute stop-opacity { "inherit" | xsd:string }?)
1360
+ & (attribute font-family { "serif" | "sans-serif" | "monospace"
1361
+ | "inherit" }?,
1362
+ attribute font-size { "inherit" | xsd:string }?,
1363
+ attribute font-style {
1364
+ "normal" | "italic" | "oblique" | "inherit"
1365
+ }?,
1366
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
1367
+ attribute font-weight {
1368
+ "normal"
1369
+ | "bold"
1370
+ | "bolder"
1371
+ | "lighter"
1372
+ | "inherit"
1373
+ }?,
1374
+ attribute text-anchor {
1375
+ "start" | "middle" | "end" | "inherit"
1376
+ }?,
1377
+ attribute text-align {
1378
+ "start" | "center" | "end" | "inherit"
1379
+ }?)),
1380
+ attribute transform { xsd:string | "none" }?,
1381
+ attribute xlink:show { "new" | "replace" }?,
1382
+ attribute xlink:actuate { "onRequest" }?,
1383
+ attribute xlink:type { "simple" }?,
1384
+ attribute xlink:role { xsd:anyURI | xsd:string }?,
1385
+ attribute xlink:arcrole { xsd:anyURI | xsd:string }?,
1386
+ attribute xlink:title { text }?,
1387
+ attribute xlink:href { xsd:anyURI | xsd:string }?,
1388
+ attribute target {
1389
+ "_replace" | "_self" | "_parent" | "_top" | "_blank" | xsd:Name
1390
+ }?,
1391
+ (desc
1392
+ | svgTitle
1393
+ | path
1394
+ | rect
1395
+ | circle
1396
+ | line
1397
+ | ellipse
1398
+ | polyline
1399
+ | polygon
1400
+ | solidColor
1401
+ | textArea
1402
+ | \text
1403
+ | g
1404
+ | defs
1405
+ | use)*
1406
+ }
1407
+
1408
+ tspan =
1409
+ element tspan {
1410
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
1411
+ attribute stroke-opacity { "inherit" | xsd:string }?)
1412
+ & (attribute fill { "none" | rfc-color }?,
1413
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
1414
+ attribute stroke { rfc-color }?,
1415
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
1416
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
1417
+ attribute stroke-linecap {
1418
+ "butt" | "round" | "square" | "inherit"
1419
+ }?,
1420
+ attribute stroke-linejoin {
1421
+ "miter" | "round" | "bevel" | "inherit"
1422
+ }?,
1423
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
1424
+ attribute stroke-width { "inherit" | xsd:string }?,
1425
+ attribute color { rfc-color }?,
1426
+ attribute color-rendering {
1427
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
1428
+ }?)
1429
+ & attribute vector-effect {
1430
+ "none" | "non-scaling-stroke" | "inherit"
1431
+ }?
1432
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
1433
+ attribute unicode-bidi {
1434
+ "normal" | "embed" | "bidi-override" | "inherit"
1435
+ }?)
1436
+ & (attribute solid-color { rfc-color }?,
1437
+ attribute solid-opacity { "inherit" | xsd:string }?)
1438
+ & (attribute display-align {
1439
+ "auto" | "before" | "center" | "after" | "inherit"
1440
+ }?,
1441
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
1442
+ & (attribute stop-color { rfc-color }?,
1443
+ attribute stop-opacity { "inherit" | xsd:string }?)
1444
+ & (attribute font-family { "serif" | "sans-serif" | "monospace"
1445
+ | "inherit" }?,
1446
+ attribute font-size { "inherit" | xsd:string }?,
1447
+ attribute font-style {
1448
+ "normal" | "italic" | "oblique" | "inherit"
1449
+ }?,
1450
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
1451
+ attribute font-weight {
1452
+ "normal"
1453
+ | "bold"
1454
+ | "bolder"
1455
+ | "lighter"
1456
+ | "inherit"
1457
+ }?,
1458
+ attribute text-anchor {
1459
+ "start" | "middle" | "end" | "inherit"
1460
+ }?,
1461
+ attribute text-align {
1462
+ "start" | "center" | "end" | "inherit"
1463
+ }?)),
1464
+ (attribute id { xsd:NCName }
1465
+ | attribute xml:id { xsd:NCName })?,
1466
+ attribute xml:base { xsd:anyURI | xsd:string }?,
1467
+ attribute xml:lang { xsd:language? }?,
1468
+ attribute class { xsd:NMTOKENS }?,
1469
+ attribute role { xsd:string }?,
1470
+ attribute rel { xsd:string }?,
1471
+ attribute rev { xsd:string }?,
1472
+ attribute typeof { xsd:string }?,
1473
+ attribute content { xsd:string }?,
1474
+ attribute datatype { xsd:string }?,
1475
+ attribute resource { xsd:string }?,
1476
+ attribute about { xsd:string }?,
1477
+ attribute property { xsd:string }?,
1478
+ attribute xml:space { "default" | "preserve" }?,
1479
+ attribute x { xsd:string }?, # For SVG-1.2-RFC
1480
+ attribute y { xsd:string }?,
1481
+ (tbreak
1482
+ | desc
1483
+ | svgTitle
1484
+ | tspan_2
1485
+ | text
1486
+ | a_2)+
1487
+ }
1488
+
1489
+ tspan_2 =
1490
+ element tspan {
1491
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
1492
+ attribute stroke-opacity { "inherit" | xsd:string }?)
1493
+ & (attribute fill { "none" | rfc-color }?,
1494
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
1495
+ attribute stroke { rfc-color }?,
1496
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
1497
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
1498
+ attribute stroke-linecap {
1499
+ "butt" | "round" | "square" | "inherit"
1500
+ }?,
1501
+ attribute stroke-linejoin {
1502
+ "miter" | "round" | "bevel" | "inherit"
1503
+ }?,
1504
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
1505
+ attribute stroke-width { "inherit" | xsd:string }?,
1506
+ attribute color { rfc-color }?,
1507
+ attribute color-rendering {
1508
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
1509
+ }?)
1510
+ & attribute vector-effect {
1511
+ "none" | "non-scaling-stroke" | "inherit"
1512
+ }?
1513
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
1514
+ attribute unicode-bidi {
1515
+ "normal" | "embed" | "bidi-override" | "inherit"
1516
+ }?)
1517
+ & (attribute solid-color { rfc-color }?,
1518
+ attribute solid-opacity { "inherit" | xsd:string }?)
1519
+ & (attribute display-align {
1520
+ "auto" | "before" | "center" | "after" | "inherit"
1521
+ }?,
1522
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
1523
+ & (attribute stop-color { rfc-color }?,
1524
+ attribute stop-opacity { "inherit" | xsd:string }?)
1525
+ & (attribute font-family { "serif" | "sans-serif" | "monospace"
1526
+ | "inherit" }?,
1527
+ attribute font-size { "inherit" | xsd:string }?,
1528
+ attribute font-style {
1529
+ "normal" | "italic" | "oblique" | "inherit"
1530
+ }?,
1531
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
1532
+ attribute font-weight {
1533
+ "normal"
1534
+ | "bold"
1535
+ | "bolder"
1536
+ | "lighter"
1537
+ | "inherit"
1538
+ }?,
1539
+ attribute text-anchor {
1540
+ "start" | "middle" | "end" | "inherit"
1541
+ }?,
1542
+ attribute text-align {
1543
+ "start" | "center" | "end" | "inherit"
1544
+ }?)),
1545
+ (attribute id { xsd:NCName }
1546
+ | attribute xml:id { xsd:NCName })?,
1547
+ attribute xml:base { xsd:anyURI | xsd:string }?,
1548
+ attribute xml:lang { xsd:language? }?,
1549
+ attribute class { xsd:NMTOKENS }?,
1550
+ attribute role { xsd:string }?,
1551
+ attribute rel { xsd:string }?,
1552
+ attribute rev { xsd:string }?,
1553
+ attribute typeof { xsd:string }?,
1554
+ attribute content { xsd:string }?,
1555
+ attribute datatype { xsd:string }?,
1556
+ attribute resource { xsd:string }?,
1557
+ attribute about { xsd:string }?,
1558
+ attribute property { xsd:string }?,
1559
+ attribute xml:space { "default" | "preserve" }?,
1560
+ attribute x { xsd:string }?, # For SVG-1.2-RFC
1561
+ attribute y { xsd:string }?,
1562
+ (desc
1563
+ | svgTitle
1564
+ | tspan_2
1565
+ | text
1566
+ | a_2)+
1567
+ }
1568
+
1569
+ a_2 =
1570
+ element a {
1571
+ (attribute id { xsd:NCName }
1572
+ | attribute xml:id { xsd:NCName })?,
1573
+ attribute xml:base { xsd:anyURI | xsd:string }?,
1574
+ attribute xml:lang { xsd:language? }?,
1575
+ attribute class { xsd:NMTOKENS }?,
1576
+ attribute role { xsd:string }?,
1577
+ attribute rel { xsd:string }?,
1578
+ attribute rev { xsd:string }?,
1579
+ attribute typeof { xsd:string }?,
1580
+ attribute content { xsd:string }?,
1581
+ attribute datatype { xsd:string }?,
1582
+ attribute resource { xsd:string }?,
1583
+ attribute about { xsd:string }?,
1584
+ attribute property { xsd:string }?,
1585
+ attribute xml:space { "default" | "preserve" }?,
1586
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
1587
+ attribute stroke-opacity { "inherit" | xsd:string }?)
1588
+ & (attribute fill { "none" | rfc-color }?,
1589
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
1590
+ attribute stroke { rfc-color }?,
1591
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
1592
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
1593
+ attribute stroke-linecap {
1594
+ "butt" | "round" | "square" | "inherit"
1595
+ }?,
1596
+ attribute stroke-linejoin {
1597
+ "miter" | "round" | "bevel" | "inherit"
1598
+ }?,
1599
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
1600
+ attribute stroke-width { "inherit" | xsd:string }?,
1601
+ attribute color { rfc-color }?,
1602
+ attribute color-rendering {
1603
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
1604
+ }?)
1605
+ & attribute vector-effect {
1606
+ "none" | "non-scaling-stroke" | "inherit"
1607
+ }?
1608
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
1609
+ attribute unicode-bidi {
1610
+ "normal" | "embed" | "bidi-override" | "inherit"
1611
+ }?)
1612
+ & (attribute solid-color { rfc-color }?,
1613
+ attribute solid-opacity { "inherit" | xsd:string }?)
1614
+ & (attribute display-align {
1615
+ "auto" | "before" | "center" | "after" | "inherit"
1616
+ }?,
1617
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
1618
+ & (attribute stop-color { rfc-color }?,
1619
+ attribute stop-opacity { "inherit" | xsd:string }?)
1620
+ & (attribute font-family { "serif" | "sans-serif" | "monospace"
1621
+ | "inherit" }?,
1622
+ attribute font-size { "inherit" | xsd:string }?,
1623
+ attribute font-style {
1624
+ "normal" | "italic" | "oblique" | "inherit"
1625
+ }?,
1626
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
1627
+ attribute font-weight {
1628
+ "normal"
1629
+ | "bold"
1630
+ | "bolder"
1631
+ | "lighter"
1632
+ | "inherit"
1633
+ }?,
1634
+ attribute text-anchor {
1635
+ "start" | "middle" | "end" | "inherit"
1636
+ }?,
1637
+ attribute text-align {
1638
+ "start" | "center" | "end" | "inherit"
1639
+ }?)),
1640
+ attribute transform { xsd:string | "none" }?,
1641
+ attribute xlink:show { "new" | "replace" }?,
1642
+ attribute xlink:actuate { "onRequest" }?,
1643
+ attribute xlink:type { "simple" }?,
1644
+ attribute xlink:role { xsd:anyURI | xsd:string }?,
1645
+ attribute xlink:arcrole { xsd:anyURI | xsd:string }?,
1646
+ attribute xlink:title { text }?,
1647
+ attribute xlink:href { xsd:anyURI | xsd:string }?,
1648
+ attribute target {
1649
+ "_replace" | "_self" | "_parent" | "_top" | "_blank" | xsd:Name
1650
+ }?,
1651
+ (desc
1652
+ | svgTitle
1653
+ | tspan_2
1654
+ | text)+
1655
+ }
1656
+
1657
+ tbreak =
1658
+ element tbreak {
1659
+ (attribute id { xsd:NCName }
1660
+ | attribute xml:id { xsd:NCName })?,
1661
+ attribute xml:base { xsd:anyURI | xsd:string }?,
1662
+ attribute xml:lang { xsd:language? }?,
1663
+ attribute class { xsd:NMTOKENS }?,
1664
+ attribute role { xsd:string }?,
1665
+ attribute rel { xsd:string }?,
1666
+ attribute rev { xsd:string }?,
1667
+ attribute typeof { xsd:string }?,
1668
+ attribute content { xsd:string }?,
1669
+ attribute datatype { xsd:string }?,
1670
+ attribute resource { xsd:string }?,
1671
+ attribute about { xsd:string }?,
1672
+ attribute property { xsd:string }?,
1673
+ attribute xml:space { "default" | "preserve" }?
1674
+ }
1675
+
1676
+ #--- End of SVG 1.2 RFC rnc schema