Appendix B: Change History
Changes with the 06-July-1999 SVG Draft Specification
- Changes to Conformance Requirements and Recommendations:
- Changes to Document Structure:
- Modified the description of the <defs> element
to discuss how all referenced elements must be direct children of a <defs> element.
- Modified the description of the <use> element
to indicate that <use> can only refer to elements within an SVG file (not
entire files).
- Added a section on the <image> element.
The <image> element is very comparable to <use> except that
it can only refer to whole file (not elements within a file).
- Changes to Rendering Model:
- Changes to Clipping, Masking and Compositing:
- For Clipping paths,
reformulated how clipping paths are specified. Now, there is
a <clippath> element whose children can include
<path> elements,
<text> elements and
other vector graphic shapes
such as <circle>.
The silhouettes of the child elements
are logically OR'd together to create a single silhouette which is then used
to restrict the region onto which paint can be applied.
Also, fixed a bug in the spec by replacing the 'inherit' value on
'clippath' with a 'none' value and fixed the spec to say that
'clippath' does not inherit the 'clippath' property from its parent.
- For Masking,
reformulated how clipping paths are specified. Now, there is
a <mask> element whose children can include any graphical object.
The <mask> element can have attributes mask-units, x, y, width and height
to indicate a sub-region of the canvas for the masking operation.
These changes obsolete the following old properties: 'mask-method',
'mask-width', 'mask-height', 'mask-bbox'.
- Changes to Filling, Stroking and Paint Servers:
- Renamed stroke-antialiasing to shape-rendering,
with possible values of default,
crisp-edges, optimize-speed and geometric-precision. The revised property
is now just a hint to the implementation. Moved to Rendering chapter.
- Revised the wording on gradient stops
to indicate that out-of-order gradient stops should be resolved by
adjusting offset values until the offset values become valid.
(Previously, the spec said that gradient stops would be sorted.)
- Changes to Paths:
- Removed the old elliptical arc commands A|a and B|b
and inserted a new elliptical arc command called A|a,
which has a different set of parameters than the
previous two formulations. The new arc command
matches the formulation of the other path data commands
in that it starts with the current point and ends
at an explicit (x,y) value.
- Changes to Other Vector Graphic Shapes:
- In the sentence, "Mathematically, these shape elements are equivalent
to the cubic bezier path objects that would
construct the same shape", removed the words "cubic bezier".
- Changes to Text:
- Replaced the old <textflow>, <textblock>, <text> and <textsrc>
with the new <text> and <tspan>, which is a subelement to <text>
and has optional attributes x=, y=, dx=, dy=, style= and href= (which allows
it to take the place of <textsrc>). The only lost functionality from this
simplification is the ability to select text across discontiguous blocks of text elements.
- Made <textpath> a container element which can contain <tspan> elements or
character data. This reformulation was necessary given the changes in the previous bullet.
- Renamed text-antialiasing to text-rendering,
with possible values of default,
optimize-legibility, optimize-speed and geometric-precision. The revised property
is now just a hint to the implementation. Moved to Rendering chapter.
- Changes to Images:
- Added new property image-rendering,
with possible values of default,
optimize-speed and optimize-quality. The new property
is just a hint to the implementation. The new property is documented in the Rendering chapter.
- Changes to Filter Effects:
- Removed vector effects, including VEAdjustGraphics and
VEPathTurbulence -- the working group decided that we hadn't
found a critical mass of vector graphics effects functionality
sufficient to warrant the additional complexity
- Modified the names of all of the filter effects processing
nodes to have the prefix "fe". The prefix is meant to
prevent name clashes (e.g., <feImage> won't clash with <image>).
- Removed the section on parameter substitution -- the WG
didn't see why filter effects deserved macro expansion over
other features.
- Changes to Animation chapter to indicate
that SVG will include declarative animation. (Syntax still under
development.)
- One line change in the SVG DOM chapter
to change getStyle() to style property, per feedback from the DOM working group.
- Minor changes to the example in the Metadata chapter
to fix incorrect references to Dublin Core elements.
- Changes to DTD
- Changes to DTD to reflect all of the changes described earlier in this section.
- Flattened some double-indirect entity referencing into only single-indirect
referencing. Fixed bug where pattern used x,y,width,height twice.
- Changed rx,ry on <rect> to be #IMPLIED so that if one of them is missing
the other one will be assigned the same value (for circular fillets).
Changes with the 25-June-1999 SVG Draft Specification
- General editorial activities:
- Coordinate Systems, Transformations and Units modifications:
- Paths modifications:
- The J|j commands (elliptical quadrant) have been dropped from the list of
path data commands because the working group
felt the J|j commands would not receive wide usage.
- The path data commands
for switching between absolute and relative coordinates in the middle of
a command (the former A and r commands) have been dropped
because of their high complexity relative to their limited space-saving value.
- The various arc commands in path data
have been consolidated, renamed, and then expanded.
The new commands are: A|a (an arc whose sweep is described by a start angle and end angle) and
B|b (an arc whose sweep is described by two vectors whose intersections with the
ellipse define the start point and end points of the arc).
- Reformulated the T/t path data commands
to be consistent with the rest of the path data commands
(i.e., vertices provided, control points automatically calculated as in S/s).
- Broke up the path data commands into separate tables to improve understandability.
- Modified the write-up on markers so that the <marker> element no longer is
a subelement to <path>.
<marker> is now defined to be just like <symbol>, but with marker-specific attributes
marker-units, marker-width, marker-height and orient.
To use a marker on a given <path> or vector graphic shape, we have new properties
'marker-start', 'marker-end', 'marker-mid' and 'marker'.
See Markers.
- Indicated that each d= attribute in a <path> element
is restricted to 1023 characters. See Path Data.
- Added an Implementation Notes
section to the document that describes various details about expected processing
and rendering behavior when drawing paths.
- Added The grammar for path data, a BNF for path data.
- Filling, Stroking and Paint Servers modifications:
- Included a note under 'fill' property
that indicates that open paths and polylines still can be filled.
- Provided a more detailed write-up on patterns to make
the <pattern> element consistent in various ways with <symbol>, <marker>,
<lineargradient> and <radialgradient>.
- Modified gradients in various ways.
Replaced attribute target-type with gradient-units.
Replaced <lineargradient> attributes vector-start-x, vector-start-y, vector-length, vector-angle with x1, y1, x2, y2.
Replaced <radialgradient> attributes outermost-origin-x, outermost-origin-y, outermost-radius, innermost-x, innermost-y
with cx, cy, r, fx, fy.
Removed attributes target-left, target-top, target-right, target-bottom, which were deemed superfluous.
Renamed attribute matrix to gradient-transform.
Added gradient-transform back to linear gradients (they were in an earlier draft).
Renamed <gradientstop> to <stop> to save space since the working group decided it didn't want
to offer non-linear gradient ramps.
Removed attribute color from <stop> and included new paragraphs indicating
that color and opacity are set via the 'color' and 'opacity' properties.
- Added a value of none to property
'stroke-dasharray'.
- Text modifications:
- Broke the <textflow> element into
two elements <textblock> and <textflow> to greatly simplify
the feature, to remove the need to maintain consistent doubly linked lists,
and to remove the possibility of cyclic references.
Removed <tf> and renamed <t> to <tref>
- Renamed the <src> subelement to <text> to <textsrc>
for more consistency in nomenclature and to avoid use of such a generic
element name for such a specific purpose.
- General/Miscellaneous:
- Added a syntax and various processing details for Filter Effects
- Altered the description of the
<symbol> element
to reflect the changes in transform-related attributes and properties.
- In the chapter on Other Vector Graphic Shapes,
changed the attributes on <ellipse> from major/minor to rx/ry for consistency with other parts of the spec,
removed the angle attribute on ellipse,
reformulated polygon to be exactly line polyline except that it automatically closes,
changed "verts" to "points",
and added rounding radii rx and ry to rectangle.
Also, included a note about the 1023 character limit on the "points" attribute
for <polyline> and <polygon>.
- Removed property 'z-index'. The working group decided that a z-index effect can be achieved
either by having CSS manage multiple SVG drawings or by rearranging
graphical elements via the DOM. A z-index option would complicate
implementation and streaming for little gain.
- Add a chapter on Metadata,
with an initial description of how metadata would work with SVG.
- Removed the <private> element after concluding it is unnecessary given XML namespaces
and the new W3C approach to validating namespaces. As a consequence, modified the write-up
under Private Data.
- Updated the descriptions under Embedding Foreign Object Types
to reflect increased certainty about the direction SVG is headed in this area.
- Added a General Implementation Notes
section to the chapter on Conformance Requirements and Recommendations
which discusses implementation issues that apply across the entire SVG language.
In particular, added sections Forward and Undefined References
(which explains implementation rules involving references that aren't valid at initial processing time) and
Referenced objects are "pinned" to their own coordinate systems.
- Changed all occurrences of "SVG processor" to "SVG user agent".
- Fixed all incorrect references to <description> and replaced them with <desc>.
- Summary of changes to the DTD:
- Gave the <a> element have the same content model as the <g> element.
- Add transform attribute to most graphic objects.
- Added attributes fit-box-to-viewport and preserve-aspect-ratio to <svg> and <symbol> elements
- Added attributes x and y to the <svg> element.
- For symbol_descriptor_attributes, renamed attributes x-min, y-min, x-max, y-max to x, y, width, height, respectively.
- Modified the <marker> element to reflect the revised formulation for markers.
- Added a <pattern> element which reflects the modified write-up on patterns. (The <pattern> element was
missing from the previous DTD.).
- Modified the definitions of <lineargradient> and <radialgradient> to reflect the modified write-up on gradients.
- Renamed <gradientstop> to <stop>.
- Removed attribute color from <stop>.
- Changed the attributes on <ellipse> from major/minor to rx/ry for consistency with other parts of the spec,
removed the angle attribute on ellipse,
reformulated polygon to be exactly line polyline except that it automatically closes,
changed "verts" to "points",
and added rounding radii rx and ry to rectangle.
- Removed the <private> element after concluding it is unnecessary given XML namespaces
and the new W3C approach to validating namespaces.
- Added xml:space to every element that might have character data content somewhere inside of it.
This will allow content developers to control whether white space is preserved
on <text> elements.
- Text-related: renamed <src> to <textsrc> for more consistency in nomenclature
and to avoid use of such a generic element name for such a specific purpose.
Because of modifications in the area of defining textflows,
added <textblock>, renamed <t> to <tref> and changed <textflow> so that
if can only contain <tref> subelements.
- Added a syntax for Filter Effects
- Modified <foreignobject> such that it can only be the child of a <switch> element.
- Added an href attribute to the <script> element. (Oversight that it wasn't there before.)
- General clean-up in the area of anything using attributes x, y, width or height. Defined standard
entities xy_attributes, bbox_attributes_optional and bbox_attributes_wh_required.
In particular, the following elements now require width and height attributes:
<image>, <rect>, <foreignobject>, <pattern>.
Changes with the 12-April-1999 SVG Draft Specification
- Included a DTD in Appendix C.
- There is now an <svg> element which is the root for all stand-alone SVG documents
and for any SVG fragments that are embedded inline within a parent XML grammar.
(See SVG Document Structure>.)
- Added initial descriptions of how text-on-a-path and SVG-along-a-path
might work.
(See Text on a Path.)
- Added <symbol> and
<marker> elements to provide
packaging for the following:
- Necessary additional attributes on template objects
- A clean way of defining standard drawing symbol libraries
- The definition of a graphic to use as a custom glyph within a <text>
element (e.g., generalize "text-on-a-path" to "SVG-on-a-path")
- Necessary additional attributes for pattern definitions (for pattern fill)
- Definition of a sprite for an animation
- Marker symbols
- Arrowheads
Also added a new optional <data> subelement to the <path>
element to provide the necessary hook to provide for custom arrowheads.
- Many changes to Coordinate Systems, Transformations and Units
to make the section more complete and more readable. The specific changes
to this chapter include:
- Relatively minor changes in terminology to better match the terminology
used in the CSS2 specification. For example, the definitions of the terms canvas
and viewport were modified to be as close as possible to the corresponding
definitions in the CSS2 specification.
- The initial coordinate system is now based on the parent document's
notion of pixels rather than points.
- When embedded inline within a parent XML grammar, the outermost <svg> element
in an SVG document acts like a block-level formatting
object in the CSS layout model and thus supports CSS positioning properties such as
'left' and 'width' and the CSS properties
'clip' and 'overflow'.
- Nested <svg> elements are the mechanism for recursively including
nested SVG drawings, but also provide the one and only means of establishing
a new viewport and thus changing the meaning of the various CSS unit
specifiers such as px, pt, cm and % (percentages). Nested <svg> elements
support the same CSS positioning properties as an outermost <svg> element,
- Removed <pieslice>, which was considered to be of lesser
general utility than the other predefined vector graphic shapes, and
added <line>, which allows a one-segment line to be drawn.
See Other Vector Graphic Shapes.
- Replaced the <althtml> element with a description for
how to use the <switch> (or equivalent) elements in
XML grammars or the <object> element in HTML 4.0
as the recommended way to provide for alternate
representations in the event the user agent cannot process an SVG drawing.
(See Backwards Compatibility.)
- Removed the comment in the discussion under <description> and
<title> which said that the given text string could be specified
as an attribute. The text string now can only be supplied as character data.
(See The <description> and <title> elements.
- Changed the wording about text strings to say that the current point
is advanced by the metrics of the glyph(s) used rather than the character used.
(See text positioning.)
- Added some details to the description of the <textflow> element to indicate that
<text> elements can be directly embedded within <textflow>
and that the current text position is remembered within a <textflow>
from one <text> element to the next <text> element.
(See Text Flows.)
- Added a new property
'text-antialiasing'
to provide a hint to the user agent about whether or not text should
be antialiased. The lack of such a property was an inadvertant
omission from previous versions of the spec and was called for in the
SVG Requirements document.
- Removed the 'matrix' property from linear gradients because it
was unnecessary (overspecification) and the
'spread-method' property from radial gradients because
it was difficult to specify and implement, it didn't match
current common usage and is of little apparent utility.
(See Gradients.)
- Included a new section 2.1 with a brief discussion about the "image/svg"
MIME type. Subsequent sections in chapter 2 have been renumbered
accordingly.
(See SVG MIME Type.)
- Added another bullet to the Accessibility section to indicate
that SVG's zooming feature aids those with partial visual impairment.
(See Accessibility.)
- Elaborated to a small level on how
Embedded Foreign Object Types might work to reflect
progess within the working group on the issue.
- Changed altglyph from a subelement to <text> to a CSS property
in response to discussion on the W3C Character Model.
See Alternate Glyphs.
- In the discussion about the <use> element,
made clear that template objects could come from either the same document
or an external document.
- Minor changes to description under
Event Handling to indicate
that any element can have an onload or onunload event handler to provide
additional control via scripting as parts of the drawing download progressively.
Changes with the 05Feb1999 SVG Draft Specification
This was the first public working draft.