19 July, 2001

# Change History

## Changes to the SVG 1.0 specification since the 02 November, 2000 specification

- Global and miscellaneous changes
  - The publicID and systemID have been updated to remove date fields that had been present during earlier drafts.
  - Changed most of the examples in the specification to use presentation attributes rather than the 'style' attribute since support for presentation attributes are required in all implementations, whereas support for the 'style' attribute is only required when CSS is supported.
  - Added an Element Index, an Attribute Index and an Index.
  - In preparation for the Proposed Recommendation, moved this change history out of the main document.
  - Various miscellaneous minor editorial fixes.
- Changes to Introduction
  - Added a definition for the term "user agent," including a definition of the more specific case of an "SVG user agent."
  - Added a new section which explicit defines the SVG namespace, public identifier and system identifier. Previously, this was only documented in the DTD.
  - Added an explicit statement that ".svgz" is the recommended extension for gzip compressed SVG and that "svgz" is the recommended Mac filetype for gzip compressed SVG.
- Changes to Concepts
  - Added a section to clearly spell out the various ways that SVG might be used in a Web page. Added explicit section numbers as part of the process.
- Changes to Basic Data Types and Interfaces
  - DOM: added 'xmlbase' to SVGElement interface, which is a fallout of XML-Base getting bundled with XLink, forcing SVG 1.0 to supoport XML-Base.
  - DOM: Add new constant SVG_COLORTYPE_CURRENTCOLOR and new method setColor() to interface SVGColor in response to an error report from an implementer.
  - DOM: Added clarification to method convertToSpecifiedUnits() to remove ambiguity reported by an implementer.
  - DOM: Fixed errors where some descriptions of readonly animVal listed DOMExceptions on setting.
- Changes to Rendering Model
  - Specifically state that temporary canvases are all initialized to transparent black.
- Changes to Document Structure
  - Add a paragraph to 'image' element that describes processing of 3-channel and 1-channel raster images.
  - Included clarifications on the exact coordinate system processing rules for the 'image' element in response to implementation feedback.
  - Added a clarification to the section on referencing that invalid references represent "an error" when referencing a local resource or when referencing an external resource and externalResourcesRequired="true".
  - DOM: Removed method createSVGString() after implementation feedback about this method being unnecessary and how it is problematic with the Java bindings of the DOM.
  - Fixed editorial error where the 'zoom' value for attribute 'zoomAndPan' still appeared in the DTD even though it had been removed from the language previously.
  - Updated descriptions of XLink attributes to match descriptions from the XLink Proposed Recommendation.
  - DOM: Removed all entries from interface SVGURIReference except href to reflect decision on 11/14/00 that the XLink working group should define the DOM for XLink attributes, not the SVG working group.
  - DOM: Fix error in SVGElementInstanceList where the 'length' attribute was an object, not an unsigned long.
  - Removed feature string "org.w3c.svg.lang as this wasn't parallel with other feature strings and seemed to say that any XML parser would support this and thus thereby also support "org.w3c.svg".
  - Removed "and DOM interfaces" from definition of feature string "org.w3c.svg.dynamic the DOM interfaces are covered by "org.w3c.dom.svg.*".
- Changes to Styling
  - Added a new section 6.8 Case sensitivity of property names that explicitly mention that presentation attributes are case-sensitive and recommends that authors use lowercase property names in all cases.
  - Fixed error in definition of entities PresentationAttributes-TextContentElements and PresentationAttributes-TextElements. Presentation attributes 'dominant-baseline' and 'text-anchor' were incorrectly defined in entity PresentationAttributes-TextElements and instead are now moved into PresentationAttributes-TextContentElements.
  - Changed the default value for attribute 'media' on the 'style' element from 'screen' to 'all' - 'screen' is an obviously incorrect default.
- Changes to Coordinate Systems, Transformations and Units
  - Added a clarification to say that values expressed in object bounding box units can be outside the range of [0-1] and [0%-100%].
  - Fixed error in one formula which forgot to divide by sqrt(2) in root-mean-square formula. Fixed one line in Units.svg which also forgot to divide by sqrt(2).
  - DOM: Fixed errors where some descriptions of readonly animVal listed DOMExceptions on setting.
- Changes to Basic Shapes
  - Added a sentence to the definition of the 'line' element clarifying that 'line' elements are never filled.
- Changes to Paths
  - Cleaned up language for "closepath" to make sure behavior regarding linecap/linejoin and current point is unambiguous and to make clear that any combination of a "closepath", "closepath/moveto" or "moveto" start a new subpath.
- Changes to Text
  - After implementation feedback about difficulties with the old definitions of the 'x', 'y', 'dx', 'dy' and 'rotate' attributes on 'text', 'tspan', 'tref' and 'altGlyph' elements (particularly with regard to embedded 'a' elements), the definitions have been modified to make implementation and usage simpler and more straightforward to implement. First, attributes 'dx', 'dy' and 'rotate' have been added to the 'text' element, and the 'x' and 'y' attributes on the 'text' element now can take a list. Thus, the 'text' element now parallels 'tspan', 'tref' and 'altGlyph'. Second, attributes 'x', 'y', 'dx', 'dy' and 'rotate' have been redefined to cover all embedded character data within any descendant text node, not just the character data within child text nodes.
  - DOM: Modified the DOM to take into account the above change in the language definition. Now, SVGTextElement has SVGTextPositioningElement as a base class, making it unnecessary to have additional definitions for 'x' and 'y' within SVGTextElement.
  - Incorporate the most recent write-ups of international text properties from the most recent XSL specification to maintain consistency with the wording in XSL. Changed sections include the list of baseline identifiers in section 10.9.2 and the write-ups of properties 'dominant-baseline', 'alignment-baseline', 'baseline-shift', 'writing-mode', 'glyph-orientation-horizontal' and 'glyph-orientation-vertical'.
  - Added definition for block-progression-direction because this term was used in one of the property definitions.
  - Editorial change to define the 'startOffset' attribute for 'textPath' to have type <length> (%Length; in the DTD) instead of <length>|<percentage>, which was redundant (formerly CDATA in the DTD).
  - Clarification on 'textLength' attribute to make clear that the alignment algorithm needs to position the last glyph (in visual rendering order) such that the visual position of its end edge aligns with the position identified with 'textLength'.
  - Improved hyperlink references from SVG spec to CSS2 spec.
  - Added a comment that recommends that strike-throughs are drawn after/on-top-of text, whereas other decorations are drawn before/under.
  - Adjusted description of 'dominant-baseline' property to stay synchronized with corresponding adjustments to the XSL-FO specification. Added computed baselines and revised wording so that the descriptions are more precise.
- Changes to Painting: Filling, Stroking and Marker Symbols
  - Updated all examples of 'stroke-dasharray' to show a comma-separated list, as this is how the property is defined.
  - Per implementation feedback, made the description of how to fill open subpaths more precise.
  - Explicitly state that properties inherit into 'marker' from its ancestors, not from its referencing object.
  - In response to implementation feedback, fix various minor errors and add clarifications in the descriptions of markers.
  - Provide an explicit list of elements to which 'visibility' and 'display' apply.
  - DOM: In response to implementation feedback, added a new enumeration constant SVG_PAINTTYPE_URI, which is a common case in SVG files but which was missing from the SVG DOM.
  - Per implementation feedback, add a note clarifying that most ICC color values will be in the range 0-to-1.
  - Added the following clarifications on 'color-interpolation' per implementation feedback: When a child element is blended into a background, the value of the 'color-interpolation' property on the child determines the type of blending, not the value of the 'color-interpolation' on the parent. For gradients which make use of the xlink:href attribute to reference another gradient, the gradient uses the 'color-interpolation' property value from the gradient element which is directly referenced by the 'fill' or 'stroke' property. When animating colors, color interpolation is performed according to the value of the 'color-interpolation' property on the element being animated.
  - Added property 'color-interpolation-filters' which determines whether a given filter primitive is performed in sRGB or linearRGB.
  - Changed the 'visibility' property to be inheritable with an initial value of 'visible', after coordination with the CSS working group determined that this was a functionally equivalent but more consistent way to express the property definition.
- Changes to Color
  - After coordination meetings with the CSS and XSL working groups, added a <uri> option to the 'color-profile' property.
- Changes to Gradients and Patterns
  - Editorial fix to define the 'offset' attribute on gradient stops to be of type <number> or <percentage> instead of <length> since units such as 'cm' are not allowed.
  - Added explicit patternUnits="userSpaceOnUse" to example pattern01.svg to accommodate the change in default value for patternUnits form userSpaceOnUse to objectBoundingBox.
  - Removed ambiguity about what happens when two gradient stops have the same offset value.
  - Explicitly state that properties inherit into 'linearGradient', 'radialGradient and 'pattern' from its ancestors, not from its referencing object.
  - DOM: Fix omission and make SVGGradientElement extend interface SVGStylable.
  - Fixed specification error reported by implementers where 'width' and 'height' on the 'pattern' element were #REQUIRED. This conflicted with the xlink:href inheritance feature. Now, 'width' and 'height' are #IMPLIED and default to zero if not specified or inherited.
  - Made the description of gradientUnits, gradientTransform, patternUnits and patternTransform more precise concerning how coordinate systems and transformations apply to the various x/y/width/height/cx/cy/r attributes and the contents of a pattern.
  - DOM: Fixed an error in the SVG DOM by adding attribute patternContentUnits to SVGPatternElement.
- Changes to Clipping, Masking and Compositing
  - Remove 'transform' attribute from 'mask' element because of implementation feedback over the ambiguity whether the attribute applies to x/y/width/height attributes or not and the interaction with maskUnits="objectBoundingBox". Instead, if a mask requires a transformation, a 'g' element should be included inside the 'mask' element.
  - In response to an error pointed out by implementers, the 'overflow' property now says that clipping occurs when it has the value 'scroll' in addition to the value 'hidden'.
  - DOM: Corresponding to the above change, SVGMaskElement no longer inherits from SVGTransformable.
  - Added a clarification that clipping paths just use the raw geometry of the referenced elements, ignoring rendering properties such as 'fill', 'stroke' and 'stroke-width'.
  - Change the description of a clipping path to use the same wording as had been found in the rendering chapter's description of clipping paths.
  - Explicitly state that the offscreen for a mask is initialized to transparent black.
  - Clean up example for masking which was not yet upgraded to reflect new default values for gradientUnits, maskUnits, etc.
  - Explicitly state that properties inherit into 'clipPath' and 'mask' from its ancestors, not from its referencing object.
  - DOM: Fixed an error in the SVG DOM by adding attribute maskContentUnits to SVGMaskElement.
- Changes to Filter Effects
  - After noticing different behaviors across implementations at the edges for feDiffuseLighting, added explicit formulas for how to handle edge pixels when applying the Sobel gradient.
  - Revised version of pseudo code for feTurbulence to prevent divide-by-zero possibility.
  - Removed "+1" in feMorphology formulas after implementers pointed out that the radius is expressed in an abstract coordinate system and hence the "+1" (which make sense only a pixel coordinate system) is an error.
  - Removed the ability to specify percentages on feColorMatrix. Only fractions are allowed now.
  - Explicitly mention that a negative base frequency value for feTurbulence is an error.
  - Wherever the term "fully transparent" was used in the previous draft, the spec now says "transparent black" to ensure unambiguity.
  - Explicitly state that undefined pixels (e.g., the empty pixels resulting from feOffset) become transparent black.
  - Removed 'transform' attribute from feImage due to conflicts reported when implementing it regarding its relationship to the x/y/width/height sub-region attributes. The intended effect of the 'transform' attribute produced difficult implementation issues and the attribute was deemed unessential.
  - Changed the DTD fragment definitions for attributes 'filterRes', 'stdDeviation', 'radius', 'baseFrequency', 'order' and 'kernelUnitLength' from either %Length; or CDATA to %NumberOptionalNumber;.
  - Added notes to implementers about how high-quality viewers will want to resample using advanced methods.
  - Added attribute 'kernelUnitLength' to feDiffuseLighting and feSpecularLighting after implementation feedback that the results were not scalable and produced undesirable results when zooming.
  - Added a note that color operations for a given filter primitive are done if the color space specified by property 'color-interpolation-filters'.
  - Changed 'dx' and 'dy' attributes on feOffset to be numbers rather than lengths due to coordinate system issues associated with the possibility of using CSS units./li>
  - Added a clarification to feDisplacementMap stating that calculations using the pixel values from 'in2' will convert to nonpremultiplied colors beforehand.
  - Added clarifications to feDisplacementMap that only the in2 source image is affected by 'color-interpolation-filters' and that the values generated by feTurbulence are in the color space specified by 'color-interpolation-filters'.
  - Clarified the description of feGaussianBlur for the case were d is even, pointing out that two of the box blurs are centered on the pixel boundaries to the left and right of the output pixel.
- Changes to Interactivity
  - Generalized wording on event SVGScroll to encompass any event which causes the view to shift, not just "scrolling" and "panning".
  - Editorial cleanup on section on fragment identifiers.
- Changes to Linking
  - Updated descriptions of XLink attributes to match descriptions from the XLink Proposed Recommendation.
  - DOM: Fixed error reported by implementer that DOM attribute 'viewTarget' on SVGViewElement needs to take a list just like the corresponding attribute does on the 'view' element.
- Changes to Animation
  - Removed 'media-marker-value' and 'prev' keywords from the 'begin' and 'end' attributes to maintain consistency with latest draft of SMIL Animation.
  - Removed bullet that said 'svg' elements could be a target of 'animateMotion' because only elements with a 'transform' attributes are subject to 'animateMotion' and 'svg' elements do not have a 'transform' attribute.
  - Per W3C decision, any namespace prefixes within attribute 'attributeName' are resolved in the scope of the current animation element, not the target element.
  - Fixed illustrative examples to correct errors in section on 'animateTransform'.
  - DOM: Fixed an oversight which was reported by an implementer that the SVG DOM was missing interface definition SVGMPathElement.
  - Added optional ClockValue to accessKey to match corresponding fix to SMIL Animation.
  - Inserted optional spaces from various components for 'begin' and 'end' attributes to maintain consistency with latest draft of SMIL2.
- Changes to Fonts
  - Fixed error in definition of vert-adv-y where two different default values were provided. Now, units-per-em is the only documented default value.
- Changes to Metadata
  - Removed reference to "Metadata and SVG" note as this doesn't look like it is going to happen.
  - Fixed xmlns definitions for RDF to point to URIs defined in RDF specifications.
- Changes to Extensibility
  - Various cleanups of example which shows XHTML within a 'foreignObject'.
- Changes to SVG DTD
  - Added 'xml:base' to entity 'stdattrs', which is a fallout of XML-Base getting bundled with XLink, forcing SVG 1.0 to support XML-Base, which the SVG working group was hoping to postpone past SVG 1.0.
  - Changed the #FIXED value for the 'xlink:show' attribute from 'embed' to 'other' for all elements except for the following elements: 'a' (new|replace), 'image' (embed), 'use' (embed) and 'feImage' (embed). This occurred after discussions with the SYMM and XLink user groups. The SYMM working group said they would follow our lead in their use of 'xlink:show' in SMIL Animation and SMIL2.
  - Changed DTD for xlink:type to be `(simple) #FIXED 'simple'` to match recommendations from latest XLink spec.
  - Changed DTD for xlink:actuate to be `(onLoad) #FIXED 'onLoad'` or `(onRequest) #FIXED 'onRequest'`
  - Cleanups to presentation attribute entities to define separate entities for filter properties and color properties to fix minor bugs discovered by implementers.
- Changes to SVG DOM
  - Removed reference to DOM2 definition of CSS2Cursor as this was dropped from DOM2.
- Changes to Implementation Requirements
  - Minor change to error processing rules due to implementation feedback: polylines and polygons are now rendered up to point of error, just like paths.
- Changes to Conformance Criteria
  - Clarified the "data:" protocol applies to all situations where entire documents might be referenced and does not apply to fragments of SVG that do not constitute entire documents.
- Changes to Accessibility Support
  - Added hyperlink to http://www.w3.org/TR/SVG-access/ for [SVG-ACCESS].
- Changes to References
  - Added normative references to RFC2279 and RFC2732 because text incorporated from XLink refers to these standards.
  - Updated normative reference from RFC1766 to RFC3066.
  - Added normative reference from RFC1952 (gzip) since this is referenced in section 1.2.
  - Added normative reference from RFC3023 (XML Media Types) since this is referenced in section 1.2.
  - Added informative reference [SVG-ACCESS] to http://www.w3.org/TR/SVG-access/.
- Changes to Property Index
  - Cleaned up the "Applies to" column for a more precise definition of the property. Previously, looser language was present, in the worst cases saying a property applies to "All elements". Now, the following properties have been modified to specify more precisely what they apply to:
    - 'clip-path', 'mask', 'opacity': container elements and graphics elements
    - 'color-interpolation', 'color-rendering': container elements, graphics elements and 'animateColor'
    - 'color': elements to which properties 'fill', 'stroke', 'stop-color', 'flood-color', 'lighting-color' apply
    - 'fill', 'fill-opacity', 'fill-rule', 'stroke', 'stroke-width', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-opacity': shapes and text content elements
    - 'dominant-baseline', 'font', 'font-family', 'font-style', 'font-weight', 'font-variant', 'font-stretch', 'font-size', 'font-size-adjust', 'glyph-orientation-horizontal', glyph-orientation-vertical', 'kerning', 'letter-spacing', 'text-anchor', 'text-decoration', 'unicode-bidi', 'word-spacing': text content elements
    - 'pointer-events': graphics elements
    - 'shape-rendering': shapes
  - Cleaned up "Inherited" column to remove references to "see Inheritance of properties" reference. For properties from CSS2, the inherited value now says "no" or "yes" to match the CSS2 spec. Defined 'marker', 'marker-start', 'marker-mid' and 'marker-end' to have "yes" in the corresponding column entry.