previous contents properties index

# Appendix M: Change History

## Changes since the last public draft specification (02August2000)

- Global and miscellaneous changes
  - Separated out the Expanded Table of Contents similar to how it was done with the DOM2 Proposed Recommendation.
  - Added copyright page similar to how it was done with the DOM2 Proposed Recommendation.
  - Various minor editorial changes to fix typographical errors.
  - DOM: Various cleanups relating to readonly attribute handling in the DOM. Previously, some DOM attributes which referenced non-primitive types were classified as read/write, which was a mistake. Only primitive types can be read/write. As a result, various DOM attribute were changed to readonly. Some attributes were defined to raise an exception on setting if the referenced object cannot have its content changed.
- Changes to Introduction
  - The SVG MIME type has been changed from "image/svg-xml" to "image/svg+xml" to conform to a change in direction for MIME types across XML grammars that occurred recently in the IETF.
- Changes to Basic Data Types and Interfaces
  - DOM: Removed SVGList interface due to feedback from implementers that having a template base class approach using a "Object" class is problematic. Instead, replaced SVGList with a series of SVGxxxList interfaces (SVGStringList, SVGPathSegList, SVGPointList, SVGLengthList, SVGNumberList and SVGTransformList), all of which share the exact same set of attributes and methods. A note has been added to each of these interfaces indicating that an implementer could choose to implement these interfaces using a common base class. Updated the definitions of SVGLengthList, SVGNumberList and SVGTransformList to no longer inherit from SVGList, but instead define all of the attributes and methods that used to be on SVGList on the given interface directly. Added new interfaces SVGStringList, SVGPathSegList and SVGPointList. Also, removed createItem() method from all of the list elements and instead made sure that create methods exist for all object types used as items in SVGXXXList interfaces, usually on the SVGSVGElement. Added a clarification to the SVGXXXList interfaces that, for methods insertItemBefore(), replaceItem() and appendItem(), if parameter newItem is already in a list, then it is removed from the old list before being inserted into the specified list.
  - Clean-up of descriptions in basic types section of correspondences between basic types and DOM interfaces. Reordered items in basic types and basic DOM interface sections to correlate better.
  - DOM: Removed methods createRGBColor and createSVGICCColor from interface SVGColor. Changed parameters to setRGBColor() and setRGBColorICCColor() to DOMStrings. These changes were done after implementation feedback that pointed out that an RGBColor object can exist only when attached to a CSSStyleDeclaration.
  - DOM: Removed method getAnimatedPresentationAttribute(), since presentation attributes are not animatable as attributes but only as the properties to which they correspond.
  - DOM: Defined base interface SVGLocatable which has all of the attributes and methods for SVGTransformable except for 'transform', and changed SVGTransformable to inherit from SVGLocatable and only add 'transform'. Thus, SVGTransformable is identical to what it was before, but there is a new interface SVGLocatable. This new interface was created so that SVGSVGElement could inherit from SVGLocatable, thereby allowing scripters to call useful methods such as 'getBBox()' from an SVGSVGElement.
- Changes to Document Structure
  - Changed the 'width' and 'height' attributes on the 'svg' element to #IMPLIED versus #REQUIRED, meaning that these attributes no longer have to be supplied. If not provided, a default value of 100% will be used. This change should have no effect on existing content. It just provides a suitable default as a convenience to content creators.
  - Changed 'externalResourcesRequired' to be non-inheritable (from an attribute inheritance perspective) and non-animatable. Implementers pointed out that specifying the attribute on a container causes the scope of the attribute to effect the children; thus, it did not need to be cast an an inheritable attribute. The fact that previous versions shows this attribute as being animatable was considered an error, as attributes having to do with basic structuring are not supposed to be subject to animation.
  - Moved the description 'externalResourcesRequired' into its own section. It used to be bundled in the "Common attributes" section, but it has structural implications, so a new section was created just after "Conditional processing."
  - Fix typo under 'requiredExtensions' section (5.8.4) where the described referred to 'requiredFeatures' rather than 'requiredExtensions'.
  - Fixed editorial errors in descriptions of some methods in SVGSVGElement where it used to say there was no return value when in fact there was.
  - DOM: Removed methods createRGBColor and createSVGICCColor from interface SVGSVGElement. These changes were done after implementation feedback that pointed out that an RGBColor object can exist only when attached to a CSSStyleDeclaration.
  - Added %descExt and %titleExt to DTD definitions for 'desc' and 'title' elements for consistency with the rest of the DTD. There should be no backwards compatibility impact on such a change.
  - DOM: Changed SVGSVGElement to inherit from SVGLocatable so that scripter can call useful methods such as 'getBBox()' from an SVGSVGElement.
- Changes to Styling
  - Additional clarification about how presentation attributes fit into the CSS cascade. The new language says that the presentation attributes are conceptually inserted into a new author style sheet which is the first in the author style sheet collection, and states explicitly that !important declarations are not allowed with presentation attributes.
  - Modifications to user agent style sheet in the area of which elements have 'overflow:hidden' by default to make consistent with other areas in the language. Now, 'svg', 'symbol', 'image', 'marker', 'pattern', and 'foreignObject' have 'overflow:hidden'
  - Clarified that animation of presentation attributes is equivalent to animating the corresponding property.
- Changes to Coordinate Systems, Transformations and Units
  - Based on feedback from implementers that the absolute and percentage CSS units specifiers were very difficult to implement and would cause major impact on performance, and with the observation that the processing rules for CSS units produced considerable confusion in the user community and often did not produce the results users expected, the CSS unit processing rules have been revamped to enable simpler implementation, faster processing and more predictable behavior. With the new CSS unit processing rules, an implementation no longer will have to bubble up to the nearest viewport element and perform major computation to determine how large "1px" is. The intent behind the old rules was to allow for certain parts of the graphic (e.g., stroke widths or font sizes) to be invariant across zoom levels, but the previous CSS unit processing rules did an incomplete job of addressing these needs. The feeling is that the ability to achieve invariance requires a more thorough feature set which will be considered in a future version of the language. For now, developers will have to use scripting to achieve invariance across zoom levels.
  - Added clarification that "translate(<tx>)" is equivalent to "translate(<tx>,0)".
  - Correctly a poorly worded paragraph that talked about the meaning of percentage values using in conjunction with a user coordinate system established using object bounding box space.
  - DOM: As part of removing SVGList (see note on Basic Data Types and Interfaces, above), replaced all references to SVGList with references to an appropriate SVGxxxList interface.
- Changes to Basic Shapes
  - Fixed editorial errors where an incorrect parenthetical comment had been included in previous drafts in the descriptions of 'polyline' and 'polygon' which implied that CSS units might be allowable on the coordinate values. These parenthetical remarks have been removed. The previous BNF was correct in showing that only user coordinates are allowed.
  - DOM: As part of removing SVGList (see note on Basic Data Types and Interfaces, above), replaced all references to SVGList with references to an appropriate SVGxxxList interface.
- Changes to Paths
  - DOM: As part of removing SVGList (see note on Basic Data Types and Interfaces, above), replaced all references to SVGList with references to an appropriate SVGxxxList interface.
- Changes to Text
  - Based on feedback from implementers and content creators over interoperability issues, added property 'kerning' which allows for author control over enabling or disabling the auto-kerning tables found in many fonts.
  - Based on feedback from reviewers and implementers, modified the definitions of elements 'altGlyphItem' and 'glyphRef'. Now, if an 'altGlyphDef' consists of a simple list of 'glyphRef' elements, then all referenced glyphs must be available and all will get rendered. If an 'altGlyphDef' consists of a list of 'altGlyphItem' elements, then the first 'altGlyphItem' is chosen whose children 'glyphRef' elements are all available, and all of the referenced glyphs from the first 'altGlyphItem' whose glyphs are all available will get rendered.
  - Added styling attributes to the 'altGlyph' element as it was noticed that it was not possible to color the rendered contents of an 'altGlyph'.
  - Added 'x', 'y', 'dx', 'dy' and 'rotate' attributes to the 'altGlyph' element to allow for per-glyph positioning control.
  - Removed 'glyphRun' element after feedback from I18N interest group. Most of the facilities available from 'glyphRun' are achievable using the 'altGlyph' element now that 'altGlyph' has x/y/dx/dy/rotate.
  - Added event attributes to the 'altGlyph' element to make it consistent with other text elements and to make the language definition match the DOM definition.
  - DOM: Added 'x', 'y', 'dx', 'dy', 'rotate' attributes to SVGAltGlyphElement by making it inherit from SVGTextPositioningElement instead of SVGTextContentElement.
  - Added 'x', 'y', 'dx' and 'dy' attributes to the 'glyphRef' element to allow for individual glyphs to be positioned within the font cell for the case where multiple component glyphs are used to render a given sequence of characters.
  - DOM: Added 'x', 'y', 'dx' and 'dy' to the SVGGlyphRefElement.
  - Added a clarification on how the 'transform' attribute works on 'path' elements referenced by a 'textPath' element.
  - DOM: As part of removing SVGList (see note on Basic Data Types and Interfaces, above), replaced all references to SVGList with references to an appropriate SVGxxxList interface.
  - Added a clarification for 'lengthAdjust' attribute to say that intermediate character positions are not predictable because user agents might employ different algorithms for stretching/compressing to still achieve optimal typography.
  - Fixed error in DTD definition of 'glyphRef' element where xlink:href was #REQUIRED. It has been changed to #IMPLIED. Added clarification that you either use xlink:href or font selection properties plus format plus glyphID. If neither is provided, then the given 'glyphRef' element is not processed. Also, xlink:href, if present, has precedence over the other properties and attributes.
  - Added a clarification about ligature formation, stating explicitly that ligature formation should be disabled across different text nodes, different text chunks, or when inter-character spacing is other than the default.
  - Added a clarification that baseline shifts can nest, that nested baseline shifts are additive, and that baseline-shift values are supplemental to all other positioning and alignment features.
  - Removed 'auto' keyword from 'rotate' attribute on 'tspan', etc. after implementation feedback that 'auto' had the same meaning as zero.
  - DOM: Removed interfaces SVGTextRotate and SVGAnimatedTextRotate due to removal of 'auto' keyword from 'rotate' attribute on 'tspan', etc. Changed 'rotate' attribute on interface SVGTextPositioningElement from SVGAnimatedTextRotate to SVGAnimatedNumberList.
  - DOM: Changed SVGTextPathElement to inherit from SVGTextContentElement instead of SVGTextPositioningElement as 'textPath' does not have attributes x/y/dx/dy/rotate.
- Changes to Painting: Filling, Stroking and Marker Symbols
  - Changed the initial value for 'fill-rule' and 'clip-rule' to "nonzero" instead of the old default value of "evenodd" due to implementation feedback associated with SVG fonts where it was discovered that "evenodd" produced undesirable results. The new default also is in better alignment with the desktop publishing world (e.g., PostScript, PDF and associated authoring tools) and the Java2D implementation platform as "nonzero" is the default in these cases.
  - Removed 'userSpace' as a possible value for 'markerUnits' after implementation feedback about how difficult these features are to implement and their impact on performance.
  - Removed reference to filters for 'color-interpolation' property, as the definition for filters is that they are all done in linear RGB space.
  - Changed the icc-color(...) function to permit zero-or-more color values instead of the previous one-or-more color values. This change came from implementation feedback where the DOM interface for a list of color values would have to be implemented differently than the other lists in the DOM.
  - New wording for the keywords 'auto', 'optimizeQuality' and 'optimizeSpeed' for property 'image-rendering'. Stated explicitly that 'optimizeQuality' means "at least as good as bilinear resampling" and that 'optimizeSpeed' means "at least as good as nearest neighbor resampling."
  - DOM: Changed parameters on interface SVGPaint for setPaint() to DOMStrings. These changes were done after implementation feedback that pointed out that an RGBColor object can exist only when attached to a CSSStyleDeclaration.
  - Clarifications about the relationship between markers and the 'overflow' property. The clarifications note explicitly that markers do not establish a new viewport, but the 'overflow' property applies by default (i.e., a clipping rectangle is created by default).
  - Reworded some of the sections on markers using the same approach and terminology as the corresponding write-ups on patterns. The actual behavior of markers is unchanged.
- Changes to Color
  - Added definition of property 'color-profile', which was left out of earlier specifications inadvertently. This property allows the SVG content to assign or override the color profile for a given raster image resource.
  - Fixed error in definition of 'src' descriptor in @color-profile. The initial value was "auto", but this wasn't one of the possible values. The initial value is now "sRGB".
  - Fixed syntax for 'src' descriptor for @font-face and added 'local' attribute to 'font-face' element to allow for specification of local profiles.
- Changes to Gradients and Patterns
  - Added 'class' and 'style' attributes and presentation attributes 'stop-color' and 'stop-opacity' to 'linearGradient' and 'radialGradient' to be consistent in the handling of properties across the language.
  - Removed 'userSpace' as a possible value for 'gradientUnits' and 'patternUnits' after implementation feedback about how difficult these features are to implement and their impact on performance.
  - Changed the defaults for 'gradientUnits' and 'patternUnits' to objectBoundingBox. Changed meaning of 'patternUnits' to only apply to attributes x/y/width/height and added new attribute 'patternContentUnits' to indicate the coordinate system of the contents of the pattern. These changes were done to adapt to other spec changes regarding CSS units and percentages.
  - Fix typographical errors in description of xlink:href attribute on patterns. Previously, the text said "If this element has children", and has been fixed to say "If this element has no children". Also, the last sentence incorrectly referred to referenced gradient stops, and now refers to referenced children.
  - Fixed editorial error where spreadMethod had a default value. Now, the DTD has been modified to define spreadMethod to be #IMPLIED. (Other gradient attributes were defined to be #IMPLIED as this is necessary for the xlink:href inheritance mechanism to work properly. Not doing this for spreadMethod was an oversight.)
  - More detailed description of how patterns behave, including clarifications about the relationship between patterns and the 'overflow' property. The clarifications note explicitly that patterns do not establish a new viewport, but the 'overflow' property applies by default (i.e., a clipping rectangle is created by default) and the origin for the pattern definition is always aligned to the top/left of the pattern tile.
- Changes to Clipping, Masking and Compositing
  - Changed the initial value for 'fill-rule' and 'clip-rule' to "nonzero" instead of the old default value of "evenodd" due to implementation feedback associated with SVG fonts where it was discovered that "evenodd" produced undesirable results. The new default also is in better alignment with the desktop publishing world (e.g., PostScript, PDF and associated authoring tools) and the Java2D implementation platform as "nonzero" is the default in these cases.
  - Removed 'userSpace' as a possible value for 'clipPathUnits' and 'maskUnits' after implementation feedback about how difficult these features are to implement and their impact on performance.
  - Changed the defaults for 'maskUnits' and 'x', 'y', 'width' and 'height' on the 'mask' element to objectBoundingBox, -10%, -10%, 120% and 120%, respectively. Changed meaning of 'maskUnits' to only apply to attributes x/y/width/height and added new attribute 'maskContentUnits' to indicate the coordinate system of the contents of the pattern. These changes were done to adapt to other spec changes regarding CSS units and percentages.
- Changes to Filter Effects
  - Removed 'userSpace' as a possible value for 'filterUnits' and 'primitiveUnits' after implementation feedback about how difficult these features are to implement and their impact on performance.
  - Changed the defaults for 'filtersUnits' and 'x', 'y', 'width' and 'height' on the 'filter' element to objectBoundingBox, -10%, -10%, 120% and 120%, respectively. These changes were done to adapt to other spec changes regarding CSS units and percentages.
  - Default values have been provided for all filter effect attributes which did not have default values in previous versions of the specification.
  - Fix error in description of height of feMorphology kernel ("2*" was missing).
  - Added clarification for feMorphology to indicate that dilation uses component-wise maximum within kernel rectangle, erosion uses component-wise minimum.
  - Fix error in Ly formula for feDiffuseLighting. Previously, the formula said "Ly = -sin(azimuth)*cos(elevation)". Now, the formula removes the minus sign and says "Ly = sin(azimuth)*cos(elevation)". This change makes angles in feDiffuseLighting consistent with angles in the rest of the specification.
  - Revised version of pseudo code for feTurbulence. Changes include:
    - The old code did not account for the fact that fact that there can be separate X and Y values for baseFrequency. The new code does.
    - The old code did not show how stitching is done. The new code does.
    - The new code uses doubles instead of floats.
- Changes to Interactivity
  - As part of redefinition of CSS units (see change notes above under Coordinate Systems, Transformations and Units), removed the 'zoom' keyword on "zoomAndPan" attribute. It is no longer possible to have aspects of a document that are invariant with zooming except via scripting.
  - Fixed editorial mistake where property and presentation attribute 'pointer-events' was shown to allow values 'visibleFillStroke' and 'fillstroke', whereas these keywords were eliminated previously. The descriptions of these keywords had been eliminated, but the property summarizes and DTD still showed these keywords.
  - In response to implementation feedback, made a minor change to the description of how 'pointer-events' relates to text and images. Now, there are five possible options (equivalent to none, all, visible, painted and visiblePainted), whereas before there were only three (none, all, visible).
  - Removed a reference to keyboard events in introductory section as keyboard events are not included in the DOM2 specification.
- Changes to Linking
  - Added 'tspan', 'tref', 'textPath' and 'altGlyph' to content model for 'a' - not having this was an oversight that prevented hyperlinks around text that might have different styling attributes per character.
- Changes to Animation
  - Fixed source code in example animMotion01 where the triangle's Y coordinates needed to be made negative.
- Changes to Fonts
  - Added attribute vert-orig-x and vert-orig-y to 'glyph' and 'missing-glyph' due to implementation feedback indicating that it is sometimes necessary to specify different origins for vertical text on a per-glyph basis. The same attributes still exist on the 'font' element, but are now just defined to be the default values in case the glyph doesn't provide an override.
  - Fixed typos in the descriptions of attributes 'horiz-adv-x' and 'vert-adv-y' on the 'glyph' element.
  - Created a new section called "Glyph selection rules", which contains text extracted from the description of the 'unicode' attribute. The extracted text dealt with user agent character-to-glyph mapping behavior, not the 'unicode' attribute per se.
  - Explicitly stated that the default kerning value is zero.
  - In response to implementation feedback, changed the name of attribute 'vert-text-orient' to 'orientation' with values 'h', 'v' or nothing to indicate whether the given glyph can be used only for horizontal text, only for vertical text, or the default that it can be used for either.
  - Renamed attribute 'arabic' to 'arabic-form'.
  - Renamed attribute 'han' to 'lang' and generalized its definition. Now, the given glyph can be used if the xml:lang for a text string matches one of the languages specified in the 'lang' attribute on the glyph.
  - Fixed the list of baselines to match the XSL list of baselines. Thus, 'baseline' becomes 'alphabetic' and 'mathline' becomes 'mathematical', 'centerline' and 'topline' have been removed (these are computed baselines, not font baselines), and 'v-alphabetic', 'v-ideographic', 'v-hanging' and 'v-mathematical' have been added.
- Changes to SVG DTD
  - Fixed error in PresentationAttributes-All, where an entity reference to PresentationAttributes-Viewports was not included in the list.
- Changes to SVG DOM
  - Clarified the description of the 'hasFeature' method call to indicate that all SVG features are version 1.0, whereas features from other specifications have the version numbers documented in the relevant other specification.
- Changes to Java language DOM binding
  - Fixed bug where the keyword "public" was missing on some method definitions.

previous contents properties index