<?xml version="1.0" encoding="utf-8"?>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.miek.nl" -->
<rfc version="3" ipr="trust200902" docName="draft-svg-tiny-ps-abrotman-11" submissionType="IETF" category="std" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" indexInclude="true" consensus="true">

<front>
<title abbrev="SVG-TINY-PS">SVG Tiny Portable/Secure</title><seriesInfo value="draft-svg-tiny-ps-abrotman-11" stream="IETF" status="standard" name="RFC"></seriesInfo>
<author initials="A." surname="Brotman" fullname="Alex Brotman"><organization>Comcast, Inc</organization><address><postal><street></street>
</postal><email>alex_brotman@comcast.com</email>
</address></author><author initials="T." surname="Adams" fullname="Trent Adams"><organization>Proofpoint, Inc</organization><address><postal><street></street>
</postal><email>tadams@proofpoint.com</email>
</address></author><date year="2025" month="November" day="3"></date>
<area>Applications</area>
<workgroup></workgroup>

<abstract>
<t>This document specifies SVG Tiny Portable/Secure (SVG Tiny PS) -- A
Scalable Vector Graphics (SVG) profile to be used with documents
that are intended for use with more secure requirements, and in
some cases, in conjunction with a limited rendering engine.</t>
</abstract>

</front>

<middle>

<section anchor="introduction"><name>Introduction</name>
<t>Scalable Vector Graphics (SVG) is a standard that defines vector-based
graphics for the web, graphics that can be expressed in XML format. SVG
is an extensible format, with support for various metadata elements and
animation. In some cases, it is preferable to have an SVG profile that
is targeted at smaller platforms, and/or to have security in mind. This
document defines a profile of SVG for such use cases, called the SVG
Tiny PS profile, that limits the allowed elements to a subset of the
features supported by the overall SVG specification.</t>
<t>The SVG standard is defined by the World Wide Web Consortium (W3C) and
the current version is 1.1 [SVG]. The W3C also defines a simplified
profile of SVG published as SVG Tiny [SVGT], with the current version
at 1.2. This document defines the SVG Tiny PS profile in the terms of
the simplified SVG Tiny 1.2 as the base. The SVG Tiny PS profile
identifies elements that are required, disallowed, or otherwise allowed
from the set of elements defined by SVG Tiny 1.2. No elements are added
to SVG Tiny PS, and any elements not explicitly mentioned in this
document follow the guidance provided by SVG Tiny 1.2.</t>
</section>

<section anchor="svg-tiny-ps-profile"><name>SVG Tiny PS Profile</name>
<t>This document defines the SVG Tiny PS profile in the terms of the
simplified SVG Tiny 1.2 as the base. The following sections reference
sections within the SVG Tiny PS profile that are required, disallowed,
or otherwise allowed from the set of elements defined by SVG Tiny 1.2.
No elements are added to SVG Tiny PS that are not found within
SVG 1.1 or SVG Tiny 1.2, and any elements not explicitly mentioned in
this document follow the guidance provided by SVG Tiny 1.2.</t>

<section anchor="specific-instructions-for-the-svg-tiny-ps-documents"><name>Specific Instructions for the SVG Tiny PS Documents</name>
<t>The elements and attributes below are required within the root <tt>&lt;svg&gt;</tt>
element of an SVG Tiny PS document.</t>

<ul spacing="compact">
<li>Document Definition: The SVG Tiny PS document MUST be defined as described
in SVG Tiny 1.2 Section 1.3.  This includes setting the following attributes
as follows:</li>
</ul>

<artwork>xmlns=&quot;http://www.w3.org/2000/svg&quot;
version=&quot;1.2&quot;
baseProfile=&quot;tiny-ps&quot;
</artwork>
<t>[ Note to WG: Based on other baseProfile, this should be the minimum profile
required to render the image.  Tiny PS should be a subset, but we're unsure
if we should create a smaller profile. ]</t>

<ul>
<li><t>title: The <tt>&lt;title&gt;</tt> element MUST be present and its contents MUST NOT be
empty.  The <tt>title</tt> element MUST occur only once as a sub-element of
the <tt>svg</tt> element.  The contents SHOULD be no more 64 characters.</t>
</li>
<li><t>desc: The <tt>&lt;desc&gt;</tt> element MAY be present with a longer description. If
present, its contents MUST NOT be empty, and care SHOULD be given to
minimize the file size of the document.</t>
</li>
</ul>
</section>

<section anchor="permitted-sections-with-restrictions"><name>Permitted Sections with Restrictions</name>
<t>The following sections from SVG Tiny 1.2 MAY be used within
an SVG Tiny PS document with the further restrictions as noted.</t>

<ul>
<li><t>Section 8: Paths - This section defines methods used for defining
vector-based paths that can be rendered. The attributes &quot;d&quot; and
&quot;pathLength&quot; MUST NOT be animated. The elements described within
&quot;8.2.1 Animating path data&quot; MUST NOT be present within an SVG Tiny
PS document.</t>
</li>
<li><t>Section 9: Basic Shapes - This section defines primitives that can
be used to render basic shapes. The attributes &quot;x&quot;, &quot;y&quot;, &quot;width&quot;,
&quot;height&quot;, &quot;rx&quot;, and &quot;ry&quot; MUST NOT be animated.</t>
</li>
<li><t>Section 10: Text - This sections describes the methods for defining
text that should be rendered similar to any vector-based graphic
elements. The &quot;editable&quot; attribute SHOULD NOT be present in an SVG
Tiny PS document, if it is, it MUST be set to &quot;none&quot;. The attributes
&quot;x&quot;, &quot;y&quot;, and &quot;rotate&quot; MUST NOT be animated.</t>
</li>
<li><t>Section 11: Painting - This section describes the methods used to
render the paths (&quot;stroked&quot;) and shapes (&quot;filled&quot;) visible. Any of the
attributes described MUST NOT be animated within an SVG Tiny PS
document.</t>
</li>
</ul>
</section>

<section anchor="disallowed-sections-elements-and-attributes"><name>Disallowed Sections, Elements, and Attributes</name>
<t>The elements and attributes described in the sections below MUST NOT be present in an SVG Tiny PS document:</t>

<ul>
<li><t>Section 5.7: The 'image' Element - This section defines methods for displaying a raster image within the context of an SVG image.</t>
</li>
<li><t>Section 5.8.2: The 'switch' Element - This section defines methods for conditional processing of the document.</t>
</li>
<li><t>Section 12: Multimedia - This section describes the elements that augment an image with audio or video.</t>
</li>
<li><t>Section 13: Interactivity - This section describes elements related to user actions and responsiveness to those events.</t>
</li>
<li><t>Section 14: Linking - This section describes links to internal and external end points.</t>
</li>
<li><t>Section 15: Scripting - This section describes methods for adding executable content.</t>
</li>
<li><t>Section 16: Animation - This section describes methods for transforming or otherwise animating elements over time.</t>
</li>
</ul>
<t>The attributes below are specifically called out from the sections above due to their widespread use.  For a more complete list, refer to the full content in the sections above.</t>

<ul>
<li><t>zoomAndPan: The &quot;zoomAndPan&quot; attribute SHOULD NOT be present in an SVG Tiny PS document.  If it is present, it MUST be set to &quot;disable&quot;.</t>
</li>
<li><t>externalResourcesRequired: The &quot;externalResourcesRequired&quot; attribute SHOULD NOT be present in an SVG Tiny PS document.  If it is present, it MUST be set to &quot;false&quot;.</t>
</li>
<li><t>focusable: The &quot;focusable&quot; attribute SHOULD NOT be used within an SVG Tiny PS document.  If it is present, it MUST be set to &quot;false&quot;.</t>
</li>
<li><t>snapshotTime: The &quot;snapshotTime&quot; attribute SHOULD NOT be used within an SVG Tiny PS document.  If it is present, it MUST be set to &quot;none&quot;.</t>
</li>
<li><t>playbackOrder: The &quot;playbackOrder&quot; attribute SHOULD NOT be used within an SVG Tiny PS document.  If it is present, it MUST be set to &quot;all&quot;.</t>
</li>
<li><t>timelineBegin: The &quot;timelineBegin&quot; attribute SHOULD NOT be used within an SVG Tiny PS document.  If it is present, it MUST be set to &quot;onLoad&quot;.</t>
</li>
</ul>
</section>

<section anchor="additional-considerations-for-creating-svg-tiny-ps-documents"><name>Additional Considerations for Creating SVG Tiny PS Documents</name>
<t>The following are special considerations that SHOULD be taken when creating an SVG Tiny PS document:</t>

<ul>
<li><t>The file size of SVG Tiny PS documents SHOULD be as small as
possible, and SHOULD NOT exceed 32 kilobytes. That size should be
evaluated when the document is uncompressed.</t>
</li>
<li><t>An SVG Tiny PS document MUST include at least two colors when rendered.</t>
</li>
<li><t>Section 17: Fonts - This sections describes the methods for defining specific
characters to be used within an SVG document. Embedded character definitions
MAY be used in an SVG Tiny PS document, but the document SHOULD only
include the characters to be rendered, and SHOULD NOT include any
additional characters that are not to be rendered.</t>
</li>
<li><t>Section 18: Metadata - This section summarizes standard methods for
including structured data about the content within an SVG document. While
metadata can support utility and accessibility and MAY be included in an
SVG Tiny PS document, careful consideration SHOULD be given to how
the metadata element and extensible metadata attributes are used to
avoid increasing the file size of the document.</t>
</li>
<li><t>An SVG Tiny PS document MAY include transparent elements, however
care SHOULD be taken to understand the implications of transparency
when rendered. Given that the author has no control over how the logo is
ultimately displayed, transparency to the underlying display mechanism
could result in undesirable effects.</t>
</li>
</ul>
</section>
</section>

<section anchor="security-considerations"><name>Security Considerations</name>
<t>Many of the requirements imposed by the SVG Tiny PS profile are designed to
minimize potential security concerns introduced by interactive content into
a user experience not typically designed to handle it.  Every consideration
has been made to reduce the scope of SVG images to the minimum elements
necessary to render locally defined, static vector graphics.</t>

<section anchor="portability"><name>Portability</name>
<t>The SVG documents meant to be used with this profile should be fairly
portable, and should likely be self-contained.  The document authors
cannot be certain that the client will have an active network
connection.</t>
</section>
</section>

<section anchor="contributors"><name>Contributors</name>
<t>TBD</t>
</section>

<section anchor="example-svg-tiny-ps-document"><name>Example SVG Tiny PS Document</name>

<artwork>&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;svg width=&quot;400px&quot; height=&quot;400px&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; 
    version=&quot;1.2&quot; baseProfile=&quot;tiny-ps&quot; 
    zoomAndPan=&quot;disable&quot; externalResourcesRequired=&quot;false&quot;&gt;
  &lt;title&gt;Example, Inc.&lt;/title&gt;
  &lt;desc&gt;Logo for Example, Inc.&lt;/desc&gt;
  &lt;rect x=&quot;1&quot; y=&quot;1&quot; width=&quot;399&quot; height=&quot;399&quot; fill=&quot;teal&quot; 
     stroke=&quot;gray&quot; stroke-width=&quot;9&quot;/&gt;
  &lt;circle cx=&quot;200&quot; cy=&quot;200&quot; r=&quot;125&quot; fill=&quot;white&quot; 
     stroke=&quot;black&quot; stroke-width=&quot;2&quot;/&gt;
  &lt;polyline fill=&quot;gray&quot; stroke=&quot;silver&quot; stroke-width=&quot;9&quot; 
     points=&quot;40,30 25,40 100,330 310,270 290,250 120,300 40,26&quot;/&gt;
&lt;/svg&gt;
</artwork>
</section>

<section anchor="notes"><name>Notes</name>

<section anchor="references"><name>References:</name>
<t><eref target="https://www.oasis-open.org/committees/relax-ng/compact-20021121.html">https://www.oasis-open.org/committees/relax-ng/compact-20021121.html</eref></t>
</section>

<section anchor="known-issues-with-various-svg-editing-software"><name>Known issues with various SVG editing software</name>

<ul spacing="compact">
<li>Illustrator
** Will add x/y attributes to the <tt>svg</tt> element.  These are not
permitted.</li>
</ul>
</section>
</section>

<section anchor="validation-rnc"><name>Validation RNC</name>
<t>The following RNC [RNC] schema can be used to validate a SVG
Tiny PS document.  The official version of this document resides
at:</t>
<t><eref target="http://bimigroup.org/resources/SVG_PS-latest.rnc.txt">http://bimigroup.org/resources/SVG_PS-latest.rnc.txt</eref></t>
<t>And is the one that should be used if there is any conflict.</t>

<sourcecode type="rnc">#---  SVG 1.2 PS RNC schema

default namespace = &quot;http://www.w3.org/2000/svg&quot;
#namespace ns1 = &quot;http://www.w3.org/1999/xlink&quot;

start = svg
svg =
  element svg {
    ((attribute fill-opacity { &quot;inherit&quot; | xsd:string }?,
      attribute stroke-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute fill { &quot;none&quot; | xsd:string }?,
        attribute fill-rule { &quot;inherit&quot; | &quot;nonzero&quot; | &quot;evenodd&quot; }?,
        attribute stroke { xsd:string }?,
        attribute stroke-dasharray { &quot;inherit&quot; | &quot;none&quot; | xsd:string }?,
        attribute stroke-dashoffset { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-linecap {
          &quot;butt&quot; | &quot;round&quot; | &quot;square&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-linejoin {
          &quot;miter&quot; | &quot;round&quot; | &quot;bevel&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-miterlimit { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-width { &quot;inherit&quot; | xsd:string }?,
        attribute color { xsd:string }?,
        attribute color-rendering {
          &quot;auto&quot; | &quot;optimizeSpeed&quot; | &quot;optimizeQuality&quot; | &quot;inherit&quot;
        }?)
     &amp; attribute vector-effect {
         &quot;none&quot; | &quot;non-scaling-stroke&quot; | &quot;inherit&quot;
       }?
     &amp; (attribute direction { &quot;ltr&quot; | &quot;rtl&quot; | &quot;inherit&quot; }?,
        attribute unicode-bidi {
          &quot;normal&quot; | &quot;embed&quot; | &quot;bidi-override&quot; | &quot;inherit&quot;
        }?)
     &amp; (attribute solid-color { xsd:string }?,
        attribute solid-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute display-align {
          &quot;auto&quot; | &quot;before&quot; | &quot;center&quot; | &quot;after&quot; | &quot;inherit&quot;
        }?,
        attribute line-increment { &quot;auto&quot; | &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute stop-color { xsd:string }?,
        attribute stop-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute font-family { &quot;inherit&quot; | xsd:string }?,
        attribute font-size { &quot;inherit&quot; | xsd:string }?,
        attribute font-style {
          &quot;normal&quot; | &quot;italic&quot; | &quot;oblique&quot; | &quot;inherit&quot;
        }?,
        attribute font-variant { &quot;normal&quot; | &quot;small-caps&quot; | &quot;inherit&quot; }?,
        attribute font-weight {
          &quot;normal&quot;
          | &quot;bold&quot;
          | &quot;bolder&quot;
          | &quot;lighter&quot;
        }?,
        attribute text-anchor {
          &quot;start&quot; | &quot;middle&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?,
        attribute text-align {
          &quot;start&quot; | &quot;center&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?)),
    (attribute id { xsd:NCName }
     | attribute xml:id { xsd:NCName })?,
    attribute xml:base { xsd:anyURI | xsd:string }?,
    attribute xml:lang { xsd:language? }?,
    attribute class { xsd:NMTOKENS }?,
    attribute role { xsd:string }?,
    attribute rel { xsd:string }?,
    attribute rev { xsd:string }?,
    attribute typeof { xsd:string }?,
    attribute content { xsd:string }?,
    attribute datatype { xsd:string }?,
    attribute resource { xsd:string }?,
    attribute about { xsd:string }?,
    attribute property { xsd:string }?,
    attribute xml:space { &quot;default&quot; | &quot;preserve&quot; }?,
    attribute width { xsd:string }?,
    attribute height { xsd:string }?,
    attribute viewBox { text }?,
    attribute baseProfile { &quot;tiny-ps&quot; },
    attribute contentScriptType { xsd:string }?,
    attribute externalResourcesRequired { &quot;false&quot; }?,
    attribute focusable { &quot;false&quot; }?,
    attribute playbackOrder { &quot;all&quot; }?,
    attribute preserveAspectRatio { xsd:string { pattern = &quot;\s*(none|xMidYMid)\s*(meet)?\s*&quot; } }?,
    attribute snapshotTime { &quot;none&quot; }?,
    attribute timelineBegin { &quot;onLoad&quot; }?,
    attribute version { &quot;1.2&quot; },
    attribute zoomAndPan { &quot;disable&quot; }?,
    attribute viewport-fill { &quot;none&quot; | xsd:string }?,
    attribute viewport-fill-opacity { &quot;inherit&quot; | xsd:string }?
    (svgTitle),
    (desc
     | path
     | rect
     | circle
     | line
     | ellipse
     | polyline
     | polygon
     | solidColor
     | textArea
     | linearGradient
     | radialGradient
     | \text
     | g
     | defs
     | metadata
     | use)*
  }

desc =
  element desc {
    (attribute id { xsd:NCName }
     | attribute xml:id { xsd:NCName })?,
    attribute xml:base { xsd:anyURI | xsd:string }?,
    attribute xml:lang { xsd:language? }?,
    attribute class { xsd:NMTOKENS }?,
    attribute role { xsd:string }?,
    attribute rel { xsd:string }?,
    attribute rev { xsd:string }?,
    attribute typeof { xsd:string }?,
    attribute content { xsd:string }?,
    attribute datatype { xsd:string }?,
    attribute resource { xsd:string }?,
    attribute about { xsd:string }?,
    attribute property { xsd:string }?,
    attribute xml:space { &quot;default&quot; | &quot;preserve&quot; }?,
    attribute requiredFonts { xsd:string }?,
    attribute systemLanguage { xsd:string }?,
    ((attribute display {
        &quot;inline&quot;
        | &quot;block&quot;
        | &quot;list-item&quot;
        | &quot;run-in&quot;
        | &quot;compact&quot;
        | &quot;marker&quot;
        | &quot;table&quot;
        | &quot;inline-table&quot;
        | &quot;table-row-group&quot;
        | &quot;table-header-group&quot;
        | &quot;table-footer-group&quot;
        | &quot;table-row&quot;
        | &quot;table-column-group&quot;
        | &quot;table-column&quot;
        | &quot;table-cell&quot;
        | &quot;table-caption&quot;
        | &quot;none&quot;
        | &quot;inherit&quot;
      }?,
      attribute visibility { &quot;visible&quot; | &quot;hidden&quot; | &quot;collapse&quot;
        | &quot;inherit&quot; }?,
      attribute image-rendering {
        &quot;auto&quot; | &quot;optimizeSpeed&quot; | &quot;optimizeQuality&quot; | &quot;inherit&quot;
      }?,
      attribute shape-rendering {
        &quot;auto&quot;
        | &quot;optimizeSpeed&quot;
        | &quot;crispEdges&quot;
        | &quot;geometricPrecision&quot;
        | &quot;inherit&quot;
      }?,
      attribute text-rendering {
        &quot;auto&quot;
        | &quot;optimizeSpeed&quot;
        | &quot;optimizeLegibility&quot;
        | &quot;geometricPrecision&quot;
        | &quot;inherit&quot;
      }?,
      attribute buffered-rendering {
        &quot;auto&quot; | &quot;dynamic&quot; | &quot;static&quot; | &quot;inherit&quot;
      }?)
     &amp; (attribute viewport-fill { &quot;none&quot; | xsd:string }?,
        attribute viewport-fill-opacity { &quot;inherit&quot; | xsd:string }?)),
    text
  }
svgTitle =
  element title {
    (attribute id { xsd:NCName }
     | attribute xml:id { xsd:NCName })?,
    attribute xml:base { xsd:anyURI | xsd:string }?,
    attribute xml:lang { xsd:language? }?,
    attribute class { xsd:NMTOKENS }?,
    attribute role { xsd:string }?,
    attribute rel { xsd:string }?,
    attribute rev { xsd:string }?,
    attribute typeof { xsd:string }?,
    attribute content { xsd:string }?,
    attribute datatype { xsd:string }?,
    attribute resource { xsd:string }?,
    attribute about { xsd:string }?,
    attribute property { xsd:string }?,
    attribute xml:space { &quot;default&quot; | &quot;preserve&quot; }?,
    attribute requiredFonts { xsd:string }?,
    attribute systemLanguage { xsd:string }?,
    ((attribute display {
        &quot;inline&quot;
        | &quot;block&quot;
        | &quot;list-item&quot;
        | &quot;run-in&quot;
        | &quot;compact&quot;
        | &quot;marker&quot;
        | &quot;table&quot;
        | &quot;inline-table&quot;
        | &quot;table-row-group&quot;
        | &quot;table-header-group&quot;
        | &quot;table-footer-group&quot;
        | &quot;table-row&quot;
        | &quot;table-column-group&quot;
        | &quot;table-column&quot;
        | &quot;table-cell&quot;
        | &quot;table-caption&quot;
        | &quot;none&quot;
        | &quot;inherit&quot;
      }?,
      attribute visibility { &quot;visible&quot; | &quot;hidden&quot;
        | &quot;collapse&quot; | &quot;inherit&quot; }?,
      attribute image-rendering {
        &quot;auto&quot; | &quot;optimizeSpeed&quot; | &quot;optimizeQuality&quot; | &quot;inherit&quot;
      }?,
      attribute shape-rendering {
        &quot;auto&quot;
        | &quot;optimizeSpeed&quot;
        | &quot;crispEdges&quot;
        | &quot;geometricPrecision&quot;
        | &quot;inherit&quot;
      }?,
      attribute text-rendering {
        &quot;auto&quot;
        | &quot;optimizeSpeed&quot;
        | &quot;optimizeLegibility&quot;
        | &quot;geometricPrecision&quot;
        | &quot;inherit&quot;
      }?,
      attribute buffered-rendering {
        &quot;auto&quot; | &quot;dynamic&quot; | &quot;static&quot; | &quot;inherit&quot;
      }?)
     &amp; (attribute viewport-fill { &quot;none&quot; | xsd:string }?,
        attribute viewport-fill-opacity { &quot;inherit&quot; | xsd:string }?)),
    text
  }
path =
  element path {
    (attribute id { xsd:NCName }
     | attribute xml:id { xsd:NCName })?,
    attribute xml:base { xsd:anyURI | xsd:string }?,
    attribute xml:lang { xsd:language? }?,
    attribute class { xsd:NMTOKENS }?,
    attribute role { xsd:string }?,
    attribute rel { xsd:string }?,
    attribute rev { xsd:string }?,
    attribute typeof { xsd:string }?,
    attribute content { xsd:string }?,
    attribute datatype { xsd:string }?,
    attribute resource { xsd:string }?,
    attribute about { xsd:string }?,
    attribute property { xsd:string }?,
    attribute xml:space { &quot;default&quot; | &quot;preserve&quot; }?,
    attribute transform { xsd:string | &quot;none&quot; }?,
    ((attribute fill-opacity { &quot;inherit&quot; | xsd:string }?,
      attribute stroke-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute fill { &quot;none&quot; | xsd:string }?,
        attribute fill-rule { &quot;inherit&quot; | &quot;nonzero&quot; | &quot;evenodd&quot; }?,
        attribute stroke { xsd:string }?,
        attribute stroke-dasharray { &quot;inherit&quot; | &quot;none&quot; | xsd:string }?,
        attribute stroke-dashoffset { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-linecap {
          &quot;butt&quot; | &quot;round&quot; | &quot;square&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-linejoin {
          &quot;miter&quot; | &quot;round&quot; | &quot;bevel&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-miterlimit { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-width { &quot;inherit&quot; | xsd:string }?,
        attribute color { xsd:string }?,
        attribute color-rendering {
          &quot;auto&quot; | &quot;optimizeSpeed&quot; | &quot;optimizeQuality&quot; | &quot;inherit&quot;
        }?)
     &amp; attribute vector-effect {
         &quot;none&quot; | &quot;non-scaling-stroke&quot; | &quot;inherit&quot;
       }?
     &amp; (attribute direction { &quot;ltr&quot; | &quot;rtl&quot; | &quot;inherit&quot; }?,
        attribute unicode-bidi {
          &quot;normal&quot; | &quot;embed&quot; | &quot;bidi-override&quot; | &quot;inherit&quot;
        }?)
     &amp; (attribute solid-color { xsd:string }?,
        attribute solid-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute display-align {
          &quot;auto&quot; | &quot;before&quot; | &quot;center&quot; | &quot;after&quot; | &quot;inherit&quot;
        }?,
        attribute line-increment { &quot;auto&quot; | &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute stop-color { xsd:string }?,
        attribute stop-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute font-family { &quot;inherit&quot; | xsd:string }?,
        attribute font-size { &quot;inherit&quot; | xsd:string }?,
        attribute font-style {
          &quot;normal&quot; | &quot;italic&quot; | &quot;oblique&quot; | &quot;inherit&quot;
        }?,
        attribute font-variant { &quot;normal&quot; | &quot;small-caps&quot; | &quot;inherit&quot; }?,
        attribute font-weight {
          &quot;normal&quot;
          | &quot;bold&quot;
          | &quot;bolder&quot;
          | &quot;lighter&quot;
          | &quot;inherit&quot;
        }?,
        attribute text-anchor {
          &quot;start&quot; | &quot;middle&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?,
        attribute text-align {
          &quot;start&quot; | &quot;center&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?)),
    attribute requiredFonts { xsd:string }?,
    attribute systemLanguage { xsd:string }?,
    attribute d { xsd:string }?,
    attribute pathLength { xsd:string }?
  }
rect =
  element rect {
    (attribute id { xsd:NCName }
     | attribute xml:id { xsd:NCName })?,
    attribute xml:base { xsd:anyURI | xsd:string }?,
    attribute xml:lang { xsd:language? }?,
    attribute class { xsd:NMTOKENS }?,
    attribute role { xsd:string }?,
    attribute rel { xsd:string }?,
    attribute rev { xsd:string }?,
    attribute typeof { xsd:string }?,
    attribute content { xsd:string }?,
    attribute datatype { xsd:string }?,
    attribute resource { xsd:string }?,
    attribute about { xsd:string }?,
    attribute property { xsd:string }?,
    attribute xml:space { &quot;default&quot; | &quot;preserve&quot; }?,
    attribute transform { xsd:string | &quot;none&quot; }?,
    ((attribute fill-opacity { &quot;inherit&quot; | xsd:string }?,
      attribute stroke-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute fill { &quot;none&quot; | xsd:string }?,
        attribute fill-rule { &quot;inherit&quot; | &quot;nonzero&quot; | &quot;evenodd&quot; }?,
        attribute stroke { xsd:string }?,
        attribute stroke-dasharray { &quot;inherit&quot; | &quot;none&quot; | xsd:string }?,
        attribute stroke-dashoffset { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-linecap {
          &quot;butt&quot; | &quot;round&quot; | &quot;square&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-linejoin {
          &quot;miter&quot; | &quot;round&quot; | &quot;bevel&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-miterlimit { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-width { &quot;inherit&quot; | xsd:string }?,
        attribute color { xsd:string }?,
        attribute color-rendering {
          &quot;auto&quot; | &quot;optimizeSpeed&quot; | &quot;optimizeQuality&quot; | &quot;inherit&quot;
        }?)
     &amp; attribute vector-effect {
         &quot;none&quot; | &quot;non-scaling-stroke&quot; | &quot;inherit&quot;
       }?
     &amp; (attribute direction { &quot;ltr&quot; | &quot;rtl&quot; | &quot;inherit&quot; }?,
        attribute unicode-bidi {
          &quot;normal&quot; | &quot;embed&quot; | &quot;bidi-override&quot; | &quot;inherit&quot;
        }?)
     &amp; (attribute solid-color { xsd:string }?,
        attribute solid-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute display-align {
          &quot;auto&quot; | &quot;before&quot; | &quot;center&quot; | &quot;after&quot; | &quot;inherit&quot;
        }?,
        attribute line-increment { &quot;auto&quot; | &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute stop-color { xsd:string }?,
        attribute stop-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute font-family { &quot;inherit&quot; | xsd:string }?,
        attribute font-size { &quot;inherit&quot; | xsd:string }?,
        attribute font-style {
          &quot;normal&quot; | &quot;italic&quot; | &quot;oblique&quot; | &quot;inherit&quot;
        }?,
        attribute font-variant { &quot;normal&quot; | &quot;small-caps&quot; | &quot;inherit&quot; }?,
        attribute font-weight {
          &quot;normal&quot;
          | &quot;bold&quot;
          | &quot;bolder&quot;
          | &quot;lighter&quot;
          | &quot;inherit&quot;
        }?,
        attribute text-anchor {
          &quot;start&quot; | &quot;middle&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?,
        attribute text-align {
          &quot;start&quot; | &quot;center&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?)),
    attribute requiredFonts { xsd:string }?,
    attribute systemLanguage { xsd:string }?,
    attribute x { xsd:string }?,
    attribute y { xsd:string }?,
    attribute width { xsd:string }?,
    attribute height { xsd:string }?,
    attribute rx { xsd:string }?,
    attribute ry { xsd:string }?
  }
circle =
  element circle {
    (attribute id { xsd:NCName }
     | attribute xml:id { xsd:NCName })?,
    attribute xml:base { xsd:anyURI | xsd:string }?,
    attribute xml:lang { xsd:language? }?,
    attribute class { xsd:NMTOKENS }?,
    attribute role { xsd:string }?,
    attribute rel { xsd:string }?,
    attribute rev { xsd:string }?,
    attribute typeof { xsd:string }?,
    attribute content { xsd:string }?,
    attribute datatype { xsd:string }?,
    attribute resource { xsd:string }?,
    attribute about { xsd:string }?,
    attribute property { xsd:string }?,
    attribute xml:space { &quot;default&quot; | &quot;preserve&quot; }?,
    attribute transform { xsd:string | &quot;none&quot; }?,
    ((attribute fill-opacity { &quot;inherit&quot; | xsd:string }?,
      attribute stroke-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute fill { &quot;none&quot; | xsd:string }?,
        attribute fill-rule { &quot;inherit&quot; | &quot;nonzero&quot; | &quot;evenodd&quot; }?,
        attribute stroke { xsd:string }?,
        attribute stroke-dasharray { &quot;inherit&quot; | &quot;none&quot; | xsd:string }?,
        attribute stroke-dashoffset { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-linecap {
          &quot;butt&quot; | &quot;round&quot; | &quot;square&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-linejoin {
          &quot;miter&quot; | &quot;round&quot; | &quot;bevel&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-miterlimit { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-width { &quot;inherit&quot; | xsd:string }?,
        attribute color { xsd:string }?,
        attribute color-rendering {
          &quot;auto&quot; | &quot;optimizeSpeed&quot; | &quot;optimizeQuality&quot; | &quot;inherit&quot;
        }?)
     &amp; attribute vector-effect {
         &quot;none&quot; | &quot;non-scaling-stroke&quot; | &quot;inherit&quot;
       }?
     &amp; (attribute direction { &quot;ltr&quot; | &quot;rtl&quot; | &quot;inherit&quot; }?,
        attribute unicode-bidi {
          &quot;normal&quot; | &quot;embed&quot; | &quot;bidi-override&quot; | &quot;inherit&quot;
        }?)
     &amp; (attribute solid-color { xsd:string }?,
        attribute solid-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute display-align {
          &quot;auto&quot; | &quot;before&quot; | &quot;center&quot; | &quot;after&quot; | &quot;inherit&quot;
        }?,
        attribute line-increment { &quot;auto&quot; | &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute stop-color { xsd:string }?,
        attribute stop-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute font-family { &quot;inherit&quot; | xsd:string }?,
        attribute font-size { &quot;inherit&quot; | xsd:string }?,
        attribute font-style {
          &quot;normal&quot; | &quot;italic&quot; | &quot;oblique&quot; | &quot;inherit&quot;
        }?,
        attribute font-variant { &quot;normal&quot; | &quot;small-caps&quot; | &quot;inherit&quot; }?,
        attribute font-weight {
          &quot;normal&quot;
          | &quot;bold&quot;
          | &quot;bolder&quot;
          | &quot;lighter&quot;
          | &quot;inherit&quot;
        }?,
        attribute text-anchor {
          &quot;start&quot; | &quot;middle&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?,
        attribute text-align {
          &quot;start&quot; | &quot;center&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?)),
    attribute requiredFonts { xsd:string }?,
    attribute systemLanguage { xsd:string }?,
    attribute cx { xsd:string }?,
    attribute cy { xsd:string }?,
    attribute r { xsd:string }?
  }
line =
  element line {
    (attribute id { xsd:NCName }
     | attribute xml:id { xsd:NCName })?,
    attribute xml:base { xsd:anyURI | xsd:string }?,
    attribute xml:lang { xsd:language? }?,
    attribute class { xsd:NMTOKENS }?,
    attribute role { xsd:string }?,
    attribute rel { xsd:string }?,
    attribute rev { xsd:string }?,
    attribute typeof { xsd:string }?,
    attribute content { xsd:string }?,
    attribute datatype { xsd:string }?,
    attribute resource { xsd:string }?,
    attribute about { xsd:string }?,
    attribute property { xsd:string }?,
    attribute xml:space { &quot;default&quot; | &quot;preserve&quot; }?,
    attribute transform { xsd:string | &quot;none&quot; }?,
    ((attribute fill-opacity { &quot;inherit&quot; | xsd:string }?,
      attribute stroke-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute fill { &quot;none&quot; | xsd:string }?,
        attribute fill-rule { &quot;inherit&quot; | &quot;nonzero&quot; | &quot;evenodd&quot; }?,
        attribute stroke { xsd:string }?,
        attribute stroke-dasharray { &quot;inherit&quot; | &quot;none&quot; | xsd:string }?,
        attribute stroke-dashoffset { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-linecap {
          &quot;butt&quot; | &quot;round&quot; | &quot;square&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-linejoin {
          &quot;miter&quot; | &quot;round&quot; | &quot;bevel&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-miterlimit { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-width { &quot;inherit&quot; | xsd:string }?,
        attribute color { xsd:string }?,
        attribute color-rendering {
          &quot;auto&quot; | &quot;optimizeSpeed&quot; | &quot;optimizeQuality&quot; | &quot;inherit&quot;
        }?)
     &amp; attribute vector-effect {
         &quot;none&quot; | &quot;non-scaling-stroke&quot; | &quot;inherit&quot;
       }?
     &amp; (attribute direction { &quot;ltr&quot; | &quot;rtl&quot; | &quot;inherit&quot; }?,
        attribute unicode-bidi {
          &quot;normal&quot; | &quot;embed&quot; | &quot;bidi-override&quot; | &quot;inherit&quot;
        }?)
     &amp; (attribute solid-color { xsd:string }?,
        attribute solid-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute display-align {
          &quot;auto&quot; | &quot;before&quot; | &quot;center&quot; | &quot;after&quot; | &quot;inherit&quot;
        }?,
        attribute line-increment { &quot;auto&quot; | &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute stop-color { xsd:string }?,
        attribute stop-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute font-family { &quot;inherit&quot; | xsd:string }?,
        attribute font-size { &quot;inherit&quot; | xsd:string }?,
        attribute font-style {
          &quot;normal&quot; | &quot;italic&quot; | &quot;oblique&quot; | &quot;inherit&quot;
        }?,
        attribute font-variant { &quot;normal&quot; | &quot;small-caps&quot; | &quot;inherit&quot; }?,
        attribute font-weight {
          &quot;normal&quot;
          | &quot;bold&quot;
          | &quot;bolder&quot;
          | &quot;lighter&quot;
          | &quot;inherit&quot;
        }?,
        attribute text-anchor {
          &quot;start&quot; | &quot;middle&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?,
        attribute text-align {
          &quot;start&quot; | &quot;center&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?)),
    attribute requiredFonts { xsd:string }?,
    attribute systemLanguage { xsd:string }?,
    attribute x1 { xsd:string }?,
    attribute y1 { xsd:string }?,
    attribute x2 { xsd:string }?,
    attribute y2 { xsd:string }?
  }
ellipse =
  element ellipse {
    (attribute id { xsd:NCName }
     | attribute xml:id { xsd:NCName })?,
    attribute xml:base { xsd:anyURI | xsd:string }?,
    attribute xml:lang { xsd:language? }?,
    attribute class { xsd:NMTOKENS }?,
    attribute role { xsd:string }?,
    attribute rel { xsd:string }?,
    attribute rev { xsd:string }?,
    attribute typeof { xsd:string }?,
    attribute content { xsd:string }?,
    attribute datatype { xsd:string }?,
    attribute resource { xsd:string }?,
    attribute about { xsd:string }?,
    attribute property { xsd:string }?,
    attribute xml:space { &quot;default&quot; | &quot;preserve&quot; }?,
    attribute transform { xsd:string | &quot;none&quot; }?,
    ((attribute fill-opacity { &quot;inherit&quot; | xsd:string }?,
      attribute stroke-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute fill { &quot;none&quot; | xsd:string }?,
        attribute fill-rule { &quot;inherit&quot; | &quot;nonzero&quot; | &quot;evenodd&quot; }?,
        attribute stroke { xsd:string }?,
        attribute stroke-dasharray { &quot;inherit&quot; | &quot;none&quot; | xsd:string }?,
        attribute stroke-dashoffset { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-linecap {
          &quot;butt&quot; | &quot;round&quot; | &quot;square&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-linejoin {
          &quot;miter&quot; | &quot;round&quot; | &quot;bevel&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-miterlimit { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-width { &quot;inherit&quot; | xsd:string }?,
        attribute color { xsd:string }?,
        attribute color-rendering {
          &quot;auto&quot; | &quot;optimizeSpeed&quot; | &quot;optimizeQuality&quot; | &quot;inherit&quot;
        }?)
     &amp; attribute vector-effect {
         &quot;none&quot; | &quot;non-scaling-stroke&quot; | &quot;inherit&quot;
       }?
     &amp; (attribute direction { &quot;ltr&quot; | &quot;rtl&quot; | &quot;inherit&quot; }?,
        attribute unicode-bidi {
          &quot;normal&quot; | &quot;embed&quot; | &quot;bidi-override&quot; | &quot;inherit&quot;
        }?)
     &amp; (attribute solid-color { xsd:string }?,
        attribute solid-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute display-align {
          &quot;auto&quot; | &quot;before&quot; | &quot;center&quot; | &quot;after&quot; | &quot;inherit&quot;
        }?,
        attribute line-increment { &quot;auto&quot; | &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute stop-color { xsd:string }?,
        attribute stop-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute font-family { &quot;inherit&quot; | xsd:string }?,
        attribute font-size { &quot;inherit&quot; | xsd:string }?,
        attribute font-style {
          &quot;normal&quot; | &quot;italic&quot; | &quot;oblique&quot; | &quot;inherit&quot;
        }?,
        attribute font-variant { &quot;normal&quot; | &quot;small-caps&quot; | &quot;inherit&quot; }?,
        attribute font-weight {
          &quot;normal&quot;
          | &quot;bold&quot;
          | &quot;bolder&quot;
          | &quot;lighter&quot;
          | &quot;inherit&quot;
        }?,
        attribute text-anchor {
          &quot;start&quot; | &quot;middle&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?,
        attribute text-align {
          &quot;start&quot; | &quot;center&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?)),
    attribute requiredFonts { xsd:string }?,
    attribute systemLanguage { xsd:string }?,
    attribute rx { xsd:string }?,
    attribute ry { xsd:string }?,
    attribute cx { xsd:string }?,
    attribute cy { xsd:string }?
  }
polyline =
  element polyline {
    (attribute id { xsd:NCName }
     | attribute xml:id { xsd:NCName })?,
    attribute xml:base { xsd:anyURI | xsd:string }?,
    attribute xml:lang { xsd:language? }?,
    attribute class { xsd:NMTOKENS }?,
    attribute role { xsd:string }?,
    attribute rel { xsd:string }?,
    attribute rev { xsd:string }?,
    attribute typeof { xsd:string }?,
    attribute content { xsd:string }?,
    attribute datatype { xsd:string }?,
    attribute resource { xsd:string }?,
    attribute about { xsd:string }?,
    attribute property { xsd:string }?,
    attribute xml:space { &quot;default&quot; | &quot;preserve&quot; }?,
    attribute transform { xsd:string | &quot;none&quot; }?,
    ((attribute fill-opacity { &quot;inherit&quot; | xsd:string }?,
      attribute stroke-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute fill { &quot;none&quot; | xsd:string }?,
        attribute fill-rule { &quot;inherit&quot; | &quot;nonzero&quot; | &quot;evenodd&quot; }?,
        attribute stroke { xsd:string }?,
        attribute stroke-dasharray { &quot;inherit&quot; | &quot;none&quot; | xsd:string }?,
        attribute stroke-dashoffset { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-linecap {
          &quot;butt&quot; | &quot;round&quot; | &quot;square&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-linejoin {
          &quot;miter&quot; | &quot;round&quot; | &quot;bevel&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-miterlimit { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-width { &quot;inherit&quot; | xsd:string }?,
        attribute color { xsd:string }?,
        attribute color-rendering {
          &quot;auto&quot; | &quot;optimizeSpeed&quot; | &quot;optimizeQuality&quot; | &quot;inherit&quot;
        }?)
     &amp; attribute vector-effect {
         &quot;none&quot; | &quot;non-scaling-stroke&quot; | &quot;inherit&quot;
       }?
     &amp; (attribute direction { &quot;ltr&quot; | &quot;rtl&quot; | &quot;inherit&quot; }?,
        attribute unicode-bidi {
          &quot;normal&quot; | &quot;embed&quot; | &quot;bidi-override&quot; | &quot;inherit&quot;
        }?)
     &amp; (attribute solid-color { xsd:string }?,
        attribute solid-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute display-align {
          &quot;auto&quot; | &quot;before&quot; | &quot;center&quot; | &quot;after&quot; | &quot;inherit&quot;
        }?,
        attribute line-increment { &quot;auto&quot; | &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute stop-color { xsd:string }?,
        attribute stop-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute font-family { &quot;inherit&quot; | xsd:string }?,
        attribute font-size { &quot;inherit&quot; | xsd:string }?,
        attribute font-style {
          &quot;normal&quot; | &quot;italic&quot; | &quot;oblique&quot; | &quot;inherit&quot;
        }?,
        attribute font-variant { &quot;normal&quot; | &quot;small-caps&quot; | &quot;inherit&quot; }?,
        attribute font-weight {
          &quot;normal&quot;
          | &quot;bold&quot;
          | &quot;bolder&quot;
          | &quot;lighter&quot;
          | &quot;inherit&quot;
        }?,
        attribute text-anchor {
          &quot;start&quot; | &quot;middle&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?,
        attribute text-align {
          &quot;start&quot; | &quot;center&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?)),
    attribute requiredFonts { xsd:string }?,
    attribute systemLanguage { xsd:string }?,
    attribute points { xsd:string }?
  }
polygon =
  element polygon {
    (attribute id { xsd:NCName }
     | attribute xml:id { xsd:NCName })?,
    attribute xml:base { xsd:anyURI | xsd:string }?,
    attribute xml:lang { xsd:language? }?,
    attribute class { xsd:NMTOKENS }?,
    attribute role { xsd:string }?,
    attribute rel { xsd:string }?,
    attribute rev { xsd:string }?,
    attribute typeof { xsd:string }?,
    attribute content { xsd:string }?,
    attribute datatype { xsd:string }?,
    attribute resource { xsd:string }?,
    attribute about { xsd:string }?,
    attribute property { xsd:string }?,
    attribute xml:space { &quot;default&quot; | &quot;preserve&quot; }?,
    attribute transform { xsd:string | &quot;none&quot; }?,
    ((attribute fill-opacity { &quot;inherit&quot; | xsd:string }?,
      attribute stroke-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute fill { &quot;none&quot; | xsd:string }?,
        attribute fill-rule { &quot;inherit&quot; | &quot;nonzero&quot; | &quot;evenodd&quot; }?,
        attribute stroke { xsd:string }?,
        attribute stroke-dasharray { &quot;inherit&quot; | &quot;none&quot; | xsd:string }?,
        attribute stroke-dashoffset { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-linecap {
          &quot;butt&quot; | &quot;round&quot; | &quot;square&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-linejoin {
          &quot;miter&quot; | &quot;round&quot; | &quot;bevel&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-miterlimit { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-width { &quot;inherit&quot; | xsd:string }?,
        attribute color { xsd:string }?,
        attribute color-rendering {
          &quot;auto&quot; | &quot;optimizeSpeed&quot; | &quot;optimizeQuality&quot; | &quot;inherit&quot;
        }?)
     &amp; attribute vector-effect {
         &quot;none&quot; | &quot;non-scaling-stroke&quot; | &quot;inherit&quot;
       }?
     &amp; (attribute direction { &quot;ltr&quot; | &quot;rtl&quot; | &quot;inherit&quot; }?,
        attribute unicode-bidi {
          &quot;normal&quot; | &quot;embed&quot; | &quot;bidi-override&quot; | &quot;inherit&quot;
        }?)
     &amp; (attribute solid-color { xsd:string }?,
        attribute solid-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute display-align {
          &quot;auto&quot; | &quot;before&quot; | &quot;center&quot; | &quot;after&quot; | &quot;inherit&quot;
        }?,
        attribute line-increment { &quot;auto&quot; | &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute stop-color { xsd:string }?,
        attribute stop-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute font-family { &quot;inherit&quot; | xsd:string }?,
        attribute font-size { &quot;inherit&quot; | xsd:string }?,
        attribute font-style {
          &quot;normal&quot; | &quot;italic&quot; | &quot;oblique&quot; | &quot;inherit&quot;
        }?,
        attribute font-variant { &quot;normal&quot; | &quot;small-caps&quot; | &quot;inherit&quot; }?,
        attribute font-weight {
          &quot;normal&quot;
          | &quot;bold&quot;
          | &quot;bolder&quot;
          | &quot;lighter&quot;
          | &quot;inherit&quot;
        }?,
        attribute text-anchor {
          &quot;start&quot; | &quot;middle&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?,
        attribute text-align {
          &quot;start&quot; | &quot;center&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?)),
    attribute requiredFonts { xsd:string }?,
    attribute systemLanguage { xsd:string }?,
    attribute points { xsd:string }?
  }
solidColor =
  element solidColor {
    ((attribute fill-opacity { &quot;inherit&quot; | xsd:string }?,
      attribute stroke-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute fill { &quot;none&quot; | xsd:string }?,
        attribute fill-rule { &quot;inherit&quot; | &quot;nonzero&quot; | &quot;evenodd&quot; }?,
        attribute stroke { xsd:string }?,
        attribute stroke-dasharray { &quot;inherit&quot; | &quot;none&quot; | xsd:string }?,
        attribute stroke-dashoffset { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-linecap {
          &quot;butt&quot; | &quot;round&quot; | &quot;square&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-linejoin {
          &quot;miter&quot; | &quot;round&quot; | &quot;bevel&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-miterlimit { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-width { &quot;inherit&quot; | xsd:string }?,
        attribute color { xsd:string }?,
        attribute color-rendering {
          &quot;auto&quot; | &quot;optimizeSpeed&quot; | &quot;optimizeQuality&quot; | &quot;inherit&quot;
        }?)
     &amp; attribute vector-effect {
         &quot;none&quot; | &quot;non-scaling-stroke&quot; | &quot;inherit&quot;
       }?
     &amp; (attribute direction { &quot;ltr&quot; | &quot;rtl&quot; | &quot;inherit&quot; }?,
        attribute unicode-bidi {
          &quot;normal&quot; | &quot;embed&quot; | &quot;bidi-override&quot; | &quot;inherit&quot;
        }?)
     &amp; (attribute solid-color { xsd:string }?,
        attribute solid-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute display-align {
          &quot;auto&quot; | &quot;before&quot; | &quot;center&quot; | &quot;after&quot; | &quot;inherit&quot;
        }?,
        attribute line-increment { &quot;auto&quot; | &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute stop-color { xsd:string }?,
        attribute stop-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute font-family { &quot;inherit&quot; | xsd:string }?,
        attribute font-size { &quot;inherit&quot; | xsd:string }?,
        attribute font-style {
          &quot;normal&quot; | &quot;italic&quot; | &quot;oblique&quot; | &quot;inherit&quot;
        }?,
        attribute font-variant { &quot;normal&quot; | &quot;small-caps&quot; | &quot;inherit&quot; }?,
        attribute font-weight {
          &quot;normal&quot;
          | &quot;bold&quot;
          | &quot;bolder&quot;
          | &quot;lighter&quot;
          | &quot;inherit&quot;
        }?,
        attribute text-anchor {
          &quot;start&quot; | &quot;middle&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?,
        attribute text-align {
          &quot;start&quot; | &quot;center&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?)),
    (attribute id { xsd:NCName }
     | attribute xml:id { xsd:NCName })?,
    attribute xml:base { xsd:anyURI | xsd:string }?,
    attribute xml:lang { xsd:language? }?,
    attribute class { xsd:NMTOKENS }?,
    attribute role { xsd:string }?,
    attribute rel { xsd:string }?,
    attribute rev { xsd:string }?,
    attribute typeof { xsd:string }?,
    attribute content { xsd:string }?,
    attribute datatype { xsd:string }?,
    attribute resource { xsd:string }?,
    attribute about { xsd:string }?,
    attribute property { xsd:string }?,
    attribute xml:space { &quot;default&quot; | &quot;preserve&quot; }?
  }
textArea =
  element textArea {
    ((attribute fill-opacity { &quot;inherit&quot; | xsd:string }?,
      attribute stroke-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute fill { &quot;none&quot; | xsd:string }?,
        attribute fill-rule { &quot;inherit&quot; | &quot;nonzero&quot; | &quot;evenodd&quot; }?,
        attribute stroke { xsd:string }?,
        attribute stroke-dasharray { &quot;inherit&quot; | &quot;none&quot; | xsd:string }?,
        attribute stroke-dashoffset { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-linecap {
          &quot;butt&quot; | &quot;round&quot; | &quot;square&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-linejoin {
          &quot;miter&quot; | &quot;round&quot; | &quot;bevel&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-miterlimit { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-width { &quot;inherit&quot; | xsd:string }?,
        attribute color { xsd:string }?,
        attribute color-rendering {
          &quot;auto&quot; | &quot;optimizeSpeed&quot; | &quot;optimizeQuality&quot; | &quot;inherit&quot;
        }?)
     &amp; attribute vector-effect {
         &quot;none&quot; | &quot;non-scaling-stroke&quot; | &quot;inherit&quot;
       }?
     &amp; (attribute direction { &quot;ltr&quot; | &quot;rtl&quot; | &quot;inherit&quot; }?,
        attribute unicode-bidi {
          &quot;normal&quot; | &quot;embed&quot; | &quot;bidi-override&quot; | &quot;inherit&quot;
        }?)
     &amp; (attribute solid-color { xsd:string }?,
        attribute solid-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute display-align {
          &quot;auto&quot; | &quot;before&quot; | &quot;center&quot; | &quot;after&quot; | &quot;inherit&quot;
        }?,
        attribute line-increment { &quot;auto&quot; | &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute stop-color { xsd:string }?,
        attribute stop-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute font-family { &quot;inherit&quot; | xsd:string }?,
        attribute font-size { &quot;inherit&quot; | xsd:string }?,
        attribute font-style {
          &quot;normal&quot; | &quot;italic&quot; | &quot;oblique&quot; | &quot;inherit&quot;
        }?,
        attribute font-variant { &quot;normal&quot; | &quot;small-caps&quot; | &quot;inherit&quot; }?,
        attribute font-weight {
          &quot;normal&quot;
          | &quot;bold&quot;
          | &quot;bolder&quot;
          | &quot;lighter&quot;
          | &quot;inherit&quot;
        }?,
        attribute text-anchor {
          &quot;start&quot; | &quot;middle&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?,
        attribute text-align {
          &quot;start&quot; | &quot;center&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?)),
    (attribute id { xsd:NCName }
     | attribute xml:id { xsd:NCName })?,
    attribute xml:base { xsd:anyURI | xsd:string }?,
    attribute xml:lang { xsd:language? }?,
    attribute class { xsd:NMTOKENS }?,
    attribute role { xsd:string }?,
    attribute rel { xsd:string }?,
    attribute rev { xsd:string }?,
    attribute typeof { xsd:string }?,
    attribute content { xsd:string }?,
    attribute datatype { xsd:string }?,
    attribute resource { xsd:string }?,
    attribute about { xsd:string }?,
    attribute property { xsd:string }?,
    attribute xml:space { &quot;default&quot; | &quot;preserve&quot; }?,
    attribute requiredFonts { xsd:string }?,
    attribute systemLanguage { xsd:string }?,
    attribute transform { xsd:string | &quot;none&quot; }?,
    attribute x { xsd:string }?,
    attribute y { xsd:string }?,
    attribute width { xsd:string | &quot;auto&quot; }?,
    attribute height { xsd:string | &quot;auto&quot; }?,
    (text)+
  }
linearGradient =
  element linearGradient {
    ((attribute fill-opacity { &quot;inherit&quot; | xsd:string }?,
      attribute stroke-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute fill { &quot;none&quot; | xsd:string }?,
        attribute fill-rule { &quot;inherit&quot; | &quot;nonzero&quot; | &quot;evenodd&quot; }?,
        attribute stroke { xsd:string }?,
        attribute stroke-dasharray { &quot;inherit&quot; | &quot;none&quot; | xsd:string }?,
        attribute stroke-dashoffset { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-linecap {
          &quot;butt&quot; | &quot;round&quot; | &quot;square&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-linejoin {
          &quot;miter&quot; | &quot;round&quot; | &quot;bevel&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-miterlimit { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-width { &quot;inherit&quot; | xsd:string }?,
        attribute color { xsd:string }?,
        attribute color-rendering {
          &quot;auto&quot; | &quot;optimizeSpeed&quot; | &quot;optimizeQuality&quot; | &quot;inherit&quot;
        }?)
     &amp; attribute vector-effect {
         &quot;none&quot; | &quot;non-scaling-stroke&quot; | &quot;inherit&quot;
       }?
     &amp; (attribute direction { &quot;ltr&quot; | &quot;rtl&quot; | &quot;inherit&quot; }?,
        attribute unicode-bidi {
          &quot;normal&quot; | &quot;embed&quot; | &quot;bidi-override&quot; | &quot;inherit&quot;
        }?)
     &amp; (attribute solid-color { xsd:string }?,
        attribute solid-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute display-align {
          &quot;auto&quot; | &quot;before&quot; | &quot;center&quot; | &quot;after&quot; | &quot;inherit&quot;
        }?,
        attribute line-increment { &quot;auto&quot; | &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute stop-color { xsd:string }?,
        attribute stop-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute font-family { &quot;inherit&quot; | xsd:string }?,
        attribute font-size { &quot;inherit&quot; | xsd:string }?,
        attribute font-style {
          &quot;normal&quot; | &quot;italic&quot; | &quot;oblique&quot; | &quot;inherit&quot;
        }?,
        attribute font-variant { &quot;normal&quot; | &quot;small-caps&quot; | &quot;inherit&quot; }?,
        attribute font-weight {
          &quot;normal&quot;
          | &quot;bold&quot;
          | &quot;bolder&quot;
          | &quot;lighter&quot;
          | &quot;inherit&quot;
        }?,
        attribute text-anchor {
          &quot;start&quot; | &quot;middle&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?,
        attribute text-align {
          &quot;start&quot; | &quot;center&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?)),
    attribute gradientUnits { &quot;userSpaceOnUse&quot; | &quot;objectBoundingBox&quot; }?,
    (attribute id { xsd:NCName }
     | attribute xml:id { xsd:NCName })?,
    attribute xml:base { xsd:anyURI | xsd:string }?,
    attribute xml:lang { xsd:language? }?,
    attribute class { xsd:NMTOKENS }?,
    attribute role { xsd:string }?,
    attribute rel { xsd:string }?,
    attribute rev { xsd:string }?,
    attribute typeof { xsd:string }?,
    attribute content { xsd:string }?,
    attribute datatype { xsd:string }?,
    attribute resource { xsd:string }?,
    attribute about { xsd:string }?,
    attribute property { xsd:string }?,
    attribute xml:space { &quot;default&quot; | &quot;preserve&quot; }?,
    attribute x1 { xsd:string }?,
    attribute y1 { xsd:string }?,
    attribute x2 { xsd:string }?,
    attribute y2 { xsd:string }?,
    (stop)*
  }
radialGradient =
  element radialGradient {
    ((attribute fill-opacity { &quot;inherit&quot; | xsd:string }?,
      attribute stroke-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute fill { &quot;none&quot; | xsd:string }?,
        attribute fill-rule { &quot;inherit&quot; | &quot;nonzero&quot; | &quot;evenodd&quot; }?,
        attribute stroke { xsd:string }?,
        attribute stroke-dasharray { &quot;inherit&quot; | &quot;none&quot; | xsd:string }?,
        attribute stroke-dashoffset { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-linecap {
          &quot;butt&quot; | &quot;round&quot; | &quot;square&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-linejoin {
          &quot;miter&quot; | &quot;round&quot; | &quot;bevel&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-miterlimit { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-width { &quot;inherit&quot; | xsd:string }?,
        attribute color { xsd:string }?,
        attribute color-rendering {
          &quot;auto&quot; | &quot;optimizeSpeed&quot; | &quot;optimizeQuality&quot; | &quot;inherit&quot;
        }?)
     &amp; attribute vector-effect {
         &quot;none&quot; | &quot;non-scaling-stroke&quot; | &quot;inherit&quot;
       }?
     &amp; (attribute direction { &quot;ltr&quot; | &quot;rtl&quot; | &quot;inherit&quot; }?,
        attribute unicode-bidi {
          &quot;normal&quot; | &quot;embed&quot; | &quot;bidi-override&quot; | &quot;inherit&quot;
        }?)
     &amp; (attribute solid-color { xsd:string }?,
        attribute solid-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute display-align {
          &quot;auto&quot; | &quot;before&quot; | &quot;center&quot; | &quot;after&quot; | &quot;inherit&quot;
        }?,
        attribute line-increment { &quot;auto&quot; | &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute stop-color { xsd:string }?,
        attribute stop-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute font-family { &quot;inherit&quot; | xsd:string }?,
        attribute font-size { &quot;inherit&quot; | xsd:string }?,
        attribute font-style {
          &quot;normal&quot; | &quot;italic&quot; | &quot;oblique&quot; | &quot;inherit&quot;
        }?,
        attribute font-variant { &quot;normal&quot; | &quot;small-caps&quot; | &quot;inherit&quot; }?,
        attribute font-weight {
          &quot;normal&quot;
          | &quot;bold&quot;
          | &quot;bolder&quot;
          | &quot;lighter&quot;
          | &quot;inherit&quot;
        }?,
        attribute text-anchor {
          &quot;start&quot; | &quot;middle&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?,
        attribute text-align {
          &quot;start&quot; | &quot;center&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?)),
    attribute gradientUnits { &quot;userSpaceOnUse&quot; | &quot;objectBoundingBox&quot; }?,
    (attribute id { xsd:NCName }
     | attribute xml:id { xsd:NCName })?,
    attribute xml:base { xsd:anyURI | xsd:string }?,
    attribute xml:lang { xsd:language? }?,
    attribute class { xsd:NMTOKENS }?,
    attribute role { xsd:string }?,
    attribute rel { xsd:string }?,
    attribute rev { xsd:string }?,
    attribute typeof { xsd:string }?,
    attribute content { xsd:string }?,
    attribute datatype { xsd:string }?,
    attribute resource { xsd:string }?,
    attribute about { xsd:string }?,
    attribute property { xsd:string }?,
    attribute xml:space { &quot;default&quot; | &quot;preserve&quot; }?,
    attribute cx { xsd:string }?,
    attribute cy { xsd:string }?,
    attribute r { xsd:string }?,
    (stop)*
  }


\text =
  element text {
    ((attribute fill-opacity { &quot;inherit&quot; | xsd:string }?,
      attribute stroke-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute fill { &quot;none&quot; | xsd:string }?,
        attribute fill-rule { &quot;inherit&quot; | &quot;nonzero&quot; | &quot;evenodd&quot; }?,
        attribute stroke { xsd:string }?,
        attribute stroke-dasharray { &quot;inherit&quot; | &quot;none&quot; | xsd:string }?,
        attribute stroke-dashoffset { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-linecap {
          &quot;butt&quot; | &quot;round&quot; | &quot;square&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-linejoin {
          &quot;miter&quot; | &quot;round&quot; | &quot;bevel&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-miterlimit { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-width { &quot;inherit&quot; | xsd:string }?,
        attribute color { xsd:string }?,
        attribute color-rendering {
          &quot;auto&quot; | &quot;optimizeSpeed&quot; | &quot;optimizeQuality&quot; | &quot;inherit&quot;
        }?)
     &amp; attribute vector-effect {
         &quot;none&quot; | &quot;non-scaling-stroke&quot; | &quot;inherit&quot;
       }?
     &amp; (attribute direction { &quot;ltr&quot; | &quot;rtl&quot; | &quot;inherit&quot; }?,
        attribute unicode-bidi {
          &quot;normal&quot; | &quot;embed&quot; | &quot;bidi-override&quot; | &quot;inherit&quot;
        }?)
     &amp; (attribute solid-color { xsd:string }?,
        attribute solid-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute display-align {
          &quot;auto&quot; | &quot;before&quot; | &quot;center&quot; | &quot;after&quot; | &quot;inherit&quot;
        }?,
        attribute line-increment { &quot;auto&quot; | &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute stop-color { xsd:string }?,
        attribute stop-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute font-family { &quot;inherit&quot; | xsd:string }?,
        attribute font-size { &quot;inherit&quot; | xsd:string }?,
        attribute font-style {
          &quot;normal&quot; | &quot;italic&quot; | &quot;oblique&quot; | &quot;inherit&quot;
        }?,
        attribute font-variant { &quot;normal&quot; | &quot;small-caps&quot; | &quot;inherit&quot; }?,
        attribute font-weight {
          &quot;normal&quot;
          | &quot;bold&quot;
          | &quot;bolder&quot;
          | &quot;lighter&quot;
          | &quot;inherit&quot;
        }?,
        attribute text-anchor {
          &quot;start&quot; | &quot;middle&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?,
        attribute text-align {
          &quot;start&quot; | &quot;center&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?)),
    (attribute id { xsd:NCName }
     | attribute xml:id { xsd:NCName })?,
    attribute xml:base { xsd:anyURI | xsd:string }?,
    attribute xml:lang { xsd:language? }?,
    attribute class { xsd:NMTOKENS }?,
    attribute role { xsd:string }?,
    attribute rel { xsd:string }?,
    attribute rev { xsd:string }?,
    attribute typeof { xsd:string }?,
    attribute content { xsd:string }?,
    attribute datatype { xsd:string }?,
    attribute resource { xsd:string }?,
    attribute about { xsd:string }?,
    attribute editable { &quot;none&quot; }?,
    attribute property { xsd:string }?,
    attribute xml:space { &quot;default&quot; | &quot;preserve&quot; }?,
    attribute requiredFonts { xsd:string }?,
    attribute systemLanguage { xsd:string }?,
    attribute transform { xsd:string | &quot;none&quot; }?,
    attribute x { xsd:string }?,
    attribute y { xsd:string }?,
    attribute rotate { xsd:string }?,
    (text)+
  }
g =
  element g {
    ((attribute fill-opacity { &quot;inherit&quot; | xsd:string }?,
      attribute stroke-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute fill { &quot;none&quot; | xsd:string }?,
        attribute fill-rule { &quot;inherit&quot; | &quot;nonzero&quot; | &quot;evenodd&quot; }?,
        attribute stroke { xsd:string }?,
        attribute stroke-dasharray { &quot;inherit&quot; | &quot;none&quot; | xsd:string }?,
        attribute stroke-dashoffset { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-linecap {
          &quot;butt&quot; | &quot;round&quot; | &quot;square&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-linejoin {
          &quot;miter&quot; | &quot;round&quot; | &quot;bevel&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-miterlimit { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-width { &quot;inherit&quot; | xsd:string }?,
        attribute color { xsd:string }?,
        attribute color-rendering {
          &quot;auto&quot; | &quot;optimizeSpeed&quot; | &quot;optimizeQuality&quot; | &quot;inherit&quot;
        }?)
     &amp; attribute vector-effect {
         &quot;none&quot; | &quot;non-scaling-stroke&quot; | &quot;inherit&quot;
       }?
     &amp; (attribute direction { &quot;ltr&quot; | &quot;rtl&quot; | &quot;inherit&quot; }?,
        attribute unicode-bidi {
          &quot;normal&quot; | &quot;embed&quot; | &quot;bidi-override&quot; | &quot;inherit&quot;
        }?)
     &amp; (attribute solid-color { xsd:string }?,
        attribute solid-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute display-align {
          &quot;auto&quot; | &quot;before&quot; | &quot;center&quot; | &quot;after&quot; | &quot;inherit&quot;
        }?,
        attribute line-increment { &quot;auto&quot; | &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute stop-color { xsd:string }?,
        attribute stop-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute font-family { &quot;inherit&quot; | xsd:string }?,
        attribute font-size { &quot;inherit&quot; | xsd:string }?,
        attribute font-style {
          &quot;normal&quot; | &quot;italic&quot; | &quot;oblique&quot; | &quot;inherit&quot;
        }?,
        attribute font-variant { &quot;normal&quot; | &quot;small-caps&quot; | &quot;inherit&quot; }?,
        attribute font-weight {
          &quot;normal&quot;
          | &quot;bold&quot;
          | &quot;bolder&quot;
          | &quot;lighter&quot;
          | &quot;inherit&quot;
        }?,
        attribute text-anchor {
          &quot;start&quot; | &quot;middle&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?,
        attribute text-align {
          &quot;start&quot; | &quot;center&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?)),
    (attribute id { xsd:NCName }
     | attribute xml:id { xsd:NCName })?,
    attribute xml:base { xsd:anyURI | xsd:string }?,
    attribute xml:lang { xsd:language? }?,
    attribute class { xsd:NMTOKENS }?,
    attribute role { xsd:string }?,
    attribute rel { xsd:string }?,
    attribute rev { xsd:string }?,
    attribute typeof { xsd:string }?,
    attribute content { xsd:string }?,
    attribute datatype { xsd:string }?,
    attribute resource { xsd:string }?,
    attribute about { xsd:string }?,
    attribute property { xsd:string }?,
    attribute xml:space { &quot;default&quot; | &quot;preserve&quot; }?,
    attribute requiredFonts { xsd:string }?,
    attribute systemLanguage { xsd:string }?,
    attribute transform { xsd:string | &quot;none&quot; }?,
    (path
     | rect
     | circle
     | line
     | ellipse
     | polyline
     | polygon
     | solidColor
     | textArea
     | linearGradient
     | radialGradient
     | \text
     | g
     | defs
     | use)*
  }
defs =
  element defs {
    ((attribute fill-opacity { &quot;inherit&quot; | xsd:string }?,
      attribute stroke-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute fill { &quot;none&quot; | xsd:string }?,
        attribute fill-rule { &quot;inherit&quot; | &quot;nonzero&quot; | &quot;evenodd&quot; }?,
        attribute stroke { xsd:string }?,
        attribute stroke-dasharray { &quot;inherit&quot; | &quot;none&quot; | xsd:string }?,
        attribute stroke-dashoffset { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-linecap {
          &quot;butt&quot; | &quot;round&quot; | &quot;square&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-linejoin {
          &quot;miter&quot; | &quot;round&quot; | &quot;bevel&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-miterlimit { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-width { &quot;inherit&quot; | xsd:string }?,
        attribute color { xsd:string }?,
        attribute color-rendering {
          &quot;auto&quot; | &quot;optimizeSpeed&quot; | &quot;optimizeQuality&quot; | &quot;inherit&quot;
        }?)
     &amp; attribute vector-effect {
         &quot;none&quot; | &quot;non-scaling-stroke&quot; | &quot;inherit&quot;
       }?
     &amp; (attribute direction { &quot;ltr&quot; | &quot;rtl&quot; | &quot;inherit&quot; }?,
        attribute unicode-bidi {
          &quot;normal&quot; | &quot;embed&quot; | &quot;bidi-override&quot; | &quot;inherit&quot;
        }?)
     &amp; (attribute solid-color { xsd:string }?,
        attribute solid-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute display-align {
          &quot;auto&quot; | &quot;before&quot; | &quot;center&quot; | &quot;after&quot; | &quot;inherit&quot;
        }?,
        attribute line-increment { &quot;auto&quot; | &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute stop-color { xsd:string }?,
        attribute stop-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute font-family { &quot;inherit&quot; | xsd:string }?,
        attribute font-size { &quot;inherit&quot; | xsd:string }?,
        attribute font-style {
          &quot;normal&quot; | &quot;italic&quot; | &quot;oblique&quot; | &quot;inherit&quot;
        }?,
        attribute font-variant { &quot;normal&quot; | &quot;small-caps&quot; | &quot;inherit&quot; }?,
        attribute font-weight {
          &quot;normal&quot;
          | &quot;bold&quot;
          | &quot;bolder&quot;
          | &quot;lighter&quot;
          | &quot;inherit&quot;
        }?,
        attribute text-anchor {
          &quot;start&quot; | &quot;middle&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?,
        attribute text-align {
          &quot;start&quot; | &quot;center&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?)),
    (attribute id { xsd:NCName }
     | attribute xml:id { xsd:NCName })?,
    attribute xml:base { xsd:anyURI | xsd:string }?,
    attribute xml:lang { xsd:language? }?,
    attribute class { xsd:NMTOKENS }?,
    attribute role { xsd:string }?,
    attribute rel { xsd:string }?,
    attribute rev { xsd:string }?,
    attribute typeof { xsd:string }?,
    attribute content { xsd:string }?,
    attribute datatype { xsd:string }?,
    attribute resource { xsd:string }?,
    attribute about { xsd:string }?,
    attribute property { xsd:string }?,
    attribute xml:space { &quot;default&quot; | &quot;preserve&quot; }?,
    (path
     | rect
     | circle
     | line
     | ellipse
     | polyline
     | polygon
     | solidColor
     | textArea
     | linearGradient
     | radialGradient
     | \text
     | g
     | defs
     | use)*
  }
use =
  element use {
    ((attribute fill-opacity { &quot;inherit&quot; | xsd:string }?,
      attribute stroke-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute fill { &quot;none&quot; | xsd:string }?,
        attribute fill-rule { &quot;inherit&quot; | &quot;nonzero&quot; | &quot;evenodd&quot; }?,
        attribute stroke { xsd:string }?,
        attribute stroke-dasharray { &quot;inherit&quot; | &quot;none&quot; | xsd:string }?,
        attribute stroke-dashoffset { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-linecap {
          &quot;butt&quot; | &quot;round&quot; | &quot;square&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-linejoin {
          &quot;miter&quot; | &quot;round&quot; | &quot;bevel&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-miterlimit { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-width { &quot;inherit&quot; | xsd:string }?,
        attribute color { xsd:string }?,
        attribute color-rendering {
          &quot;auto&quot; | &quot;optimizeSpeed&quot; | &quot;optimizeQuality&quot; | &quot;inherit&quot;
        }?)
     &amp; attribute vector-effect {
         &quot;none&quot; | &quot;non-scaling-stroke&quot; | &quot;inherit&quot;
       }?
     &amp; (attribute direction { &quot;ltr&quot; | &quot;rtl&quot; | &quot;inherit&quot; }?,
        attribute unicode-bidi {
          &quot;normal&quot; | &quot;embed&quot; | &quot;bidi-override&quot; | &quot;inherit&quot;
        }?)
     &amp; (attribute solid-color { xsd:string }?,
        attribute solid-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute display-align {
          &quot;auto&quot; | &quot;before&quot; | &quot;center&quot; | &quot;after&quot; | &quot;inherit&quot;
        }?,
        attribute line-increment { &quot;auto&quot; | &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute stop-color { xsd:string }?,
        attribute stop-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute font-family { &quot;inherit&quot; | xsd:string }?,
        attribute font-size { &quot;inherit&quot; | xsd:string }?,
        attribute font-style {
          &quot;normal&quot; | &quot;italic&quot; | &quot;oblique&quot; | &quot;inherit&quot;
        }?,
        attribute font-variant { &quot;normal&quot; | &quot;small-caps&quot; | &quot;inherit&quot; }?,
        attribute font-weight {
          &quot;normal&quot;
          | &quot;bold&quot;
          | &quot;bolder&quot;
          | &quot;lighter&quot;
          | &quot;inherit&quot;
        }?,
        attribute text-anchor {
          &quot;start&quot; | &quot;middle&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?,
        attribute text-align {
          &quot;start&quot; | &quot;center&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?)),
    (attribute id { xsd:NCName }
     | attribute xml:id { xsd:NCName })?,
    attribute xml:base { xsd:anyURI | xsd:string }?,
    attribute xml:lang { xsd:language? }?,
    attribute class { xsd:NMTOKENS }?,
    attribute role { xsd:string }?,
    attribute rel { xsd:string }?,
    attribute rev { xsd:string }?,
    attribute typeof { xsd:string }?,
    attribute content { xsd:string }?,
    attribute datatype { xsd:string }?,
    attribute resource { xsd:string }?,
    attribute about { xsd:string }?,
    attribute property { xsd:string }?,
    attribute xml:space { &quot;default&quot; | &quot;preserve&quot; }?,
    attribute requiredFonts { xsd:string }?,
    attribute systemLanguage { xsd:string }?,
    attribute transform { xsd:string | &quot;none&quot; }?,
    attribute href { xsd:string }?,
    attribute x { xsd:string }?,
    attribute y { xsd:string }?
  }
stop =
  element stop {
    ((attribute fill-opacity { &quot;inherit&quot; | xsd:string }?,
      attribute stroke-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute fill { &quot;inherit&quot; | xsd:string }?,
        attribute fill-rule { &quot;inherit&quot; | &quot;nonzero&quot; | &quot;evenodd&quot; }?,
        attribute stroke { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-dasharray { &quot;inherit&quot; | &quot;none&quot; | xsd:string }?,
        attribute stroke-dashoffset { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-linecap {
          &quot;butt&quot; | &quot;round&quot; | &quot;square&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-linejoin {
          &quot;miter&quot; | &quot;round&quot; | &quot;bevel&quot; | &quot;inherit&quot;
        }?,
        attribute stroke-miterlimit { &quot;inherit&quot; | xsd:string }?,
        attribute stroke-width { &quot;inherit&quot; | xsd:string }?,
        attribute color { xsd:string }?,
        attribute color-rendering {
          &quot;auto&quot; | &quot;optimizeSpeed&quot; | &quot;optimizeQuality&quot; | &quot;inherit&quot;
        }?)
     &amp; attribute vector-effect {
         &quot;none&quot; | &quot;non-scaling-stroke&quot; | &quot;inherit&quot;
       }?
     &amp; (attribute direction { &quot;ltr&quot; | &quot;rtl&quot; | &quot;inherit&quot; }?,
        attribute unicode-bidi {
          &quot;normal&quot; | &quot;embed&quot; | &quot;bidi-override&quot; | &quot;inherit&quot;
        }?)
     &amp; (attribute solid-color { &quot;inherit&quot; | xsd:string }?,
        attribute solid-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute display-align {
          &quot;auto&quot; | &quot;before&quot; | &quot;center&quot; | &quot;after&quot; | &quot;inherit&quot;
        }?,
        attribute line-increment { &quot;auto&quot; | &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute stop-color { &quot;inherit&quot; | xsd:string }?,
        attribute stop-opacity { &quot;inherit&quot; | xsd:string }?)
     &amp; (attribute font-family { &quot;inherit&quot; | xsd:string }?,
        attribute font-size { &quot;inherit&quot; | xsd:string }?,
        attribute font-style {
          &quot;normal&quot; | &quot;italic&quot; | &quot;oblique&quot; | &quot;inherit&quot;
        }?,
        attribute font-variant { &quot;normal&quot; | &quot;small-caps&quot; | &quot;inherit&quot; }?,
        attribute font-weight {
          &quot;normal&quot;
          | &quot;bold&quot;
          | &quot;bolder&quot;
          | &quot;lighter&quot;
          | &quot;inherit&quot;
        }?,
        attribute text-anchor {
          &quot;start&quot; | &quot;middle&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?,
        attribute text-align {
          &quot;start&quot; | &quot;center&quot; | &quot;end&quot; | &quot;inherit&quot;
        }?)),
    (attribute id { xsd:NCName }
     | attribute xml:id { xsd:NCName })?,
    attribute xml:base { xsd:anyURI | xsd:string }?,
    attribute xml:lang { xsd:language? }?,
    attribute class { xsd:NMTOKENS }?,
    attribute role { xsd:string }?,
    attribute rel { xsd:string }?,
    attribute rev { xsd:string }?,
    attribute typeof { xsd:string }?,
    attribute content { xsd:string }?,
    attribute datatype { xsd:string }?,
    attribute resource { xsd:string }?,
    attribute about { xsd:string }?,
    attribute property { xsd:string }?,
    attribute xml:space { &quot;default&quot; | &quot;preserve&quot; }?,
    attribute offset { xsd:string }?
  }

font =
  element font {
    attribute horiz-origin { xsd:string }?,
    attribute horiz-adv-x { xsd:string }?,
  (desc
  | glyph
  | font-face
  | hkern)*
  }

glyph = 
  element glyph {
    attribute unicode { xsd:string }?,
    attribute glyph-name { xsd:string }?,
    attribute arabic-form { xsd:string }?,
    attribute lang { xsd:string }?,
  (desc)*
  }


hkern = 
  element hkern {
    attribute u1 { xsd:string }?,
    attribute g1 { xsd:string }?,
    attribute u2 { xsd:string }?,
    attribute g2 { xsd:string }?,
    attribute k { xsd:string }?,
    (desc)*
    }

font-face = 
  element font-face {
    attribute font-family { xsd:string }?,
    attribute font-style { xsd:string }?,
    attribute font-weight { xsd:string }?,
    attribute font-variant { xsd:string }?,
    attribute font-stretch { xsd:string }?,
    attribute unicode-range { xsd:string }?,
    attribute panose-1 { xsd:string }?,
    attribute widths { xsd:string }?,
    attribute bbox { xsd:string }?,
    attribute units-per-em { xsd:string }?,
    attribute stemv { xsd:string }?,
    attribute stemh { xsd:string }?,
    attribute slope { xsd:string }?,
    attribute cap-height { xsd:string }?,
    attribute x-height { xsd:string }?,
    attribute accented-height { xsd:string }?,
    attribute ascent { xsd:string }?,
    attribute descent { xsd:string }?,
    attribute ideographic { xsd:string }?,
    attribute alphabetic { xsd:string }?,
    attribute mathematical { xsd:string }?,
    attribute hanging { xsd:string }?,
    attribute underline-position { xsd:string }?,
    attribute underline-thickness { xsd:string }?,
    attribute strikethrough-position { xsd:string }?,
    attribute strikethrough-thickness { xsd:string }?,
    attribute overline-position { xsd:string }?,
    attribute overline-thickness { xsd:string }?,
  (desc)*
  }
metadata = 
  element metadata { 
    text 
    }

#---  End of SVG 1.2 PS RNC schema
</sourcecode>

<section anchor="tools-available-for-use-with-rnc"><name>Tools available for use with RNC</name>
<t>By no means an exhaustive list, but these were used while validating
the RNC above.  The tools must be used against an uncompressed
version of the document.</t>

<ul>
<li><t><tt>jing</tt>: Java-based RNG tool: <eref target="https://relaxng.org/jclark/jing.html">https://relaxng.org/jclark/jing.html</eref></t>
</li>
<li><t><tt>pyjing</tt>: Python-based RNG tool: <eref target="https://pypi.org/project/jingtrang/">https://pypi.org/project/jingtrang/</eref></t>
</li>
</ul>
<t>Example:</t>
<t><tt>jing -c SVG-1.2-PS.rnc /path/to/file.svg</tt></t>
</section>
</section>

<section anchor="references-1"><name>References</name>
<t>[SVG] W3C Recommendation, Scalable Vector Graphics (SVG)
  1.1 (Second Edition), August 2011
  <eref target="https://www.w3.org/TR/2011/REC-SVG11-20110816/">https://www.w3.org/TR/2011/REC-SVG11-20110816/</eref></t>
<t>[SVGT] W3C Recommendation, Scalable Vector Graphics (SVG) Tiny
  1.2 Specification, December 2011
  <eref target="https://www.w3.org/TR/2008/REC-SVGTiny12-20081222/">https://www.w3.org/TR/2008/REC-SVGTiny12-20081222/</eref></t>
<t>[RNC] RelaxNG Compact
  <eref target="https://relaxng.org/compact-20021121.html">https://relaxng.org/compact-20021121.html</eref></t>
</section>

</middle>

<back>

</back>

</rfc>
