Appendix C: Implementation Notes


This appendix is normative.

C.1 Introduction

The following are implementation notes that correspond to features which span multiple sections of the SVG specifications.

C.2 Forward and undefined references

SVG makes extensive use of URI references to other objects. For example, to fill a rectangle with a linear gradient, you define a <linearGradient> element and give it an ID (e.g., <linearGradient id="MyGradient"...>, and then you can specify the rectangle as follows: <rect style="fill:url(#MyGradient)"...>.

In SVG, among the facilities that allow URI references are:

Forward references are disallowed. All references should be to elements which are either defined in a separate document or defined earlier in same document. References to elements in the same document can only be to elements which are direct children of a <defs> element. (See Defining referenced and undrawn elements: the <defs> element.).

Invalid references should be treated as if no value were provided for the referencing attribute or property. For example, if there is no element with ID "BogusReference" in the current document, then fill="url(#BogusReference)" would represent an invalid reference. In cases like this, the element should be processed as if no 'fill' property were provided. Where a list of property values are possible and one of the property values is an undefined reference, then process the list as if the reference were removed from the list.

C.3 Referenced objects are "pinned" to their own coordinate systems

When a graphical object is referenced by another graphical object (such as when the referenced graphical object is used as a clipping path), the referenced object does not change location, size or orientation. Thus, referenced graphical objects are "pinned" to the user coordinate system that is in place within its own hierarchy of ancestors and is not affected by the user coordinate system of the referencing object.

C.4 <path> element implementation notes

A conforming SVG user agent must implement path rendering as follows: