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,2971 @@
1
+
2
+
3
+
4
+
5
+
6
+
7
+ Internet Architecture Board (IAB) N. Brownlee
8
+ Request for Comments: 7996 The University of Auckland
9
+ Category: Informational December 2016
10
+ ISSN: 2070-1721
11
+
12
+
13
+ SVG Drawings for RFCs: SVG 1.2 RFC
14
+
15
+ Abstract
16
+
17
+ This document specifies SVG 1.2 RFC -- an SVG profile for use in
18
+ diagrams that may appear in RFCs -- and considers some of the issues
19
+ concerning the creation and use of such diagrams.
20
+
21
+ Status of This Memo
22
+
23
+ This document is not an Internet Standards Track specification; it is
24
+ published for informational purposes.
25
+
26
+ This document is a product of the Internet Architecture Board (IAB)
27
+ and represents information that the IAB has deemed valuable to
28
+ provide for permanent record. It represents the consensus of the
29
+ Internet Architecture Board (IAB). Documents approved for
30
+ publication by the IAB are not a candidate for any level of Internet
31
+ Standard; see Section 2 of RFC 7841.
32
+
33
+ Information about the current status of this document, any errata,
34
+ and how to provide feedback on it may be obtained at
35
+ http://www.rfc-editor.org/info/rfc7996.
36
+
37
+ Copyright Notice
38
+
39
+ Copyright (c) 2016 IETF Trust and the persons identified as the
40
+ document authors. All rights reserved.
41
+
42
+ This document is subject to BCP 78 and the IETF Trust's Legal
43
+ Provisions Relating to IETF Documents
44
+ (http://trustee.ietf.org/license-info) in effect on the date of
45
+ publication of this document. Please review these documents
46
+ carefully, as they describe your rights and restrictions with respect
47
+ to this document.
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+ Brownlee Informational [Page 1]
59
+
60
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
61
+
62
+
63
+ Table of Contents
64
+
65
+ 1. Introduction ....................................................2
66
+ 2. SVG 1.2 RFC: An SVG Profile for RFCs ............................3
67
+ 2.1. Elements, Properties, and Attributes Allowed in
68
+ SVG 1.2 RFC ................................................4
69
+ 3. How to Create SVG Drawings ......................................7
70
+ 4. Accessibility Considerations ....................................7
71
+ 5. Examples of Diagrams Common in RFCs .............................8
72
+ 5.1. Packet Layout Diagrams .....................................8
73
+ 5.2. Sequence Diagrams (1) ......................................8
74
+ 5.3. Sequence Diagrams (2) ......................................8
75
+ 6. Security Considerations .........................................8
76
+ 7. References ......................................................9
77
+ 7.1. Normative References .......................................9
78
+ 7.2. Informative References .....................................9
79
+ Appendix A. RELAX NG Compact (RNC) Schema for SVG 1.2 RFC .........11
80
+ IAB Members at the Time of Approval ...............................53
81
+ Acknowledgements ..................................................53
82
+ Author's Address ..................................................53
83
+
84
+ 1. Introduction
85
+
86
+ Over the last few years, the RFC Editor has worked with the Internet
87
+ community to develop specifications for changes in the format of
88
+ RFCs. An outline of the resulting specifications was published as
89
+ [RFC6949] in May 2013. Since then, a Design Team has been working
90
+ with the RFC Editor to flesh out those specifications. One aspect of
91
+ the changes is to allow line drawings in RFCs; [RFC6949] says
92
+
93
+ Graphics may include ASCII art and a more complex form to be
94
+ defined, such as SVG line art [SVG]. Color and grayscale will not
95
+ be accepted. RFCs must correctly display in monochromatic black-
96
+ and-white to allow for monochrome displays, black-and-white
97
+ printing, and support for visual disabilities.
98
+
99
+ SVG (Scalable Vector Graphics) has been developed by W3C, the World
100
+ Wide Web Consortium; its current standard is SVG 1.1 Full
101
+ [W3C.REC-SVG11-20110816]. This document defines SVG 1.2 RFC, an SVG
102
+ profile (i.e., a subset of SVG) that is suitable for RFC line
103
+ drawings.
104
+
105
+ Note that in RFCs, the text provides normative descriptions of
106
+ protocols, systems, etc. Diagrams may be used to help explain
107
+ concepts more clearly, but they provide supporting details and should
108
+ not be considered to be complete specifications in themselves.
109
+
110
+
111
+
112
+
113
+
114
+ Brownlee Informational [Page 2]
115
+
116
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
117
+
118
+
119
+ The details (particularly any vocabularies) described in this
120
+ document are expected to change based on experience gained in
121
+ implementing the new publication toolsets. Revised documents will be
122
+ published capturing those changes as the toolsets are completed.
123
+ Other implementers must not expect those changes to remain backwards-
124
+ compatible with the details described in this document.
125
+
126
+ 2. SVG 1.2 RFC: An SVG Profile for RFCs
127
+
128
+ As a starting point for SVG 1.2 RFC, the Design Team decided to use
129
+ SVG Tiny 1.2 (also referred to as "SVG 1.2 Tiny")
130
+ [W3C.REC-SVGTiny12-20081222]. SVG 1.2 Tiny is an SVG subset intended
131
+ to be implemented on small, mobile devices such as cell phones and
132
+ smartphones. That should allow RFCs to be rendered well on such
133
+ devices, especially those that have small screens. However, RFCs are
134
+ self-contained documents that do not change once they are published.
135
+ The use of SVG drawings in RFCs is intended to allow authors to
136
+ create drawings that are simple to produce and are easier to
137
+ understand than our traditional "ASCII art" ones. In short, we are
138
+ also trying to improve access to the content in RFCs, so SVG drawings
139
+ need to be kept as simple as possible.
140
+
141
+ Appendix A (below) provides a complete RELAX NG Compact (RNC) schema
142
+ [RNG-HOME] for SVG 1.2 RFC. It is derived from the SVG 1.2 schema,
143
+ and is the formal definition of SVG 1.2 RFC. The remainder of this
144
+ section gives a simplified -- i.e., easier to read and understand --
145
+ overview of SVG 1.2 RFC.
146
+
147
+ SVG can provide a complete User Interface, but within RFCs, all we
148
+ need are simple diagrams that do not change once the RFC is
149
+ published. Therefore, SVG 1.2 RFC does not allow anything from the
150
+ following sections in SVG Tiny 1.2 [W3C.REC-SVGTiny12-20081222]:
151
+
152
+ 12 Multimedia
153
+ 13 Interactivity
154
+ 15 Scripting
155
+ 16 Animation
156
+ 18 Metadata
157
+ 19 Extensibility
158
+
159
+ Note that SVG Tiny 1.2 elements may have many properties or
160
+ attributes that are needed to support aspects of the above sections.
161
+ Those are not allowed in SVG 1.2 RFC.
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+ Brownlee Informational [Page 3]
171
+
172
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
173
+
174
+
175
+ We now consider these other sections in SVG Tiny 1.2
176
+ [W3C.REC-SVGTiny12-20081222]:
177
+
178
+ 9 Basic Shapes
179
+
180
+ 10 Text
181
+ Everything in this section is allowed in SVG 1.2 RFC.
182
+
183
+ 11 Painting: Filling, Stroking, Colors and Paint Servers
184
+ Anything relating to 'color' is not allowed in SVG 1.2 RFC;
185
+ everything else is allowed. This is a requirement documented in
186
+ [RFC6949].
187
+
188
+ 14 Linking
189
+ SVG Tiny 1.2 allows Internationalized Resource Identifiers
190
+ (IRIs) in references. In SVG 1.2 RFC, such links must be ASCII
191
+ only. That should not cause problems, since one can just use
192
+ the URI form of any IRI. Authors should try to use links only
193
+ to URIs that are long-term stable.
194
+
195
+ 17 Fonts
196
+ SVG 1.2 RFC only allows 'serif', 'sans-serif', and 'monospace'
197
+ generic font families from the WebFonts facility, described in
198
+ Section 15 ("Fonts") of the W3C Cascading Style Sheets (CSS) 2.1
199
+ document [W3C.REC-CSS2-20110607]. In particular, the SVG 'font'
200
+ element is not allowed.
201
+
202
+ 2.1. Elements, Properties, and Attributes Allowed in SVG 1.2 RFC
203
+
204
+ This section discusses elements, properties, and attributes selected
205
+ for SVG 1.2 RFC from [W3C.REC-SVGTiny12-20081222].
206
+
207
+ In the list below, elements and properties are listed on the
208
+ left, and their allowed values are given in parentheses on the
209
+ right.
210
+
211
+ <color> is the list of allowed colors, a black-and-white
212
+ subset of the SVG color names.
213
+
214
+ <style> is a set of CSS attributes that are commonly used (by SVG
215
+ drawing applications). They are not part of SVG Tiny 1.2
216
+ but are included here for compatibility. Note that
217
+
218
+ - There is no guarantee that any renderer will implement
219
+ all the CSS attributes a drawing application may use.
220
+
221
+ - Authors will need to consider the compatibility of their
222
+ drawings with rendering devices.
223
+
224
+
225
+
226
+ Brownlee Informational [Page 4]
227
+
228
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
229
+
230
+
231
+ Elements:
232
+
233
+ svg (version=1.2, baseProfile=tiny, width, viewBox,
234
+ preserveAspectRatio, snapshotTime, height,
235
+ id, role)
236
+ g (label, class, id, role, fill, <style>, transform)
237
+ defs (id, role, fill)
238
+ title (id, role)
239
+ desc (id, role)
240
+ a (id, role, fill, transform)
241
+ use (x, y, href, xlink:href, id, role,
242
+ fill, transform)
243
+
244
+ rect (x, y, width, height, rx, ry, stroke-miterlimit,
245
+ id, role, fill, <style>, transform)
246
+ circle (cx, cy, r, id, role, fill, <style>, transform)
247
+ ellipse (cx, cy, rx, ry, id, role,
248
+ fill, <style>, transform)
249
+ line (x1, y1, x2, y2, id, role, fill, transform)
250
+ polyline (points, id, role, fill, transform)
251
+ polygon (points, id, role, fill, <style>, transform)
252
+ text (x, y, rotate, space, id, role, fill, <style>,
253
+ transform)
254
+ tspan (x, y, id, role, fill)
255
+ textArea (x, y, width, height, auto, id, role, fill,
256
+ transform)
257
+ tbreak (id, role)
258
+
259
+ solidColor (id, role, fill)
260
+ linearGradient (gradientUnits, x1, y1, x2, y2, id, role, fill)
261
+ radialGradient (gradientUnits, cx, cy, r, id, role, fill)
262
+ stop (id, role, fill)
263
+ path (d, pathLength, stroke-miterlimit,
264
+ id, role, fill, <style>, transform)
265
+
266
+ Properties: (most allow "inherit" as a value)
267
+
268
+ <style> (font-family, font-weight, font-style,
269
+ font-variant, direction, unicode-bidi,
270
+ text-anchor, fill, fill-rule)
271
+
272
+ <color> (black, white, #000000, #ffffff, #FFFFFF)
273
+
274
+ stroke (<color>, none, currentColor)
275
+ stroke-width
276
+ stroke-linecap (butt, round, square)
277
+ stroke-linejoin (miter, round, bevel)
278
+ stroke-miterlimit
279
+
280
+
281
+
282
+ Brownlee Informational [Page 5]
283
+
284
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
285
+
286
+
287
+ stroke-dasharray
288
+ stroke-dashoffset
289
+ stroke-opacity
290
+ vector-effect (non-scaling-stroke, none)
291
+ viewport-fill (none, currentColor)
292
+ viewport-fill-opacity
293
+
294
+ display (inline, block, list-item, run-in, compact,
295
+ marker, table, inline-table, table-row-group,
296
+ table-header-group, table-footer-group,
297
+ table-row, table-column-group,
298
+ table-column, table-cell, table-caption,
299
+ none)
300
+ visibility (visible, hidden, collapse)
301
+ color-rendering (auto, optimizeSpeed, optimizeQuality)
302
+ shape-rendering (auto, optimizeSpeed, crispEdges,
303
+ geometricPrecision)
304
+ text-rendering (auto, optimizeSpeed, optimizeLegibility,
305
+ geometricPrecision)
306
+ buffered-rendering (auto, dynamic, static)
307
+
308
+ opacity
309
+ solid-opacity
310
+ solid-color (currentColor, <color>)
311
+ color (currentColor, <color>)
312
+ stop-color (currentColor, <color>)
313
+ stop-opacity
314
+
315
+ line-increment (auto)
316
+ text-align (start, end, center)
317
+ display-align (auto, before, center, after)
318
+
319
+ font-size
320
+ font-family (serif, sans-serif, monospace)
321
+ font-weight (normal, bold, bolder, lighter)
322
+ font-style (normal, italic, oblique)
323
+ font-variant (normal, small-caps)
324
+ direction (ltr, rtl)
325
+ unicode-bidi (normal, embed, bidi-override)
326
+ text-anchor (start, middle, end)
327
+ fill (none, <color>)
328
+ fill-rule (nonzero, evenodd)
329
+ fill-opacity
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+ Brownlee Informational [Page 6]
339
+
340
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
341
+
342
+
343
+ 3. How to Create SVG Drawings
344
+
345
+ Many drawing packages can be used to create SVG drawings -- for
346
+ example, Open Source packages Inkscape and Dia. Be aware that such
347
+ packages may use SVG elements or attributes that are not allowed in
348
+ SVG 1.2 RFC.
349
+
350
+ o For example, the 'marker' attribute is often used to place symbols
351
+ such as arrowheads on lines, but 'marker' is not allowed in
352
+ SVG 1.2 Tiny or SVG 1.2 RFC. In such cases, one has to draw the
353
+ arrowhead in another, simpler way.
354
+
355
+ o SVG clip paths are used to define a shape; objects outside that
356
+ shape become invisible. The 'clipPath' element is not allowed in
357
+ SVG 1.2 Tiny or SVG 1.2 RFC.
358
+
359
+ Diagrams produced with these packages may contain elements, their
360
+ attributes or properties, or values of attributes or properties that
361
+ are not allowed in SVG 1.2 RFC. We will need to provide a tool to
362
+ either (1) strip out anything that is not allowed in SVG 1.2 RFC or
363
+ (2) replace disallowed values (e.g., replace 'Sans' with 'sans-serif'
364
+ as an allowed value for 'font-family'). Experience with a simple
365
+ test version of a tool for this has shown that such deletion and
366
+ replacement can be effective for making SVG files from drawing
367
+ packages conform to SVG 1.2 RFC, without visibly changing the
368
+ diagrams they produce.
369
+
370
+ The tool described above can also be used by authors simply to check
371
+ that their diagrams conform to SVG 1.2 RFC. To help with this, if
372
+ visible changes do occur, the tool should produce a list of
373
+ non-allowed keywords and the context in which they were found.
374
+
375
+ To include a diagram in an RFC, the xml2rfc (v3) tool will need to
376
+ provide a way to include SVG drawings in Internet-Drafts, as
377
+ described in Section 2.5 of [RFC7991].
378
+
379
+ 4. Accessibility Considerations
380
+
381
+ One of the long-term goals for RFCs is to make them more accessible,
382
+ e.g., to sight-impaired readers. For diagrams, it would be useful
383
+ for authors to provide alternative forms of the diagram, so that
384
+ voice-reading software could be used to "talk through" the diagram.
385
+ Simply reading the SVG code for a complex diagram seems unlikely
386
+ to work.
387
+
388
+
389
+
390
+
391
+
392
+
393
+
394
+ Brownlee Informational [Page 7]
395
+
396
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
397
+
398
+
399
+ SVG 1.2 RFC allows SVG's 'title' and 'desc' elements. 'title'
400
+ provides a brief text caption for an SVG object (much like a figure
401
+ caption), and 'desc' provides a longer text description of what the
402
+ object actually represents. As well, the SVG 'role' attribute can be
403
+ used to indicate to a browser how an SVG object is to be interpreted.
404
+ Good suggestions on how to use these elements are given in
405
+ [SVG-ACCESS-TIPS].
406
+
407
+ ARIA is a W3C Recommendation for using SVG to create (as the name
408
+ "ARIA" indicates) "Accessible Rich Internet Applications". A helpful
409
+ introduction to ARIA is provided by [SVG-ARIA-PRIMER], while
410
+ [SVG-USING-ARIA] gives examples of how to use ARIA to enhance SVG
411
+ accessibility.
412
+
413
+ 5. Examples of Diagrams Common in RFCs
414
+
415
+ Another way to create SVG drawings is to write programs to draw them.
416
+ For example, using Python and its svgwrite module is a pleasant
417
+ environment (for those who like writing code); this section presents
418
+ a few examples of diagrams created in this way. Note that they are
419
+ merely examples of typical diagrams from RFCs.
420
+
421
+ The SVG diagrams for this section, along with an HTML version of this
422
+ document that includes the SVG diagrams, can be seen at
423
+ [NB-SVG-1.2-RFC].
424
+
425
+ 5.1. Packet Layout Diagrams
426
+
427
+ Example: Figure 3 from [RFC793].
428
+
429
+ 5.2. Sequence Diagrams (1)
430
+
431
+ Example: Figure 6 from [ExpTrustedProxy].
432
+
433
+ 5.3. Sequence Diagrams (2)
434
+
435
+ Example: Figure 3 from [RFC4321].
436
+
437
+ 6. Security Considerations
438
+
439
+ This document does not introduce any security considerations on
440
+ its own.
441
+
442
+
443
+
444
+
445
+
446
+
447
+
448
+
449
+
450
+ Brownlee Informational [Page 8]
451
+
452
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
453
+
454
+
455
+ 7. References
456
+
457
+ 7.1. Normative References
458
+
459
+ [RFC6949] Flanagan, H. and N. Brownlee, "RFC Series Format
460
+ Requirements and Future Development", RFC 6949,
461
+ DOI 10.17487/RFC6949, May 2013,
462
+ <http://www.rfc-editor.org/info/rfc6949>.
463
+
464
+ [W3C.REC-SVGTiny12-20081222]
465
+ Andersson, O., Berjon, R., Dahlstrom, E., Emmons, A.,
466
+ Ferraiolo, J., Grasso, A., Hardy, V., Hayman, S., Jackson,
467
+ D., Lilley, C., McCormack, C., Neumann, A., Northway, C.,
468
+ Quint, A., Ramani, N., Schepers, D., and A. Shellshear,
469
+ "Scalable Vector Graphics (SVG) Tiny 1.2 Specification",
470
+ World Wide Web Consortium Recommendation
471
+ REC-SVGTiny12-20081222, December 2008,
472
+ <http://www.w3.org/TR/2008/REC-SVGTiny12-20081222>.
473
+
474
+ [W3C.REC-CSS2-20110607]
475
+ Bos, B., Celik, T., Hickson, I., and H. Lie, "Cascading
476
+ Style Sheets Level 2 Revision 1 (CSS 2.1) Specification",
477
+ World Wide Web Consortium Recommendation
478
+ REC-CSS2-20110607, June 2011,
479
+ <http://www.w3.org/TR/2011/REC-CSS2-20110607>.
480
+
481
+ 7.2. Informative References
482
+
483
+ [W3C.REC-SVG11-20110816]
484
+ Dahlstrom, E., Dengler, P., Grasso, A., Lilley, C.,
485
+ McCormack, C., Schepers, D., Watt, J., Ferraiolo, J.,
486
+ Fujisawa, J., and D. Jackson, "Scalable Vector Graphics
487
+ (SVG) 1.1 (Second Edition)", World Wide Web Consortium
488
+ Recommendation REC-SVG11-20110816, August 2011,
489
+ <http://www.w3.org/TR/2011/REC-SVG11-20110816>.
490
+
491
+ [SVG-ACCESS-TIPS]
492
+ Watson, L., "Tips for Creating Accessible SVG", May 2014,
493
+ <http://www.sitepoint.com/tips-accessible-svg>.
494
+
495
+ [SVG-ARIA-PRIMER]
496
+ Pappas, L., Schwerdtfeger, R., and M. Cooper,
497
+ "WAI-ARIA 1.0 Primer", World Wide Web Consortium
498
+ Working Draft, September 2010,
499
+ <http://www.w3.org/TR/2010/WD-wai-aria-primer-20100916>.
500
+
501
+
502
+
503
+
504
+
505
+
506
+ Brownlee Informational [Page 9]
507
+
508
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
509
+
510
+
511
+ [SVG-USING-ARIA]
512
+ Watson, L., "Using ARIA to enhance SVG accessibility",
513
+ The Paciello Group, December 2013,
514
+ <https://www.paciellogroup.com/blog/2013/12/
515
+ using-aria-enhance-svg-accessibility/>.
516
+
517
+ [RFC7991] Hoffman, P., "The "xml2rfc" Version 3 Vocabulary",
518
+ RFC 7991, DOI 10.17487/RFC7991, December 2016,
519
+ <http://www.rfc-editor.org/info/rfc7991>.
520
+
521
+ [NB-SVG-1.2-RFC]
522
+ Brownlee, N., "Index of /materials/format/svg",
523
+ <https://www.rfc-editor.org/materials/format/svg/>.
524
+
525
+ [RFC793] Postel, J., "Transmission Control Protocol", STD 7,
526
+ RFC 793, DOI 10.17487/RFC0793, September 1981,
527
+ <http://www.rfc-editor.org/info/rfc793>.
528
+
529
+ [ExpTrustedProxy]
530
+ Loreto, S., Mattsson, J., Skog, R., Spaak, H., Bourg, G.,
531
+ Druta, D., and M. Hafeez, "Explicit Trusted Proxy in
532
+ HTTP/2.0", Work in Progress,
533
+ draft-loreto-httpbis-trusted-proxy20-01, February 2014.
534
+
535
+ [RFC4321] Sparks, R., "Problems Identified Associated with the
536
+ Session Initiation Protocol's (SIP) Non-INVITE
537
+ Transaction", RFC 4321, DOI 10.17487/RFC4321,
538
+ January 2006, <http://www.rfc-editor.org/info/rfc4321>.
539
+
540
+ [RNG-HOME] Murata, M., "RELAX NG home page", February 2014,
541
+ <http://www.relaxng.org/>.
542
+
543
+
544
+
545
+
546
+
547
+
548
+
549
+
550
+
551
+
552
+
553
+
554
+
555
+
556
+
557
+
558
+
559
+
560
+
561
+
562
+ Brownlee Informational [Page 10]
563
+
564
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
565
+
566
+
567
+ Appendix A. RELAX NG Compact (RNC) Schema for SVG 1.2 RFC
568
+
569
+ The following RNC schema can be used to check whether an SVG file
570
+ conforms to SVG 1.2 RFC. For example, if this schema were contained
571
+ in a file called SVG-1.2-RFC.rnc, the following command will test
572
+ whether SVG file diagram.svg is a conformant SVG 1.2 RFC drawing.
573
+
574
+ jing -c SVG-1.2-RFC.rnc diagram.svg
575
+
576
+ The RNC schema included below is available on the RFC Editor website
577
+ <https://www.rfc-editor.org/materials/format/SVG-1.2-RFC.rnc>. The
578
+ website is considered definitive should there be any discrepancies.
579
+
580
+ #--- SVG 1.2 RFC RNC schema; Nevil Brownlee, Thu 26 Jan 2016 (NZST)
581
+
582
+ default namespace = "http://www.w3.org/2000/svg"
583
+ namespace ns1 = "http://www.w3.org/1999/xlink"
584
+
585
+ rfc-color = ( # SVG-1.2-RFC doesn't allow color or grayscale
586
+ "black" | "white" | "#000000" | "#FFFFFF" | "#ffffff" | "inherit" )
587
+ start = svg
588
+ svg =
589
+ element svg {
590
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
591
+ attribute stroke-opacity { "inherit" | xsd:string }?)
592
+ & (attribute fill { "none" | rfc-color }?,
593
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
594
+ attribute stroke { rfc-color }?,
595
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
596
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
597
+ attribute stroke-linecap {
598
+ "butt" | "round" | "square" | "inherit"
599
+ }?,
600
+ attribute stroke-linejoin {
601
+ "miter" | "round" | "bevel" | "inherit"
602
+ }?,
603
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
604
+ attribute stroke-width { "inherit" | xsd:string }?,
605
+ attribute color { rfc-color }?,
606
+ attribute color-rendering {
607
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
608
+ }?)
609
+ & attribute vector-effect {
610
+ "none" | "non-scaling-stroke" | "inherit"
611
+ }?
612
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
613
+ attribute unicode-bidi {
614
+ "normal" | "embed" | "bidi-override" | "inherit"
615
+
616
+
617
+
618
+ Brownlee Informational [Page 11]
619
+
620
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
621
+
622
+
623
+ }?)
624
+ & (attribute solid-color { rfc-color }?,
625
+ attribute solid-opacity { "inherit" | xsd:string }?)
626
+ & (attribute display-align {
627
+ "auto" | "before" | "center" | "after" | "inherit"
628
+ }?,
629
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
630
+ & (attribute stop-color { rfc-color }?,
631
+ attribute stop-opacity { "inherit" | xsd:string }?)
632
+ & (attribute font-family { "inherit" | xsd:string }?,
633
+ attribute font-size { "inherit" | xsd:string }?,
634
+ attribute font-style {
635
+ "normal" | "italic" | "oblique" | "inherit"
636
+ }?,
637
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
638
+ attribute font-weight {
639
+ "normal"
640
+ | "bold"
641
+ | "bolder"
642
+ | "lighter"
643
+ }?,
644
+ attribute text-anchor {
645
+ "start" | "middle" | "end" | "inherit"
646
+ }?,
647
+ attribute text-align {
648
+ "start" | "center" | "end" | "inherit"
649
+ }?)),
650
+ (attribute id { xsd:NCName }
651
+ | attribute xml:id { xsd:NCName })?,
652
+ attribute xml:base { xsd:anyURI | xsd:string }?,
653
+ attribute xml:lang { xsd:language? }?,
654
+ attribute class { xsd:NMTOKENS }?,
655
+ attribute role { xsd:string }?,
656
+ attribute rel { xsd:string }?,
657
+ attribute rev { xsd:string }?,
658
+ attribute typeof { xsd:string }?,
659
+ attribute content { xsd:string }?,
660
+ attribute datatype { xsd:string }?,
661
+ attribute resource { xsd:string }?,
662
+ attribute about { xsd:string }?,
663
+ attribute property { xsd:string }?,
664
+ attribute xml:space { "default" | "preserve" }?,
665
+ attribute width { xsd:string }?,
666
+ attribute height { xsd:string }?,
667
+ attribute preserveAspectRatio {
668
+ xsd:string { pattern = "\s*(none|xMidYMid)\s*(meet)?\s*" }
669
+ }?,
670
+ attribute viewBox { text }?,
671
+
672
+
673
+
674
+ Brownlee Informational [Page 12]
675
+
676
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
677
+
678
+
679
+ attribute zoomAndPan { "disable" }?,
680
+ attribute version {
681
+ xsd:string "1.2"
682
+ }?,
683
+ attribute baseProfile {
684
+ xsd:string "tiny"
685
+ }?,
686
+ attribute contentScriptType { xsd:string }?,
687
+ attribute snapshotTime { xsd:string "none" | xsd:string }?,
688
+ attribute timelineBegin {
689
+ xsd:string "onLoad" | xsd:string "onStart"
690
+ }?,
691
+ attribute playbackOrder {
692
+ xsd:string "all" | xsd:string "forwardOnly"
693
+ }?,
694
+ (desc
695
+ | svgTitle
696
+ | path
697
+ | rect
698
+ | circle
699
+ | line
700
+ | ellipse
701
+ | polyline
702
+ | polygon
703
+ | solidColor
704
+ | textArea
705
+ | linearGradient
706
+ | radialGradient
707
+ | \text
708
+ | g
709
+ | defs
710
+ | use
711
+ | a)*
712
+ }
713
+ desc =
714
+ element desc {
715
+ (attribute id { xsd:NCName }
716
+ | attribute xml:id { xsd:NCName })?,
717
+ attribute xml:base { xsd:anyURI | xsd:string }?,
718
+ attribute xml:lang { xsd:language? }?,
719
+ attribute class { xsd:NMTOKENS }?,
720
+ attribute role { xsd:string }?,
721
+ attribute rel { xsd:string }?,
722
+ attribute rev { xsd:string }?,
723
+ attribute typeof { xsd:string }?,
724
+ attribute content { xsd:string }?,
725
+ attribute datatype { xsd:string }?,
726
+ attribute resource { xsd:string }?,
727
+
728
+
729
+
730
+ Brownlee Informational [Page 13]
731
+
732
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
733
+
734
+
735
+ attribute about { xsd:string }?,
736
+ attribute property { xsd:string }?,
737
+ attribute xml:space { "default" | "preserve" }?,
738
+ attribute requiredFeatures { xsd:string }?,
739
+ attribute requiredExtensions { xsd:string }?,
740
+ attribute requiredFormats { xsd:string }?,
741
+ attribute requiredFonts { xsd:string }?,
742
+ attribute systemLanguage { xsd:string }?,
743
+ ((attribute display {
744
+ "inline"
745
+ | "block"
746
+ | "list-item"
747
+ | "run-in"
748
+ | "compact"
749
+ | "marker"
750
+ | "table"
751
+ | "inline-table"
752
+ | "table-row-group"
753
+ | "table-header-group"
754
+ | "table-footer-group"
755
+ | "table-row"
756
+ | "table-column-group"
757
+ | "table-column"
758
+ | "table-cell"
759
+ | "table-caption"
760
+ | "none"
761
+ | "inherit"
762
+ }?,
763
+ attribute visibility { "visible" | "hidden" | "collapse"
764
+ | "inherit" }?,
765
+ attribute image-rendering {
766
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
767
+ }?,
768
+ attribute shape-rendering {
769
+ "auto"
770
+ | "optimizeSpeed"
771
+ | "crispEdges"
772
+ | "geometricPrecision"
773
+ | "inherit"
774
+ }?,
775
+ attribute text-rendering {
776
+ "auto"
777
+ | "optimizeSpeed"
778
+ | "optimizeLegibility"
779
+ | "geometricPrecision"
780
+ | "inherit"
781
+ }?,
782
+ attribute buffered-rendering {
783
+
784
+
785
+
786
+ Brownlee Informational [Page 14]
787
+
788
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
789
+
790
+
791
+ "auto" | "dynamic" | "static" | "inherit"
792
+ }?)
793
+ & (attribute viewport-fill { "none" | rfc-color }?,
794
+ attribute viewport-fill-opacity { "inherit" | xsd:string }?)),
795
+ text
796
+ }
797
+ svgTitle =
798
+ element title {
799
+ (attribute id { xsd:NCName }
800
+ | attribute xml:id { xsd:NCName })?,
801
+ attribute xml:base { xsd:anyURI | xsd:string }?,
802
+ attribute xml:lang { xsd:language? }?,
803
+ attribute class { xsd:NMTOKENS }?,
804
+ attribute role { xsd:string }?,
805
+ attribute rel { xsd:string }?,
806
+ attribute rev { xsd:string }?,
807
+ attribute typeof { xsd:string }?,
808
+ attribute content { xsd:string }?,
809
+ attribute datatype { xsd:string }?,
810
+ attribute resource { xsd:string }?,
811
+ attribute about { xsd:string }?,
812
+ attribute property { xsd:string }?,
813
+ attribute xml:space { "default" | "preserve" }?,
814
+ attribute requiredFeatures { xsd:string }?,
815
+ attribute requiredExtensions { xsd:string }?,
816
+ attribute requiredFormats { xsd:string }?,
817
+ attribute requiredFonts { xsd:string }?,
818
+ attribute systemLanguage { xsd:string }?,
819
+ ((attribute display {
820
+ "inline"
821
+ | "block"
822
+ | "list-item"
823
+ | "run-in"
824
+ | "compact"
825
+ | "marker"
826
+ | "table"
827
+ | "inline-table"
828
+ | "table-row-group"
829
+ | "table-header-group"
830
+ | "table-footer-group"
831
+ | "table-row"
832
+ | "table-column-group"
833
+ | "table-column"
834
+ | "table-cell"
835
+ | "table-caption"
836
+ | "none"
837
+ | "inherit"
838
+ }?,
839
+
840
+
841
+
842
+ Brownlee Informational [Page 15]
843
+
844
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
845
+
846
+
847
+ attribute visibility { "visible" | "hidden"
848
+ | "collapse" | "inherit" }?,
849
+ attribute image-rendering {
850
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
851
+ }?,
852
+ attribute shape-rendering {
853
+ "auto"
854
+ | "optimizeSpeed"
855
+ | "crispEdges"
856
+ | "geometricPrecision"
857
+ | "inherit"
858
+ }?,
859
+ attribute text-rendering {
860
+ "auto"
861
+ | "optimizeSpeed"
862
+ | "optimizeLegibility"
863
+ | "geometricPrecision"
864
+ | "inherit"
865
+ }?,
866
+ attribute buffered-rendering {
867
+ "auto" | "dynamic" | "static" | "inherit"
868
+ }?)
869
+ & (attribute viewport-fill { "none" | rfc-color }?,
870
+ attribute viewport-fill-opacity { "inherit" | xsd:string }?)),
871
+ text
872
+ }
873
+ path =
874
+ element path {
875
+ (attribute id { xsd:NCName }
876
+ | attribute xml:id { xsd:NCName })?,
877
+ attribute xml:base { xsd:anyURI | xsd:string }?,
878
+ attribute xml:lang { xsd:language? }?,
879
+ attribute class { xsd:NMTOKENS }?,
880
+ attribute role { xsd:string }?,
881
+ attribute rel { xsd:string }?,
882
+ attribute rev { xsd:string }?,
883
+ attribute typeof { xsd:string }?,
884
+ attribute content { xsd:string }?,
885
+ attribute datatype { xsd:string }?,
886
+ attribute resource { xsd:string }?,
887
+ attribute about { xsd:string }?,
888
+ attribute property { xsd:string }?,
889
+ attribute xml:space { "default" | "preserve" }?,
890
+ attribute transform { xsd:string | "none" }?,
891
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
892
+ attribute stroke-opacity { "inherit" | xsd:string }?)
893
+ & (attribute fill { "none" | rfc-color }?,
894
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
895
+
896
+
897
+
898
+ Brownlee Informational [Page 16]
899
+
900
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
901
+
902
+
903
+ attribute stroke { rfc-color }?,
904
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
905
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
906
+ attribute stroke-linecap {
907
+ "butt" | "round" | "square" | "inherit"
908
+ }?,
909
+ attribute stroke-linejoin {
910
+ "miter" | "round" | "bevel" | "inherit"
911
+ }?,
912
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
913
+ attribute stroke-width { "inherit" | xsd:string }?,
914
+ attribute color { rfc-color }?,
915
+ attribute color-rendering {
916
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
917
+ }?)
918
+ & attribute vector-effect {
919
+ "none" | "non-scaling-stroke" | "inherit"
920
+ }?
921
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
922
+ attribute unicode-bidi {
923
+ "normal" | "embed" | "bidi-override" | "inherit"
924
+ }?)
925
+ & (attribute solid-color { rfc-color }?,
926
+ attribute solid-opacity { "inherit" | xsd:string }?)
927
+ & (attribute display-align {
928
+ "auto" | "before" | "center" | "after" | "inherit"
929
+ }?,
930
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
931
+ & (attribute stop-color { rfc-color }?,
932
+ attribute stop-opacity { "inherit" | xsd:string }?)
933
+ & (attribute font-family { "inherit" | xsd:string }?,
934
+ attribute font-size { "inherit" | xsd:string }?,
935
+ attribute font-style {
936
+ "normal" | "italic" | "oblique" | "inherit"
937
+ }?,
938
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
939
+ attribute font-weight {
940
+ "normal"
941
+ | "bold"
942
+ | "bolder"
943
+ | "lighter"
944
+ | "inherit"
945
+ }?,
946
+ attribute text-anchor {
947
+ "start" | "middle" | "end" | "inherit"
948
+ }?,
949
+ attribute text-align {
950
+ "start" | "center" | "end" | "inherit"
951
+
952
+
953
+
954
+ Brownlee Informational [Page 17]
955
+
956
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
957
+
958
+
959
+ }?)),
960
+ attribute requiredFeatures { xsd:string }?,
961
+ attribute requiredExtensions { xsd:string }?,
962
+ attribute requiredFormats { xsd:string }?,
963
+ attribute requiredFonts { xsd:string }?,
964
+ attribute systemLanguage { xsd:string }?,
965
+ attribute d { xsd:string }?,
966
+ attribute pathLength { xsd:string }?,
967
+ attribute style { xsd:string }?, # Added to SVG-1.2-RFC (Inkscape)
968
+ (desc
969
+ | svgTitle)*
970
+ }
971
+ rect =
972
+ element rect {
973
+ (attribute id { xsd:NCName }
974
+ | attribute xml:id { xsd:NCName })?,
975
+ attribute xml:base { xsd:anyURI | xsd:string }?,
976
+ attribute xml:lang { xsd:language? }?,
977
+ attribute class { xsd:NMTOKENS }?,
978
+ attribute role { xsd:string }?,
979
+ attribute rel { xsd:string }?,
980
+ attribute rev { xsd:string }?,
981
+ attribute typeof { xsd:string }?,
982
+ attribute content { xsd:string }?,
983
+ attribute datatype { xsd:string }?,
984
+ attribute resource { xsd:string }?,
985
+ attribute about { xsd:string }?,
986
+ attribute property { xsd:string }?,
987
+ attribute xml:space { "default" | "preserve" }?,
988
+ attribute transform { xsd:string | "none" }?,
989
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
990
+ attribute stroke-opacity { "inherit" | xsd:string }?)
991
+ & (attribute fill { "none" | rfc-color }?,
992
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
993
+ attribute stroke { rfc-color }?,
994
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
995
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
996
+ attribute stroke-linecap {
997
+ "butt" | "round" | "square" | "inherit"
998
+ }?,
999
+ attribute stroke-linejoin {
1000
+ "miter" | "round" | "bevel" | "inherit"
1001
+ }?,
1002
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
1003
+ attribute stroke-width { "inherit" | xsd:string }?,
1004
+ attribute color { rfc-color }?,
1005
+ attribute color-rendering {
1006
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
1007
+
1008
+
1009
+
1010
+ Brownlee Informational [Page 18]
1011
+
1012
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
1013
+
1014
+
1015
+ }?)
1016
+ & attribute vector-effect {
1017
+ "none" | "non-scaling-stroke" | "inherit"
1018
+ }?
1019
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
1020
+ attribute unicode-bidi {
1021
+ "normal" | "embed" | "bidi-override" | "inherit"
1022
+ }?)
1023
+ & (attribute solid-color { rfc-color }?,
1024
+ attribute solid-opacity { "inherit" | xsd:string }?)
1025
+ & (attribute display-align {
1026
+ "auto" | "before" | "center" | "after" | "inherit"
1027
+ }?,
1028
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
1029
+ & (attribute stop-color { rfc-color }?,
1030
+ attribute stop-opacity { "inherit" | xsd:string }?)
1031
+ & (attribute font-family { "inherit" | xsd:string }?,
1032
+ attribute font-size { "inherit" | xsd:string }?,
1033
+ attribute font-style {
1034
+ "normal" | "italic" | "oblique" | "inherit"
1035
+ }?,
1036
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
1037
+ attribute font-weight {
1038
+ "normal"
1039
+ | "bold"
1040
+ | "bolder"
1041
+ | "lighter"
1042
+ | "inherit"
1043
+ }?,
1044
+ attribute text-anchor {
1045
+ "start" | "middle" | "end" | "inherit"
1046
+ }?,
1047
+ attribute text-align {
1048
+ "start" | "center" | "end" | "inherit"
1049
+ }?)),
1050
+ attribute requiredFeatures { xsd:string }?,
1051
+ attribute requiredExtensions { xsd:string }?,
1052
+ attribute requiredFormats { xsd:string }?,
1053
+ attribute requiredFonts { xsd:string }?,
1054
+ attribute systemLanguage { xsd:string }?,
1055
+ attribute x { xsd:string }?,
1056
+ attribute y { xsd:string }?,
1057
+ attribute width { xsd:string }?,
1058
+ attribute height { xsd:string }?,
1059
+ attribute rx { xsd:string }?,
1060
+ attribute ry { xsd:string }?,
1061
+ attribute style { xsd:string }?, # Added to SVG-1.2-RFC (Inkscape)
1062
+ (desc
1063
+
1064
+
1065
+
1066
+ Brownlee Informational [Page 19]
1067
+
1068
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
1069
+
1070
+
1071
+ | svgTitle)*
1072
+ }
1073
+ circle =
1074
+ element circle {
1075
+ (attribute id { xsd:NCName }
1076
+ | attribute xml:id { xsd:NCName })?,
1077
+ attribute xml:base { xsd:anyURI | xsd:string }?,
1078
+ attribute xml:lang { xsd:language? }?,
1079
+ attribute class { xsd:NMTOKENS }?,
1080
+ attribute role { xsd:string }?,
1081
+ attribute rel { xsd:string }?,
1082
+ attribute rev { xsd:string }?,
1083
+ attribute typeof { xsd:string }?,
1084
+ attribute content { xsd:string }?,
1085
+ attribute datatype { xsd:string }?,
1086
+ attribute resource { xsd:string }?,
1087
+ attribute about { xsd:string }?,
1088
+ attribute property { xsd:string }?,
1089
+ attribute xml:space { "default" | "preserve" }?,
1090
+ attribute transform { xsd:string | "none" }?,
1091
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
1092
+ attribute stroke-opacity { "inherit" | xsd:string }?)
1093
+ & (attribute fill { "none" | rfc-color }?,
1094
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
1095
+ attribute stroke { rfc-color }?,
1096
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
1097
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
1098
+ attribute stroke-linecap {
1099
+ "butt" | "round" | "square" | "inherit"
1100
+ }?,
1101
+ attribute stroke-linejoin {
1102
+ "miter" | "round" | "bevel" | "inherit"
1103
+ }?,
1104
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
1105
+ attribute stroke-width { "inherit" | xsd:string }?,
1106
+ attribute color { rfc-color }?,
1107
+ attribute color-rendering {
1108
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
1109
+ }?)
1110
+ & attribute vector-effect {
1111
+ "none" | "non-scaling-stroke" | "inherit"
1112
+ }?
1113
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
1114
+ attribute unicode-bidi {
1115
+ "normal" | "embed" | "bidi-override" | "inherit"
1116
+ }?)
1117
+ & (attribute solid-color { rfc-color }?,
1118
+ attribute solid-opacity { "inherit" | xsd:string }?)
1119
+
1120
+
1121
+
1122
+ Brownlee Informational [Page 20]
1123
+
1124
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
1125
+
1126
+
1127
+ & (attribute display-align {
1128
+ "auto" | "before" | "center" | "after" | "inherit"
1129
+ }?,
1130
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
1131
+ & (attribute stop-color { rfc-color }?,
1132
+ attribute stop-opacity { "inherit" | xsd:string }?)
1133
+ & (attribute font-family { "inherit" | xsd:string }?,
1134
+ attribute font-size { "inherit" | xsd:string }?,
1135
+ attribute font-style {
1136
+ "normal" | "italic" | "oblique" | "inherit"
1137
+ }?,
1138
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
1139
+ attribute font-weight {
1140
+ "normal"
1141
+ | "bold"
1142
+ | "bolder"
1143
+ | "lighter"
1144
+ | "inherit"
1145
+ }?,
1146
+ attribute text-anchor {
1147
+ "start" | "middle" | "end" | "inherit"
1148
+ }?,
1149
+ attribute text-align {
1150
+ "start" | "center" | "end" | "inherit"
1151
+ }?)),
1152
+ attribute requiredFeatures { xsd:string }?,
1153
+ attribute requiredExtensions { xsd:string }?,
1154
+ attribute requiredFormats { xsd:string }?,
1155
+ attribute requiredFonts { xsd:string }?,
1156
+ attribute systemLanguage { xsd:string }?,
1157
+ attribute cx { xsd:string }?,
1158
+ attribute cy { xsd:string }?,
1159
+ attribute r { xsd:string }?,
1160
+ attribute style { xsd:string }?, # Added to SVG-1.2-RFC (Inkscape)
1161
+ (desc
1162
+ | svgTitle)*
1163
+ }
1164
+ line =
1165
+ element line {
1166
+ (attribute id { xsd:NCName }
1167
+ | attribute xml:id { xsd:NCName })?,
1168
+ attribute xml:base { xsd:anyURI | xsd:string }?,
1169
+ attribute xml:lang { xsd:language? }?,
1170
+ attribute class { xsd:NMTOKENS }?,
1171
+ attribute role { xsd:string }?,
1172
+ attribute rel { xsd:string }?,
1173
+ attribute rev { xsd:string }?,
1174
+ attribute typeof { xsd:string }?,
1175
+
1176
+
1177
+
1178
+ Brownlee Informational [Page 21]
1179
+
1180
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
1181
+
1182
+
1183
+ attribute content { xsd:string }?,
1184
+ attribute datatype { xsd:string }?,
1185
+ attribute resource { xsd:string }?,
1186
+ attribute about { xsd:string }?,
1187
+ attribute property { xsd:string }?,
1188
+ attribute xml:space { "default" | "preserve" }?,
1189
+ attribute transform { xsd:string | "none" }?,
1190
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
1191
+ attribute stroke-opacity { "inherit" | xsd:string }?)
1192
+ & (attribute fill { "none" | rfc-color }?,
1193
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
1194
+ attribute stroke { rfc-color }?,
1195
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
1196
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
1197
+ attribute stroke-linecap {
1198
+ "butt" | "round" | "square" | "inherit"
1199
+ }?,
1200
+ attribute stroke-linejoin {
1201
+ "miter" | "round" | "bevel" | "inherit"
1202
+ }?,
1203
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
1204
+ attribute stroke-width { "inherit" | xsd:string }?,
1205
+ attribute color { rfc-color }?,
1206
+ attribute color-rendering {
1207
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
1208
+ }?)
1209
+ & attribute vector-effect {
1210
+ "none" | "non-scaling-stroke" | "inherit"
1211
+ }?
1212
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
1213
+ attribute unicode-bidi {
1214
+ "normal" | "embed" | "bidi-override" | "inherit"
1215
+ }?)
1216
+ & (attribute solid-color { rfc-color }?,
1217
+ attribute solid-opacity { "inherit" | xsd:string }?)
1218
+ & (attribute display-align {
1219
+ "auto" | "before" | "center" | "after" | "inherit"
1220
+ }?,
1221
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
1222
+ & (attribute stop-color { rfc-color }?,
1223
+ attribute stop-opacity { "inherit" | xsd:string }?)
1224
+ & (attribute font-family { "inherit" | xsd:string }?,
1225
+ attribute font-size { "inherit" | xsd:string }?,
1226
+ attribute font-style {
1227
+ "normal" | "italic" | "oblique" | "inherit"
1228
+ }?,
1229
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
1230
+ attribute font-weight {
1231
+
1232
+
1233
+
1234
+ Brownlee Informational [Page 22]
1235
+
1236
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
1237
+
1238
+
1239
+ "normal"
1240
+ | "bold"
1241
+ | "bolder"
1242
+ | "lighter"
1243
+ | "inherit"
1244
+ }?,
1245
+ attribute text-anchor {
1246
+ "start" | "middle" | "end" | "inherit"
1247
+ }?,
1248
+ attribute text-align {
1249
+ "start" | "center" | "end" | "inherit"
1250
+ }?)),
1251
+ attribute requiredFeatures { xsd:string }?,
1252
+ attribute requiredExtensions { xsd:string }?,
1253
+ attribute requiredFormats { xsd:string }?,
1254
+ attribute requiredFonts { xsd:string }?,
1255
+ attribute systemLanguage { xsd:string }?,
1256
+ attribute x1 { xsd:string }?,
1257
+ attribute y1 { xsd:string }?,
1258
+ attribute x2 { xsd:string }?,
1259
+ attribute y2 { xsd:string }?,
1260
+ (desc
1261
+ | svgTitle)*
1262
+ }
1263
+ ellipse =
1264
+ element ellipse {
1265
+ (attribute id { xsd:NCName }
1266
+ | attribute xml:id { xsd:NCName })?,
1267
+ attribute xml:base { xsd:anyURI | xsd:string }?,
1268
+ attribute xml:lang { xsd:language? }?,
1269
+ attribute class { xsd:NMTOKENS }?,
1270
+ attribute role { xsd:string }?,
1271
+ attribute rel { xsd:string }?,
1272
+ attribute rev { xsd:string }?,
1273
+ attribute typeof { xsd:string }?,
1274
+ attribute content { xsd:string }?,
1275
+ attribute datatype { xsd:string }?,
1276
+ attribute resource { xsd:string }?,
1277
+ attribute about { xsd:string }?,
1278
+ attribute property { xsd:string }?,
1279
+ attribute xml:space { "default" | "preserve" }?,
1280
+ attribute transform { xsd:string | "none" }?,
1281
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
1282
+ attribute stroke-opacity { "inherit" | xsd:string }?)
1283
+ & (attribute fill { "none" | rfc-color }?,
1284
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
1285
+ attribute stroke { rfc-color }?,
1286
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
1287
+
1288
+
1289
+
1290
+ Brownlee Informational [Page 23]
1291
+
1292
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
1293
+
1294
+
1295
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
1296
+ attribute stroke-linecap {
1297
+ "butt" | "round" | "square" | "inherit"
1298
+ }?,
1299
+ attribute stroke-linejoin {
1300
+ "miter" | "round" | "bevel" | "inherit"
1301
+ }?,
1302
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
1303
+ attribute stroke-width { "inherit" | xsd:string }?,
1304
+ attribute color { rfc-color }?,
1305
+ attribute color-rendering {
1306
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
1307
+ }?)
1308
+ & attribute vector-effect {
1309
+ "none" | "non-scaling-stroke" | "inherit"
1310
+ }?
1311
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
1312
+ attribute unicode-bidi {
1313
+ "normal" | "embed" | "bidi-override" | "inherit"
1314
+ }?)
1315
+ & (attribute solid-color { rfc-color }?,
1316
+ attribute solid-opacity { "inherit" | xsd:string }?)
1317
+ & (attribute display-align {
1318
+ "auto" | "before" | "center" | "after" | "inherit"
1319
+ }?,
1320
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
1321
+ & (attribute stop-color { rfc-color }?,
1322
+ attribute stop-opacity { "inherit" | xsd:string }?)
1323
+ & (attribute font-family { "inherit" | xsd:string }?,
1324
+ attribute font-size { "inherit" | xsd:string }?,
1325
+ attribute font-style {
1326
+ "normal" | "italic" | "oblique" | "inherit"
1327
+ }?,
1328
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
1329
+ attribute font-weight {
1330
+ "normal"
1331
+ | "bold"
1332
+ | "bolder"
1333
+ | "lighter"
1334
+ | "inherit"
1335
+ }?,
1336
+ attribute text-anchor {
1337
+ "start" | "middle" | "end" | "inherit"
1338
+ }?,
1339
+ attribute text-align {
1340
+ "start" | "center" | "end" | "inherit"
1341
+ }?)),
1342
+ attribute requiredFeatures { xsd:string }?,
1343
+
1344
+
1345
+
1346
+ Brownlee Informational [Page 24]
1347
+
1348
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
1349
+
1350
+
1351
+ attribute requiredExtensions { xsd:string }?,
1352
+ attribute requiredFormats { xsd:string }?,
1353
+ attribute requiredFonts { xsd:string }?,
1354
+ attribute systemLanguage { xsd:string }?,
1355
+ attribute rx { xsd:string }?,
1356
+ attribute ry { xsd:string }?,
1357
+ attribute cx { xsd:string }?,
1358
+ attribute cy { xsd:string }?,
1359
+ attribute style { xsd:string }?, # Added to SVG-1.2-RFC (Inkscape)
1360
+ (desc
1361
+ | svgTitle)*
1362
+ }
1363
+ polyline =
1364
+ element polyline {
1365
+ (attribute id { xsd:NCName }
1366
+ | attribute xml:id { xsd:NCName })?,
1367
+ attribute xml:base { xsd:anyURI | xsd:string }?,
1368
+ attribute xml:lang { xsd:language? }?,
1369
+ attribute class { xsd:NMTOKENS }?,
1370
+ attribute role { xsd:string }?,
1371
+ attribute rel { xsd:string }?,
1372
+ attribute rev { xsd:string }?,
1373
+ attribute typeof { xsd:string }?,
1374
+ attribute content { xsd:string }?,
1375
+ attribute datatype { xsd:string }?,
1376
+ attribute resource { xsd:string }?,
1377
+ attribute about { xsd:string }?,
1378
+ attribute property { xsd:string }?,
1379
+ attribute xml:space { "default" | "preserve" }?,
1380
+ attribute transform { xsd:string | "none" }?,
1381
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
1382
+ attribute stroke-opacity { "inherit" | xsd:string }?)
1383
+ & (attribute fill { "none" | rfc-color }?,
1384
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
1385
+ attribute stroke { rfc-color }?,
1386
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
1387
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
1388
+ attribute stroke-linecap {
1389
+ "butt" | "round" | "square" | "inherit"
1390
+ }?,
1391
+ attribute stroke-linejoin {
1392
+ "miter" | "round" | "bevel" | "inherit"
1393
+ }?,
1394
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
1395
+ attribute stroke-width { "inherit" | xsd:string }?,
1396
+ attribute color { rfc-color }?,
1397
+ attribute color-rendering {
1398
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
1399
+
1400
+
1401
+
1402
+ Brownlee Informational [Page 25]
1403
+
1404
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
1405
+
1406
+
1407
+ }?)
1408
+ & attribute vector-effect {
1409
+ "none" | "non-scaling-stroke" | "inherit"
1410
+ }?
1411
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
1412
+ attribute unicode-bidi {
1413
+ "normal" | "embed" | "bidi-override" | "inherit"
1414
+ }?)
1415
+ & (attribute solid-color { rfc-color }?,
1416
+ attribute solid-opacity { "inherit" | xsd:string }?)
1417
+ & (attribute display-align {
1418
+ "auto" | "before" | "center" | "after" | "inherit"
1419
+ }?,
1420
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
1421
+ & (attribute stop-color { rfc-color }?,
1422
+ attribute stop-opacity { "inherit" | xsd:string }?)
1423
+ & (attribute font-family { "inherit" | xsd:string }?,
1424
+ attribute font-size { "inherit" | xsd:string }?,
1425
+ attribute font-style {
1426
+ "normal" | "italic" | "oblique" | "inherit"
1427
+ }?,
1428
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
1429
+ attribute font-weight {
1430
+ "normal"
1431
+ | "bold"
1432
+ | "bolder"
1433
+ | "lighter"
1434
+ | "inherit"
1435
+ }?,
1436
+ attribute text-anchor {
1437
+ "start" | "middle" | "end" | "inherit"
1438
+ }?,
1439
+ attribute text-align {
1440
+ "start" | "center" | "end" | "inherit"
1441
+ }?)),
1442
+ attribute requiredFeatures { xsd:string }?,
1443
+ attribute requiredExtensions { xsd:string }?,
1444
+ attribute requiredFormats { xsd:string }?,
1445
+ attribute requiredFonts { xsd:string }?,
1446
+ attribute systemLanguage { xsd:string }?,
1447
+ attribute points { xsd:string }?,
1448
+ (desc
1449
+ | svgTitle)*
1450
+ }
1451
+ polygon =
1452
+ element polygon {
1453
+ (attribute id { xsd:NCName }
1454
+ | attribute xml:id { xsd:NCName })?,
1455
+
1456
+
1457
+
1458
+ Brownlee Informational [Page 26]
1459
+
1460
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
1461
+
1462
+
1463
+ attribute xml:base { xsd:anyURI | xsd:string }?,
1464
+ attribute xml:lang { xsd:language? }?,
1465
+ attribute class { xsd:NMTOKENS }?,
1466
+ attribute role { xsd:string }?,
1467
+ attribute rel { xsd:string }?,
1468
+ attribute rev { xsd:string }?,
1469
+ attribute typeof { xsd:string }?,
1470
+ attribute content { xsd:string }?,
1471
+ attribute datatype { xsd:string }?,
1472
+ attribute resource { xsd:string }?,
1473
+ attribute about { xsd:string }?,
1474
+ attribute property { xsd:string }?,
1475
+ attribute xml:space { "default" | "preserve" }?,
1476
+ attribute transform { xsd:string | "none" }?,
1477
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
1478
+ attribute stroke-opacity { "inherit" | xsd:string }?)
1479
+ & (attribute fill { "none" | rfc-color }?,
1480
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
1481
+ attribute stroke { rfc-color }?,
1482
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
1483
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
1484
+ attribute stroke-linecap {
1485
+ "butt" | "round" | "square" | "inherit"
1486
+ }?,
1487
+ attribute stroke-linejoin {
1488
+ "miter" | "round" | "bevel" | "inherit"
1489
+ }?,
1490
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
1491
+ attribute stroke-width { "inherit" | xsd:string }?,
1492
+ attribute color { rfc-color }?,
1493
+ attribute color-rendering {
1494
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
1495
+ }?)
1496
+ & attribute vector-effect {
1497
+ "none" | "non-scaling-stroke" | "inherit"
1498
+ }?
1499
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
1500
+ attribute unicode-bidi {
1501
+ "normal" | "embed" | "bidi-override" | "inherit"
1502
+ }?)
1503
+ & (attribute solid-color { rfc-color }?,
1504
+ attribute solid-opacity { "inherit" | xsd:string }?)
1505
+ & (attribute display-align {
1506
+ "auto" | "before" | "center" | "after" | "inherit"
1507
+ }?,
1508
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
1509
+ & (attribute stop-color { rfc-color }?,
1510
+ attribute stop-opacity { "inherit" | xsd:string }?)
1511
+
1512
+
1513
+
1514
+ Brownlee Informational [Page 27]
1515
+
1516
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
1517
+
1518
+
1519
+ & (attribute font-family { "inherit" | xsd:string }?,
1520
+ attribute font-size { "inherit" | xsd:string }?,
1521
+ attribute font-style {
1522
+ "normal" | "italic" | "oblique" | "inherit"
1523
+ }?,
1524
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
1525
+ attribute font-weight {
1526
+ "normal"
1527
+ | "bold"
1528
+ | "bolder"
1529
+ | "lighter"
1530
+ | "inherit"
1531
+ }?,
1532
+ attribute text-anchor {
1533
+ "start" | "middle" | "end" | "inherit"
1534
+ }?,
1535
+ attribute text-align {
1536
+ "start" | "center" | "end" | "inherit"
1537
+ }?)),
1538
+ attribute requiredFeatures { xsd:string }?,
1539
+ attribute requiredExtensions { xsd:string }?,
1540
+ attribute requiredFormats { xsd:string }?,
1541
+ attribute requiredFonts { xsd:string }?,
1542
+ attribute systemLanguage { xsd:string }?,
1543
+ attribute points { xsd:string }?,
1544
+ attribute style { xsd:string }?, # Added to SVG-1.2-RFC (Inkscape)
1545
+ (desc
1546
+ | svgTitle)*
1547
+ }
1548
+ solidColor =
1549
+ element solidColor {
1550
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
1551
+ attribute stroke-opacity { "inherit" | xsd:string }?)
1552
+ & (attribute fill { "none" | rfc-color }?,
1553
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
1554
+ attribute stroke { rfc-color }?,
1555
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
1556
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
1557
+ attribute stroke-linecap {
1558
+ "butt" | "round" | "square" | "inherit"
1559
+ }?,
1560
+ attribute stroke-linejoin {
1561
+ "miter" | "round" | "bevel" | "inherit"
1562
+ }?,
1563
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
1564
+ attribute stroke-width { "inherit" | xsd:string }?,
1565
+ attribute color { rfc-color }?,
1566
+ attribute color-rendering {
1567
+
1568
+
1569
+
1570
+ Brownlee Informational [Page 28]
1571
+
1572
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
1573
+
1574
+
1575
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
1576
+ }?)
1577
+ & attribute vector-effect {
1578
+ "none" | "non-scaling-stroke" | "inherit"
1579
+ }?
1580
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
1581
+ attribute unicode-bidi {
1582
+ "normal" | "embed" | "bidi-override" | "inherit"
1583
+ }?)
1584
+ & (attribute solid-color { rfc-color }?,
1585
+ attribute solid-opacity { "inherit" | xsd:string }?)
1586
+ & (attribute display-align {
1587
+ "auto" | "before" | "center" | "after" | "inherit"
1588
+ }?,
1589
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
1590
+ & (attribute stop-color { rfc-color }?,
1591
+ attribute stop-opacity { "inherit" | xsd:string }?)
1592
+ & (attribute font-family { "inherit" | xsd:string }?,
1593
+ attribute font-size { "inherit" | xsd:string }?,
1594
+ attribute font-style {
1595
+ "normal" | "italic" | "oblique" | "inherit"
1596
+ }?,
1597
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
1598
+ attribute font-weight {
1599
+ "normal"
1600
+ | "bold"
1601
+ | "bolder"
1602
+ | "lighter"
1603
+ | "inherit"
1604
+ }?,
1605
+ attribute text-anchor {
1606
+ "start" | "middle" | "end" | "inherit"
1607
+ }?,
1608
+ attribute text-align {
1609
+ "start" | "center" | "end" | "inherit"
1610
+ }?)),
1611
+ (attribute id { xsd:NCName }
1612
+ | attribute xml:id { xsd:NCName })?,
1613
+ attribute xml:base { xsd:anyURI | xsd:string }?,
1614
+ attribute xml:lang { xsd:language? }?,
1615
+ attribute class { xsd:NMTOKENS }?,
1616
+ attribute role { xsd:string }?,
1617
+ attribute rel { xsd:string }?,
1618
+ attribute rev { xsd:string }?,
1619
+ attribute typeof { xsd:string }?,
1620
+ attribute content { xsd:string }?,
1621
+ attribute datatype { xsd:string }?,
1622
+ attribute resource { xsd:string }?,
1623
+
1624
+
1625
+
1626
+ Brownlee Informational [Page 29]
1627
+
1628
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
1629
+
1630
+
1631
+ attribute about { xsd:string }?,
1632
+ attribute property { xsd:string }?,
1633
+ attribute xml:space { "default" | "preserve" }?,
1634
+ (desc
1635
+ | svgTitle)*
1636
+ }
1637
+ textArea =
1638
+ element textArea {
1639
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
1640
+ attribute stroke-opacity { "inherit" | xsd:string }?)
1641
+ & (attribute fill { "none" | rfc-color }?,
1642
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
1643
+ attribute stroke { rfc-color }?,
1644
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
1645
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
1646
+ attribute stroke-linecap {
1647
+ "butt" | "round" | "square" | "inherit"
1648
+ }?,
1649
+ attribute stroke-linejoin {
1650
+ "miter" | "round" | "bevel" | "inherit"
1651
+ }?,
1652
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
1653
+ attribute stroke-width { "inherit" | xsd:string }?,
1654
+ attribute color { rfc-color }?,
1655
+ attribute color-rendering {
1656
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
1657
+ }?)
1658
+ & attribute vector-effect {
1659
+ "none" | "non-scaling-stroke" | "inherit"
1660
+ }?
1661
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
1662
+ attribute unicode-bidi {
1663
+ "normal" | "embed" | "bidi-override" | "inherit"
1664
+ }?)
1665
+ & (attribute solid-color { rfc-color }?,
1666
+ attribute solid-opacity { "inherit" | xsd:string }?)
1667
+ & (attribute display-align {
1668
+ "auto" | "before" | "center" | "after" | "inherit"
1669
+ }?,
1670
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
1671
+ & (attribute stop-color { rfc-color }?,
1672
+ attribute stop-opacity { "inherit" | xsd:string }?)
1673
+ & (attribute font-family { "inherit" | xsd:string }?,
1674
+ attribute font-size { "inherit" | xsd:string }?,
1675
+ attribute font-style {
1676
+ "normal" | "italic" | "oblique" | "inherit"
1677
+ }?,
1678
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
1679
+
1680
+
1681
+
1682
+ Brownlee Informational [Page 30]
1683
+
1684
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
1685
+
1686
+
1687
+ attribute font-weight {
1688
+ "normal"
1689
+ | "bold"
1690
+ | "bolder"
1691
+ | "lighter"
1692
+ | "inherit"
1693
+ }?,
1694
+ attribute text-anchor {
1695
+ "start" | "middle" | "end" | "inherit"
1696
+ }?,
1697
+ attribute text-align {
1698
+ "start" | "center" | "end" | "inherit"
1699
+ }?)),
1700
+ (attribute id { xsd:NCName }
1701
+ | attribute xml:id { xsd:NCName })?,
1702
+ attribute xml:base { xsd:anyURI | xsd:string }?,
1703
+ attribute xml:lang { xsd:language? }?,
1704
+ attribute class { xsd:NMTOKENS }?,
1705
+ attribute role { xsd:string }?,
1706
+ attribute rel { xsd:string }?,
1707
+ attribute rev { xsd:string }?,
1708
+ attribute typeof { xsd:string }?,
1709
+ attribute content { xsd:string }?,
1710
+ attribute datatype { xsd:string }?,
1711
+ attribute resource { xsd:string }?,
1712
+ attribute about { xsd:string }?,
1713
+ attribute property { xsd:string }?,
1714
+ attribute xml:space { "default" | "preserve" }?,
1715
+ attribute requiredFeatures { xsd:string }?,
1716
+ attribute requiredExtensions { xsd:string }?,
1717
+ attribute requiredFormats { xsd:string }?,
1718
+ attribute requiredFonts { xsd:string }?,
1719
+ attribute systemLanguage { xsd:string }?,
1720
+ attribute transform { xsd:string | "none" }?,
1721
+ attribute x { xsd:string }?,
1722
+ attribute y { xsd:string }?,
1723
+ attribute width { xsd:string | "auto" }?,
1724
+ attribute height { xsd:string | "auto" }?,
1725
+ (tspan
1726
+ | desc
1727
+ | svgTitle
1728
+ | tspan_2
1729
+ | text
1730
+ | a_2)+
1731
+ }
1732
+ linearGradient =
1733
+ element linearGradient {
1734
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
1735
+
1736
+
1737
+
1738
+ Brownlee Informational [Page 31]
1739
+
1740
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
1741
+
1742
+
1743
+ attribute stroke-opacity { "inherit" | xsd:string }?)
1744
+ & (attribute fill { "none" | rfc-color }?,
1745
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
1746
+ attribute stroke { rfc-color }?,
1747
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
1748
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
1749
+ attribute stroke-linecap {
1750
+ "butt" | "round" | "square" | "inherit"
1751
+ }?,
1752
+ attribute stroke-linejoin {
1753
+ "miter" | "round" | "bevel" | "inherit"
1754
+ }?,
1755
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
1756
+ attribute stroke-width { "inherit" | xsd:string }?,
1757
+ attribute color { rfc-color }?,
1758
+ attribute color-rendering {
1759
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
1760
+ }?)
1761
+ & attribute vector-effect {
1762
+ "none" | "non-scaling-stroke" | "inherit"
1763
+ }?
1764
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
1765
+ attribute unicode-bidi {
1766
+ "normal" | "embed" | "bidi-override" | "inherit"
1767
+ }?)
1768
+ & (attribute solid-color { rfc-color }?,
1769
+ attribute solid-opacity { "inherit" | xsd:string }?)
1770
+ & (attribute display-align {
1771
+ "auto" | "before" | "center" | "after" | "inherit"
1772
+ }?,
1773
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
1774
+ & (attribute stop-color { rfc-color }?,
1775
+ attribute stop-opacity { "inherit" | xsd:string }?)
1776
+ & (attribute font-family { "inherit" | xsd:string }?,
1777
+ attribute font-size { "inherit" | xsd:string }?,
1778
+ attribute font-style {
1779
+ "normal" | "italic" | "oblique" | "inherit"
1780
+ }?,
1781
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
1782
+ attribute font-weight {
1783
+ "normal"
1784
+ | "bold"
1785
+ | "bolder"
1786
+ | "lighter"
1787
+ | "inherit"
1788
+ }?,
1789
+ attribute text-anchor {
1790
+ "start" | "middle" | "end" | "inherit"
1791
+
1792
+
1793
+
1794
+ Brownlee Informational [Page 32]
1795
+
1796
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
1797
+
1798
+
1799
+ }?,
1800
+ attribute text-align {
1801
+ "start" | "center" | "end" | "inherit"
1802
+ }?)),
1803
+ attribute gradientUnits { "userSpaceOnUse" | "objectBoundingBox" }?,
1804
+ (attribute id { xsd:NCName }
1805
+ | attribute xml:id { xsd:NCName })?,
1806
+ attribute xml:base { xsd:anyURI | xsd:string }?,
1807
+ attribute xml:lang { xsd:language? }?,
1808
+ attribute class { xsd:NMTOKENS }?,
1809
+ attribute role { xsd:string }?,
1810
+ attribute rel { xsd:string }?,
1811
+ attribute rev { xsd:string }?,
1812
+ attribute typeof { xsd:string }?,
1813
+ attribute content { xsd:string }?,
1814
+ attribute datatype { xsd:string }?,
1815
+ attribute resource { xsd:string }?,
1816
+ attribute about { xsd:string }?,
1817
+ attribute property { xsd:string }?,
1818
+ attribute xml:space { "default" | "preserve" }?,
1819
+ attribute x1 { xsd:string }?,
1820
+ attribute y1 { xsd:string }?,
1821
+ attribute x2 { xsd:string }?,
1822
+ attribute y2 { xsd:string }?,
1823
+ (desc
1824
+ | svgTitle)*
1825
+ }
1826
+ radialGradient =
1827
+ element radialGradient {
1828
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
1829
+ attribute stroke-opacity { "inherit" | xsd:string }?)
1830
+ & (attribute fill { "none" | rfc-color }?,
1831
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
1832
+ attribute stroke { rfc-color }?,
1833
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
1834
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
1835
+ attribute stroke-linecap {
1836
+ "butt" | "round" | "square" | "inherit"
1837
+ }?,
1838
+ attribute stroke-linejoin {
1839
+ "miter" | "round" | "bevel" | "inherit"
1840
+ }?,
1841
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
1842
+ attribute stroke-width { "inherit" | xsd:string }?,
1843
+ attribute color { rfc-color }?,
1844
+ attribute color-rendering {
1845
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
1846
+ }?)
1847
+
1848
+
1849
+
1850
+ Brownlee Informational [Page 33]
1851
+
1852
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
1853
+
1854
+
1855
+ & attribute vector-effect {
1856
+ "none" | "non-scaling-stroke" | "inherit"
1857
+ }?
1858
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
1859
+ attribute unicode-bidi {
1860
+ "normal" | "embed" | "bidi-override" | "inherit"
1861
+ }?)
1862
+ & (attribute solid-color { rfc-color }?,
1863
+ attribute solid-opacity { "inherit" | xsd:string }?)
1864
+ & (attribute display-align {
1865
+ "auto" | "before" | "center" | "after" | "inherit"
1866
+ }?,
1867
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
1868
+ & (attribute stop-color { rfc-color }?,
1869
+ attribute stop-opacity { "inherit" | xsd:string }?)
1870
+ & (attribute font-family { "inherit" | xsd:string }?,
1871
+ attribute font-size { "inherit" | xsd:string }?,
1872
+ attribute font-style {
1873
+ "normal" | "italic" | "oblique" | "inherit"
1874
+ }?,
1875
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
1876
+ attribute font-weight {
1877
+ "normal"
1878
+ | "bold"
1879
+ | "bolder"
1880
+ | "lighter"
1881
+ | "inherit"
1882
+ }?,
1883
+ attribute text-anchor {
1884
+ "start" | "middle" | "end" | "inherit"
1885
+ }?,
1886
+ attribute text-align {
1887
+ "start" | "center" | "end" | "inherit"
1888
+ }?)),
1889
+ attribute gradientUnits { "userSpaceOnUse" | "objectBoundingBox" }?,
1890
+ (attribute id { xsd:NCName }
1891
+ | attribute xml:id { xsd:NCName })?,
1892
+ attribute xml:base { xsd:anyURI | xsd:string }?,
1893
+ attribute xml:lang { xsd:language? }?,
1894
+ attribute class { xsd:NMTOKENS }?,
1895
+ attribute role { xsd:string }?,
1896
+ attribute rel { xsd:string }?,
1897
+ attribute rev { xsd:string }?,
1898
+ attribute typeof { xsd:string }?,
1899
+ attribute content { xsd:string }?,
1900
+ attribute datatype { xsd:string }?,
1901
+ attribute resource { xsd:string }?,
1902
+ attribute about { xsd:string }?,
1903
+
1904
+
1905
+
1906
+ Brownlee Informational [Page 34]
1907
+
1908
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
1909
+
1910
+
1911
+ attribute property { xsd:string }?,
1912
+ attribute xml:space { "default" | "preserve" }?,
1913
+ attribute cx { xsd:string }?,
1914
+ attribute cy { xsd:string }?,
1915
+ attribute r { xsd:string }?,
1916
+ (desc
1917
+ | svgTitle)*
1918
+ }
1919
+ \text =
1920
+ element text {
1921
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
1922
+ attribute stroke-opacity { "inherit" | xsd:string }?)
1923
+ & (attribute fill { "none" | rfc-color }?,
1924
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
1925
+ attribute stroke { rfc-color }?,
1926
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
1927
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
1928
+ attribute stroke-linecap {
1929
+ "butt" | "round" | "square" | "inherit"
1930
+ }?,
1931
+ attribute stroke-linejoin {
1932
+ "miter" | "round" | "bevel" | "inherit"
1933
+ }?,
1934
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
1935
+ attribute stroke-width { "inherit" | xsd:string }?,
1936
+ attribute color { rfc-color }?,
1937
+ attribute color-rendering {
1938
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
1939
+ }?)
1940
+ & attribute vector-effect {
1941
+ "none" | "non-scaling-stroke" | "inherit"
1942
+ }?
1943
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
1944
+ attribute unicode-bidi {
1945
+ "normal" | "embed" | "bidi-override" | "inherit"
1946
+ }?)
1947
+ & (attribute solid-color { rfc-color }?,
1948
+ attribute solid-opacity { "inherit" | xsd:string }?)
1949
+ & (attribute display-align {
1950
+ "auto" | "before" | "center" | "after" | "inherit"
1951
+ }?,
1952
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
1953
+ & (attribute stop-color { rfc-color }?,
1954
+ attribute stop-opacity { "inherit" | xsd:string }?)
1955
+ & (attribute font-family { "inherit" | xsd:string }?,
1956
+ attribute font-size { "inherit" | xsd:string }?,
1957
+ attribute font-style {
1958
+ "normal" | "italic" | "oblique" | "inherit"
1959
+
1960
+
1961
+
1962
+ Brownlee Informational [Page 35]
1963
+
1964
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
1965
+
1966
+
1967
+ }?,
1968
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
1969
+ attribute font-weight {
1970
+ "normal"
1971
+ | "bold"
1972
+ | "bolder"
1973
+ | "lighter"
1974
+ | "inherit"
1975
+ }?,
1976
+ attribute text-anchor {
1977
+ "start" | "middle" | "end" | "inherit"
1978
+ }?,
1979
+ attribute text-align {
1980
+ "start" | "center" | "end" | "inherit"
1981
+ }?)),
1982
+ (attribute id { xsd:NCName }
1983
+ | attribute xml:id { xsd:NCName })?,
1984
+ attribute xml:base { xsd:anyURI | xsd:string }?,
1985
+ attribute xml:lang { xsd:language? }?,
1986
+ attribute class { xsd:NMTOKENS }?,
1987
+ attribute role { xsd:string }?,
1988
+ attribute rel { xsd:string }?,
1989
+ attribute rev { xsd:string }?,
1990
+ attribute typeof { xsd:string }?,
1991
+ attribute content { xsd:string }?,
1992
+ attribute datatype { xsd:string }?,
1993
+ attribute resource { xsd:string }?,
1994
+ attribute about { xsd:string }?,
1995
+ attribute property { xsd:string }?,
1996
+ attribute xml:space { "default" | "preserve" }?,
1997
+ attribute requiredFeatures { xsd:string }?,
1998
+ attribute requiredExtensions { xsd:string }?,
1999
+ attribute requiredFormats { xsd:string }?,
2000
+ attribute requiredFonts { xsd:string }?,
2001
+ attribute systemLanguage { xsd:string }?,
2002
+ attribute transform { xsd:string | "none" }?,
2003
+ attribute x { xsd:string }?,
2004
+ attribute y { xsd:string }?,
2005
+ attribute rotate { xsd:string }?,
2006
+ attribute style { xsd:string }?, # Added to SVG-1.2-RFC (Inkscape)
2007
+ (desc
2008
+ | svgTitle
2009
+ | tspan_2
2010
+ | text
2011
+ | a_2)+
2012
+ }
2013
+ g =
2014
+ element g {
2015
+
2016
+
2017
+
2018
+ Brownlee Informational [Page 36]
2019
+
2020
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
2021
+
2022
+
2023
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
2024
+ attribute stroke-opacity { "inherit" | xsd:string }?)
2025
+ & (attribute fill { "none" | rfc-color }?,
2026
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
2027
+ attribute stroke { rfc-color }?,
2028
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
2029
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
2030
+ attribute stroke-linecap {
2031
+ "butt" | "round" | "square" | "inherit"
2032
+ }?,
2033
+ attribute stroke-linejoin {
2034
+ "miter" | "round" | "bevel" | "inherit"
2035
+ }?,
2036
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
2037
+ attribute stroke-width { "inherit" | xsd:string }?,
2038
+ attribute color { rfc-color }?,
2039
+ attribute color-rendering {
2040
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
2041
+ }?)
2042
+ & attribute vector-effect {
2043
+ "none" | "non-scaling-stroke" | "inherit"
2044
+ }?
2045
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
2046
+ attribute unicode-bidi {
2047
+ "normal" | "embed" | "bidi-override" | "inherit"
2048
+ }?)
2049
+ & (attribute solid-color { rfc-color }?,
2050
+ attribute solid-opacity { "inherit" | xsd:string }?)
2051
+ & (attribute display-align {
2052
+ "auto" | "before" | "center" | "after" | "inherit"
2053
+ }?,
2054
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
2055
+ & (attribute stop-color { rfc-color }?,
2056
+ attribute stop-opacity { "inherit" | xsd:string }?)
2057
+ & (attribute font-family { "inherit" | xsd:string }?,
2058
+ attribute font-size { "inherit" | xsd:string }?,
2059
+ attribute font-style {
2060
+ "normal" | "italic" | "oblique" | "inherit"
2061
+ }?,
2062
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
2063
+ attribute font-weight {
2064
+ "normal"
2065
+ | "bold"
2066
+ | "bolder"
2067
+ | "lighter"
2068
+ | "inherit"
2069
+ }?,
2070
+ attribute text-anchor {
2071
+
2072
+
2073
+
2074
+ Brownlee Informational [Page 37]
2075
+
2076
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
2077
+
2078
+
2079
+ "start" | "middle" | "end" | "inherit"
2080
+ }?,
2081
+ attribute text-align {
2082
+ "start" | "center" | "end" | "inherit"
2083
+ }?)),
2084
+ (attribute id { xsd:NCName }
2085
+ | attribute xml:id { xsd:NCName })?,
2086
+ attribute xml:base { xsd:anyURI | xsd:string }?,
2087
+ attribute xml:lang { xsd:language? }?,
2088
+ attribute class { xsd:NMTOKENS }?,
2089
+ attribute role { xsd:string }?,
2090
+ attribute rel { xsd:string }?,
2091
+ attribute rev { xsd:string }?,
2092
+ attribute typeof { xsd:string }?,
2093
+ attribute content { xsd:string }?,
2094
+ attribute datatype { xsd:string }?,
2095
+ attribute resource { xsd:string }?,
2096
+ attribute about { xsd:string }?,
2097
+ attribute property { xsd:string }?,
2098
+ attribute xml:space { "default" | "preserve" }?,
2099
+ attribute requiredFeatures { xsd:string }?,
2100
+ attribute requiredExtensions { xsd:string }?,
2101
+ attribute requiredFormats { xsd:string }?,
2102
+ attribute requiredFonts { xsd:string }?,
2103
+ attribute systemLanguage { xsd:string }?,
2104
+ attribute transform { xsd:string | "none" }?,
2105
+ attribute style { xsd:string }?,
2106
+ # Added to SVG-1.2-RFC (for Inkscape)
2107
+ attribute visibility {
2108
+ "visible" | "hidden" | "collapse" | "inherit" }?,
2109
+ # Added to SVG-1.2-RFC (for LibreOffice)
2110
+ (desc
2111
+ | svgTitle
2112
+ | path
2113
+ | rect
2114
+ | circle
2115
+ | line
2116
+ | ellipse
2117
+ | polyline
2118
+ | polygon
2119
+ | solidColor
2120
+ | textArea
2121
+ | linearGradient
2122
+ | radialGradient
2123
+ | \text
2124
+ | g
2125
+ | defs
2126
+ | use
2127
+
2128
+
2129
+
2130
+ Brownlee Informational [Page 38]
2131
+
2132
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
2133
+
2134
+
2135
+ | a)*
2136
+ }
2137
+ defs =
2138
+ element defs {
2139
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
2140
+ attribute stroke-opacity { "inherit" | xsd:string }?)
2141
+ & (attribute fill { "none" | rfc-color }?,
2142
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
2143
+ attribute stroke { rfc-color }?,
2144
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
2145
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
2146
+ attribute stroke-linecap {
2147
+ "butt" | "round" | "square" | "inherit"
2148
+ }?,
2149
+ attribute stroke-linejoin {
2150
+ "miter" | "round" | "bevel" | "inherit"
2151
+ }?,
2152
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
2153
+ attribute stroke-width { "inherit" | xsd:string }?,
2154
+ attribute color { rfc-color }?,
2155
+ attribute color-rendering {
2156
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
2157
+ }?)
2158
+ & attribute vector-effect {
2159
+ "none" | "non-scaling-stroke" | "inherit"
2160
+ }?
2161
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
2162
+ attribute unicode-bidi {
2163
+ "normal" | "embed" | "bidi-override" | "inherit"
2164
+ }?)
2165
+ & (attribute solid-color { rfc-color }?,
2166
+ attribute solid-opacity { "inherit" | xsd:string }?)
2167
+ & (attribute display-align {
2168
+ "auto" | "before" | "center" | "after" | "inherit"
2169
+ }?,
2170
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
2171
+ & (attribute stop-color { rfc-color }?,
2172
+ attribute stop-opacity { "inherit" | xsd:string }?)
2173
+ & (attribute font-family { "inherit" | xsd:string }?,
2174
+ attribute font-size { "inherit" | xsd:string }?,
2175
+ attribute font-style {
2176
+ "normal" | "italic" | "oblique" | "inherit"
2177
+ }?,
2178
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
2179
+ attribute font-weight {
2180
+ "normal"
2181
+ | "bold"
2182
+ | "bolder"
2183
+
2184
+
2185
+
2186
+ Brownlee Informational [Page 39]
2187
+
2188
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
2189
+
2190
+
2191
+ | "lighter"
2192
+ | "inherit"
2193
+ }?,
2194
+ attribute text-anchor {
2195
+ "start" | "middle" | "end" | "inherit"
2196
+ }?,
2197
+ attribute text-align {
2198
+ "start" | "center" | "end" | "inherit"
2199
+ }?)),
2200
+ (attribute id { xsd:NCName }
2201
+ | attribute xml:id { xsd:NCName })?,
2202
+ attribute xml:base { xsd:anyURI | xsd:string }?,
2203
+ attribute xml:lang { xsd:language? }?,
2204
+ attribute class { xsd:NMTOKENS }?,
2205
+ attribute role { xsd:string }?,
2206
+ attribute rel { xsd:string }?,
2207
+ attribute rev { xsd:string }?,
2208
+ attribute typeof { xsd:string }?,
2209
+ attribute content { xsd:string }?,
2210
+ attribute datatype { xsd:string }?,
2211
+ attribute resource { xsd:string }?,
2212
+ attribute about { xsd:string }?,
2213
+ attribute property { xsd:string }?,
2214
+ attribute xml:space { "default" | "preserve" }?,
2215
+ (desc
2216
+ | svgTitle
2217
+ | path
2218
+ | rect
2219
+ | circle
2220
+ | line
2221
+ | ellipse
2222
+ | polyline
2223
+ | polygon
2224
+ | solidColor
2225
+ | textArea
2226
+ | linearGradient
2227
+ | radialGradient
2228
+ | \text
2229
+ | g
2230
+ | defs
2231
+ | use
2232
+ | a)*
2233
+ }
2234
+ use =
2235
+ element use {
2236
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
2237
+ attribute stroke-opacity { "inherit" | xsd:string }?)
2238
+ & (attribute fill { "none" | rfc-color }?,
2239
+
2240
+
2241
+
2242
+ Brownlee Informational [Page 40]
2243
+
2244
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
2245
+
2246
+
2247
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
2248
+ attribute stroke { rfc-color }?,
2249
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
2250
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
2251
+ attribute stroke-linecap {
2252
+ "butt" | "round" | "square" | "inherit"
2253
+ }?,
2254
+ attribute stroke-linejoin {
2255
+ "miter" | "round" | "bevel" | "inherit"
2256
+ }?,
2257
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
2258
+ attribute stroke-width { "inherit" | xsd:string }?,
2259
+ attribute color { rfc-color }?,
2260
+ attribute color-rendering {
2261
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
2262
+ }?)
2263
+ & attribute vector-effect {
2264
+ "none" | "non-scaling-stroke" | "inherit"
2265
+ }?
2266
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
2267
+ attribute unicode-bidi {
2268
+ "normal" | "embed" | "bidi-override" | "inherit"
2269
+ }?)
2270
+ & (attribute solid-color { rfc-color }?,
2271
+ attribute solid-opacity { "inherit" | xsd:string }?)
2272
+ & (attribute display-align {
2273
+ "auto" | "before" | "center" | "after" | "inherit"
2274
+ }?,
2275
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
2276
+ & (attribute stop-color { rfc-color }?,
2277
+ attribute stop-opacity { "inherit" | xsd:string }?)
2278
+ & (attribute font-family { "inherit" | xsd:string }?,
2279
+ attribute font-size { "inherit" | xsd:string }?,
2280
+ attribute font-style {
2281
+ "normal" | "italic" | "oblique" | "inherit"
2282
+ }?,
2283
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
2284
+ attribute font-weight {
2285
+ "normal"
2286
+ | "bold"
2287
+ | "bolder"
2288
+ | "lighter"
2289
+ | "inherit"
2290
+ }?,
2291
+ attribute text-anchor {
2292
+ "start" | "middle" | "end" | "inherit"
2293
+ }?,
2294
+ attribute text-align {
2295
+
2296
+
2297
+
2298
+ Brownlee Informational [Page 41]
2299
+
2300
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
2301
+
2302
+
2303
+ "start" | "center" | "end" | "inherit"
2304
+ }?)),
2305
+ (attribute id { xsd:NCName }
2306
+ | attribute xml:id { xsd:NCName })?,
2307
+ attribute xml:base { xsd:anyURI | xsd:string }?,
2308
+ attribute xml:lang { xsd:language? }?,
2309
+ attribute class { xsd:NMTOKENS }?,
2310
+ attribute role { xsd:string }?,
2311
+ attribute rel { xsd:string }?,
2312
+ attribute rev { xsd:string }?,
2313
+ attribute typeof { xsd:string }?,
2314
+ attribute content { xsd:string }?,
2315
+ attribute datatype { xsd:string }?,
2316
+ attribute resource { xsd:string }?,
2317
+ attribute about { xsd:string }?,
2318
+ attribute property { xsd:string }?,
2319
+ attribute xml:space { "default" | "preserve" }?,
2320
+ attribute requiredFeatures { xsd:string }?,
2321
+ attribute requiredExtensions { xsd:string }?,
2322
+ attribute requiredFormats { xsd:string }?,
2323
+ attribute requiredFonts { xsd:string }?,
2324
+ attribute systemLanguage { xsd:string }?,
2325
+ attribute transform { xsd:string | "none" }?,
2326
+ attribute ns1:show { "embed" }?,
2327
+ attribute ns1:actuate { "onLoad" }?,
2328
+ attribute ns1:type { "simple" }?,
2329
+ attribute ns1:role { xsd:anyURI | xsd:string }?,
2330
+ attribute ns1:arcrole { xsd:anyURI | xsd:string }?,
2331
+ attribute ns1:title { text }?,
2332
+ attribute ns1:href { xsd:anyURI | xsd:string }?,
2333
+ attribute x { xsd:string }?,
2334
+ attribute y { xsd:string }?,
2335
+ (desc
2336
+ | svgTitle)*
2337
+ }
2338
+ a =
2339
+ element a {
2340
+ (attribute id { xsd:NCName }
2341
+ | attribute xml:id { xsd:NCName })?,
2342
+ attribute xml:base { xsd:anyURI | xsd:string }?,
2343
+ attribute xml:lang { xsd:language? }?,
2344
+ attribute class { xsd:NMTOKENS }?,
2345
+ attribute role { xsd:string }?,
2346
+ attribute rel { xsd:string }?,
2347
+ attribute rev { xsd:string }?,
2348
+ attribute typeof { xsd:string }?,
2349
+ attribute content { xsd:string }?,
2350
+ attribute datatype { xsd:string }?,
2351
+
2352
+
2353
+
2354
+ Brownlee Informational [Page 42]
2355
+
2356
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
2357
+
2358
+
2359
+ attribute resource { xsd:string }?,
2360
+ attribute about { xsd:string }?,
2361
+ attribute property { xsd:string }?,
2362
+ attribute xml:space { "default" | "preserve" }?,
2363
+ attribute requiredFeatures { xsd:string }?,
2364
+ attribute requiredExtensions { xsd:string }?,
2365
+ attribute requiredFormats { xsd:string }?,
2366
+ attribute requiredFonts { xsd:string }?,
2367
+ attribute systemLanguage { xsd:string }?,
2368
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
2369
+ attribute stroke-opacity { "inherit" | xsd:string }?)
2370
+ & (attribute fill { "none" | rfc-color }?,
2371
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
2372
+ attribute stroke { rfc-color }?,
2373
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
2374
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
2375
+ attribute stroke-linecap {
2376
+ "butt" | "round" | "square" | "inherit"
2377
+ }?,
2378
+ attribute stroke-linejoin {
2379
+ "miter" | "round" | "bevel" | "inherit"
2380
+ }?,
2381
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
2382
+ attribute stroke-width { "inherit" | xsd:string }?,
2383
+ attribute color { rfc-color }?,
2384
+ attribute color-rendering {
2385
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
2386
+ }?)
2387
+ & attribute vector-effect {
2388
+ "none" | "non-scaling-stroke" | "inherit"
2389
+ }?
2390
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
2391
+ attribute unicode-bidi {
2392
+ "normal" | "embed" | "bidi-override" | "inherit"
2393
+ }?)
2394
+ & (attribute solid-color { rfc-color }?,
2395
+ attribute solid-opacity { "inherit" | xsd:string }?)
2396
+ & (attribute display-align {
2397
+ "auto" | "before" | "center" | "after" | "inherit"
2398
+ }?,
2399
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
2400
+ & (attribute stop-color { rfc-color }?,
2401
+ attribute stop-opacity { "inherit" | xsd:string }?)
2402
+ & (attribute font-family { "inherit" | xsd:string }?,
2403
+ attribute font-size { "inherit" | xsd:string }?,
2404
+ attribute font-style {
2405
+ "normal" | "italic" | "oblique" | "inherit"
2406
+ }?,
2407
+
2408
+
2409
+
2410
+ Brownlee Informational [Page 43]
2411
+
2412
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
2413
+
2414
+
2415
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
2416
+ attribute font-weight {
2417
+ "normal"
2418
+ | "bold"
2419
+ | "bolder"
2420
+ | "lighter"
2421
+ | "inherit"
2422
+ }?,
2423
+ attribute text-anchor {
2424
+ "start" | "middle" | "end" | "inherit"
2425
+ }?,
2426
+ attribute text-align {
2427
+ "start" | "center" | "end" | "inherit"
2428
+ }?)),
2429
+ attribute transform { xsd:string | "none" }?,
2430
+ attribute ns1:show { "new" | "replace" }?,
2431
+ attribute ns1:actuate { "onRequest" }?,
2432
+ attribute ns1:type { "simple" }?,
2433
+ attribute ns1:role { xsd:anyURI | xsd:string }?,
2434
+ attribute ns1:arcrole { xsd:anyURI | xsd:string }?,
2435
+ attribute ns1:title { text }?,
2436
+ attribute ns1:href { xsd:anyURI | xsd:string }?,
2437
+ attribute target {
2438
+ "_replace" | "_self" | "_parent" | "_top" | "_blank" | xsd:Name
2439
+ }?,
2440
+ (desc
2441
+ | svgTitle
2442
+ | path
2443
+ | rect
2444
+ | circle
2445
+ | line
2446
+ | ellipse
2447
+ | polyline
2448
+ | polygon
2449
+ | solidColor
2450
+ | textArea
2451
+ | linearGradient
2452
+ | radialGradient
2453
+ | \text
2454
+ | g
2455
+ | defs
2456
+ | use)*
2457
+ }
2458
+ stop =
2459
+ element stop {
2460
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
2461
+ attribute stroke-opacity { "inherit" | xsd:string }?)
2462
+ & (attribute fill { "inherit" | xsd:string }?,
2463
+
2464
+
2465
+
2466
+ Brownlee Informational [Page 44]
2467
+
2468
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
2469
+
2470
+
2471
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
2472
+ attribute stroke { "inherit" | xsd:string }?,
2473
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
2474
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
2475
+ attribute stroke-linecap {
2476
+ "butt" | "round" | "square" | "inherit"
2477
+ }?,
2478
+ attribute stroke-linejoin {
2479
+ "miter" | "round" | "bevel" | "inherit"
2480
+ }?,
2481
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
2482
+ attribute stroke-width { "inherit" | xsd:string }?,
2483
+ attribute color { rfc-color }?,
2484
+ attribute color-rendering {
2485
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
2486
+ }?)
2487
+ & attribute vector-effect {
2488
+ "none" | "non-scaling-stroke" | "inherit"
2489
+ }?
2490
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
2491
+ attribute unicode-bidi {
2492
+ "normal" | "embed" | "bidi-override" | "inherit"
2493
+ }?)
2494
+ & (attribute solid-color { "inherit" | xsd:string }?,
2495
+ attribute solid-opacity { "inherit" | xsd:string }?)
2496
+ & (attribute display-align {
2497
+ "auto" | "before" | "center" | "after" | "inherit"
2498
+ }?,
2499
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
2500
+ & (attribute stop-color { "inherit" | xsd:string }?,
2501
+ attribute stop-opacity { "inherit" | xsd:string }?)
2502
+ & (attribute font-family { "inherit" | xsd:string }?,
2503
+ attribute font-size { "inherit" | xsd:string }?,
2504
+ attribute font-style {
2505
+ "normal" | "italic" | "oblique" | "inherit"
2506
+ }?,
2507
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
2508
+ attribute font-weight {
2509
+ "normal"
2510
+ | "bold"
2511
+ | "bolder"
2512
+ | "lighter"
2513
+ | "inherit"
2514
+ }?,
2515
+ attribute text-anchor {
2516
+ "start" | "middle" | "end" | "inherit"
2517
+ }?,
2518
+ attribute text-align {
2519
+
2520
+
2521
+
2522
+ Brownlee Informational [Page 45]
2523
+
2524
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
2525
+
2526
+
2527
+ "start" | "center" | "end" | "inherit"
2528
+ }?)),
2529
+ (attribute id { xsd:NCName }
2530
+ | attribute xml:id { xsd:NCName })?,
2531
+ attribute xml:base { xsd:anyURI | xsd:string }?,
2532
+ attribute xml:lang { xsd:language? }?,
2533
+ attribute class { xsd:NMTOKENS }?,
2534
+ attribute role { xsd:string }?,
2535
+ attribute rel { xsd:string }?,
2536
+ attribute rev { xsd:string }?,
2537
+ attribute typeof { xsd:string }?,
2538
+ attribute content { xsd:string }?,
2539
+ attribute datatype { xsd:string }?,
2540
+ attribute resource { xsd:string }?,
2541
+ attribute about { xsd:string }?,
2542
+ attribute property { xsd:string }?,
2543
+ attribute xml:space { "default" | "preserve" }?,
2544
+ attribute offset { xsd:string }?,
2545
+ (desc
2546
+ | svgTitle)*
2547
+ }
2548
+ tspan =
2549
+ element tspan {
2550
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
2551
+ attribute stroke-opacity { "inherit" | xsd:string }?)
2552
+ & (attribute fill { "none" | rfc-color }?,
2553
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
2554
+ attribute stroke { rfc-color }?,
2555
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
2556
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
2557
+ attribute stroke-linecap {
2558
+ "butt" | "round" | "square" | "inherit"
2559
+ }?,
2560
+ attribute stroke-linejoin {
2561
+ "miter" | "round" | "bevel" | "inherit"
2562
+ }?,
2563
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
2564
+ attribute stroke-width { "inherit" | xsd:string }?,
2565
+ attribute color { rfc-color }?,
2566
+ attribute color-rendering {
2567
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
2568
+ }?)
2569
+ & attribute vector-effect {
2570
+ "none" | "non-scaling-stroke" | "inherit"
2571
+ }?
2572
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
2573
+ attribute unicode-bidi {
2574
+ "normal" | "embed" | "bidi-override" | "inherit"
2575
+
2576
+
2577
+
2578
+ Brownlee Informational [Page 46]
2579
+
2580
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
2581
+
2582
+
2583
+ }?)
2584
+ & (attribute solid-color { rfc-color }?,
2585
+ attribute solid-opacity { "inherit" | xsd:string }?)
2586
+ & (attribute display-align {
2587
+ "auto" | "before" | "center" | "after" | "inherit"
2588
+ }?,
2589
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
2590
+ & (attribute stop-color { rfc-color }?,
2591
+ attribute stop-opacity { "inherit" | xsd:string }?)
2592
+ & (attribute font-family { "inherit" | xsd:string }?,
2593
+ attribute font-size { "inherit" | xsd:string }?,
2594
+ attribute font-style {
2595
+ "normal" | "italic" | "oblique" | "inherit"
2596
+ }?,
2597
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
2598
+ attribute font-weight {
2599
+ "normal"
2600
+ | "bold"
2601
+ | "bolder"
2602
+ | "lighter"
2603
+ | "inherit"
2604
+ }?,
2605
+ attribute text-anchor {
2606
+ "start" | "middle" | "end" | "inherit"
2607
+ }?,
2608
+ attribute text-align {
2609
+ "start" | "center" | "end" | "inherit"
2610
+ }?)),
2611
+ (attribute id { xsd:NCName }
2612
+ | attribute xml:id { xsd:NCName })?,
2613
+ attribute xml:base { xsd:anyURI | xsd:string }?,
2614
+ attribute xml:lang { xsd:language? }?,
2615
+ attribute class { xsd:NMTOKENS }?,
2616
+ attribute role { xsd:string }?,
2617
+ attribute rel { xsd:string }?,
2618
+ attribute rev { xsd:string }?,
2619
+ attribute typeof { xsd:string }?,
2620
+ attribute content { xsd:string }?,
2621
+ attribute datatype { xsd:string }?,
2622
+ attribute resource { xsd:string }?,
2623
+ attribute about { xsd:string }?,
2624
+ attribute property { xsd:string }?,
2625
+ attribute xml:space { "default" | "preserve" }?,
2626
+ attribute requiredFeatures { xsd:string }?,
2627
+ attribute requiredExtensions { xsd:string }?,
2628
+ attribute requiredFormats { xsd:string }?,
2629
+ attribute requiredFonts { xsd:string }?,
2630
+ attribute systemLanguage { xsd:string }?,
2631
+
2632
+
2633
+
2634
+ Brownlee Informational [Page 47]
2635
+
2636
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
2637
+
2638
+
2639
+ attribute x { xsd:string }?, # For SVG-1.2-RFC
2640
+ attribute y { xsd:string }?,
2641
+ (tbreak
2642
+ | desc
2643
+ | svgTitle
2644
+ | tspan_2
2645
+ | text
2646
+ | a_2)+
2647
+ }
2648
+ tspan_2 =
2649
+ element tspan {
2650
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
2651
+ attribute stroke-opacity { "inherit" | xsd:string }?)
2652
+ & (attribute fill { "none" | rfc-color }?,
2653
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
2654
+ attribute stroke { rfc-color }?,
2655
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
2656
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
2657
+ attribute stroke-linecap {
2658
+ "butt" | "round" | "square" | "inherit"
2659
+ }?,
2660
+ attribute stroke-linejoin {
2661
+ "miter" | "round" | "bevel" | "inherit"
2662
+ }?,
2663
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
2664
+ attribute stroke-width { "inherit" | xsd:string }?,
2665
+ attribute color { rfc-color }?,
2666
+ attribute color-rendering {
2667
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
2668
+ }?)
2669
+ & attribute vector-effect {
2670
+ "none" | "non-scaling-stroke" | "inherit"
2671
+ }?
2672
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
2673
+ attribute unicode-bidi {
2674
+ "normal" | "embed" | "bidi-override" | "inherit"
2675
+ }?)
2676
+ & (attribute solid-color { rfc-color }?,
2677
+ attribute solid-opacity { "inherit" | xsd:string }?)
2678
+ & (attribute display-align {
2679
+ "auto" | "before" | "center" | "after" | "inherit"
2680
+ }?,
2681
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
2682
+ & (attribute stop-color { rfc-color }?,
2683
+ attribute stop-opacity { "inherit" | xsd:string }?)
2684
+ & (attribute font-family { "inherit" | xsd:string }?,
2685
+ attribute font-size { "inherit" | xsd:string }?,
2686
+ attribute font-style {
2687
+
2688
+
2689
+
2690
+ Brownlee Informational [Page 48]
2691
+
2692
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
2693
+
2694
+
2695
+ "normal" | "italic" | "oblique" | "inherit"
2696
+ }?,
2697
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
2698
+ attribute font-weight {
2699
+ "normal"
2700
+ | "bold"
2701
+ | "bolder"
2702
+ | "lighter"
2703
+ | "inherit"
2704
+ }?,
2705
+ attribute text-anchor {
2706
+ "start" | "middle" | "end" | "inherit"
2707
+ }?,
2708
+ attribute text-align {
2709
+ "start" | "center" | "end" | "inherit"
2710
+ }?)),
2711
+ (attribute id { xsd:NCName }
2712
+ | attribute xml:id { xsd:NCName })?,
2713
+ attribute xml:base { xsd:anyURI | xsd:string }?,
2714
+ attribute xml:lang { xsd:language? }?,
2715
+ attribute class { xsd:NMTOKENS }?,
2716
+ attribute role { xsd:string }?,
2717
+ attribute rel { xsd:string }?,
2718
+ attribute rev { xsd:string }?,
2719
+ attribute typeof { xsd:string }?,
2720
+ attribute content { xsd:string }?,
2721
+ attribute datatype { xsd:string }?,
2722
+ attribute resource { xsd:string }?,
2723
+ attribute about { xsd:string }?,
2724
+ attribute property { xsd:string }?,
2725
+ attribute xml:space { "default" | "preserve" }?,
2726
+ attribute requiredFeatures { xsd:string }?,
2727
+ attribute requiredExtensions { xsd:string }?,
2728
+ attribute requiredFormats { xsd:string }?,
2729
+ attribute requiredFonts { xsd:string }?,
2730
+ attribute systemLanguage { xsd:string }?,
2731
+ attribute x { xsd:string }?, # For SVG-1.2-RFC
2732
+ attribute y { xsd:string }?,
2733
+ (desc
2734
+ | svgTitle
2735
+ | tspan_2
2736
+ | text
2737
+ | a_2)+
2738
+ }
2739
+ a_2 =
2740
+ element a {
2741
+ (attribute id { xsd:NCName }
2742
+ | attribute xml:id { xsd:NCName })?,
2743
+
2744
+
2745
+
2746
+ Brownlee Informational [Page 49]
2747
+
2748
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
2749
+
2750
+
2751
+ attribute xml:base { xsd:anyURI | xsd:string }?,
2752
+ attribute xml:lang { xsd:language? }?,
2753
+ attribute class { xsd:NMTOKENS }?,
2754
+ attribute role { xsd:string }?,
2755
+ attribute rel { xsd:string }?,
2756
+ attribute rev { xsd:string }?,
2757
+ attribute typeof { xsd:string }?,
2758
+ attribute content { xsd:string }?,
2759
+ attribute datatype { xsd:string }?,
2760
+ attribute resource { xsd:string }?,
2761
+ attribute about { xsd:string }?,
2762
+ attribute property { xsd:string }?,
2763
+ attribute xml:space { "default" | "preserve" }?,
2764
+ attribute requiredFeatures { xsd:string }?,
2765
+ attribute requiredExtensions { xsd:string }?,
2766
+ attribute requiredFormats { xsd:string }?,
2767
+ attribute requiredFonts { xsd:string }?,
2768
+ attribute systemLanguage { xsd:string }?,
2769
+ ((attribute fill-opacity { "inherit" | xsd:string }?,
2770
+ attribute stroke-opacity { "inherit" | xsd:string }?)
2771
+ & (attribute fill { "none" | rfc-color }?,
2772
+ attribute fill-rule { "inherit" | "nonzero" | "evenodd" }?,
2773
+ attribute stroke { rfc-color }?,
2774
+ attribute stroke-dasharray { "inherit" | "none" | xsd:string }?,
2775
+ attribute stroke-dashoffset { "inherit" | xsd:string }?,
2776
+ attribute stroke-linecap {
2777
+ "butt" | "round" | "square" | "inherit"
2778
+ }?,
2779
+ attribute stroke-linejoin {
2780
+ "miter" | "round" | "bevel" | "inherit"
2781
+ }?,
2782
+ attribute stroke-miterlimit { "inherit" | xsd:string }?,
2783
+ attribute stroke-width { "inherit" | xsd:string }?,
2784
+ attribute color { rfc-color }?,
2785
+ attribute color-rendering {
2786
+ "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
2787
+ }?)
2788
+ & attribute vector-effect {
2789
+ "none" | "non-scaling-stroke" | "inherit"
2790
+ }?
2791
+ & (attribute direction { "ltr" | "rtl" | "inherit" }?,
2792
+ attribute unicode-bidi {
2793
+ "normal" | "embed" | "bidi-override" | "inherit"
2794
+ }?)
2795
+ & (attribute solid-color { rfc-color }?,
2796
+ attribute solid-opacity { "inherit" | xsd:string }?)
2797
+ & (attribute display-align {
2798
+ "auto" | "before" | "center" | "after" | "inherit"
2799
+
2800
+
2801
+
2802
+ Brownlee Informational [Page 50]
2803
+
2804
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
2805
+
2806
+
2807
+ }?,
2808
+ attribute line-increment { "auto" | "inherit" | xsd:string }?)
2809
+ & (attribute stop-color { rfc-color }?,
2810
+ attribute stop-opacity { "inherit" | xsd:string }?)
2811
+ & (attribute font-family { "inherit" | xsd:string }?,
2812
+ attribute font-size { "inherit" | xsd:string }?,
2813
+ attribute font-style {
2814
+ "normal" | "italic" | "oblique" | "inherit"
2815
+ }?,
2816
+ attribute font-variant { "normal" | "small-caps" | "inherit" }?,
2817
+ attribute font-weight {
2818
+ "normal"
2819
+ | "bold"
2820
+ | "bolder"
2821
+ | "lighter"
2822
+ | "inherit"
2823
+ }?,
2824
+ attribute text-anchor {
2825
+ "start" | "middle" | "end" | "inherit"
2826
+ }?,
2827
+ attribute text-align {
2828
+ "start" | "center" | "end" | "inherit"
2829
+ }?)),
2830
+ attribute transform { xsd:string | "none" }?,
2831
+ attribute ns1:show { "new" | "replace" }?,
2832
+ attribute ns1:actuate { "onRequest" }?,
2833
+ attribute ns1:type { "simple" }?,
2834
+ attribute ns1:role { xsd:anyURI | xsd:string }?,
2835
+ attribute ns1:arcrole { xsd:anyURI | xsd:string }?,
2836
+ attribute ns1:title { text }?,
2837
+ attribute ns1:href { xsd:anyURI | xsd:string }?,
2838
+ attribute target {
2839
+ "_replace" | "_self" | "_parent" | "_top" | "_blank" | xsd:Name
2840
+ }?,
2841
+ (desc
2842
+ | svgTitle
2843
+ | tspan_2
2844
+ | text)+
2845
+ }
2846
+ tbreak =
2847
+ element tbreak {
2848
+ (attribute id { xsd:NCName }
2849
+ | attribute xml:id { xsd:NCName })?,
2850
+ attribute xml:base { xsd:anyURI | xsd:string }?,
2851
+ attribute xml:lang { xsd:language? }?,
2852
+ attribute class { xsd:NMTOKENS }?,
2853
+ attribute role { xsd:string }?,
2854
+ attribute rel { xsd:string }?,
2855
+
2856
+
2857
+
2858
+ Brownlee Informational [Page 51]
2859
+
2860
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
2861
+
2862
+
2863
+ attribute rev { xsd:string }?,
2864
+ attribute typeof { xsd:string }?,
2865
+ attribute content { xsd:string }?,
2866
+ attribute datatype { xsd:string }?,
2867
+ attribute resource { xsd:string }?,
2868
+ attribute about { xsd:string }?,
2869
+ attribute property { xsd:string }?,
2870
+ attribute xml:space { "default" | "preserve" }?,
2871
+ attribute requiredFeatures { xsd:string }?,
2872
+ attribute requiredExtensions { xsd:string }?,
2873
+ attribute requiredFormats { xsd:string }?,
2874
+ attribute requiredFonts { xsd:string }?,
2875
+ attribute systemLanguage { xsd:string }?
2876
+ }
2877
+
2878
+ #--- End of SVG 1.2 RFC RNC schema
2879
+
2880
+
2881
+
2882
+
2883
+
2884
+
2885
+
2886
+
2887
+
2888
+
2889
+
2890
+
2891
+
2892
+
2893
+
2894
+
2895
+
2896
+
2897
+
2898
+
2899
+
2900
+
2901
+
2902
+
2903
+
2904
+
2905
+
2906
+
2907
+
2908
+
2909
+
2910
+
2911
+
2912
+
2913
+
2914
+ Brownlee Informational [Page 52]
2915
+
2916
+ RFC 7996 SVG Drawings for RFCs: SVG 1.2 RFC December 2016
2917
+
2918
+
2919
+ IAB Members at the Time of Approval
2920
+
2921
+ The IAB members at the time this memo was approved were
2922
+ (in alphabetical order):
2923
+
2924
+ Jari Arkko
2925
+ Ralph Droms
2926
+ Ted Hardie
2927
+ Joe Hildebrand
2928
+ Russ Housley
2929
+ Lee Howard
2930
+ Erik Nordmark
2931
+ Robert Sparks
2932
+ Andrew Sullivan
2933
+ Dave Thaler
2934
+ Martin Thomson
2935
+ Brian Trammell
2936
+ Suzanne Woolf
2937
+
2938
+ Acknowledgements
2939
+
2940
+ Thanks to the RSE and the Design Team members for their helpful
2941
+ comments and suggestions for SVG 1.2 RFC. Thanks also to the wider
2942
+ IETF community for their input.
2943
+
2944
+ Author's Address
2945
+
2946
+ Nevil Brownlee
2947
+ The University of Auckland
2948
+
2949
+ Email: n.brownlee@auckland.ac.nz
2950
+
2951
+
2952
+
2953
+
2954
+
2955
+
2956
+
2957
+
2958
+
2959
+
2960
+
2961
+
2962
+
2963
+
2964
+
2965
+
2966
+
2967
+
2968
+
2969
+
2970
+ Brownlee Informational [Page 53]
2971
+