- From: Cameron McCormack <cam@mcc.id.au>
- Date: Thu, 30 Oct 2008 17:34:47 +1100
- To: Doug Schepers <schepers@w3.org>
- Cc: cyril.concolato@telecom-paristech.fr, SVG Working Group WG <public-svg-wg@w3.org>
Hi Cyril and Doug. Doug Schepers: > That section of the spec is indeed pretty poorly written, with lots of > repetition. I cleaned it up and reordered it, though I didn't make as > many changes as Cyril. The attached file has the original, Cyril's > reworking, and my rough draft. > > I don't have a feel strongly about any of the content, though I agree > the section needs a revision. I just read through both of the rewordings, and they are both somewhat better than the current text. I have a couple of specific comments though: * I think we should keep the sentence Cyril marked in red, but reword it a bit. I think it is trying to say that if you have a large resource document that multiple primary documents reference, then these need to be logically separate instance of the document, but that in some cases the UA may be able to optimise this (if no scripts run in it and it’s not modified, or something). While it’s not strictly necessary to point out where implementors may optimise (since implicitly they may optimise anywhere as long as they adhere to the conformance criteria), it still may be useful as an indication to authors that they may not necessarily get a performance benefit here. * I don’t think it’s necessary to introduce new subsections to introduce the primary/resource document terms, since those subsections are pretty short. * While referenced media are not shared across primary documents, I don’t think it’s necessary to discuss them, since they aren’t SVG documents (which is really what the whole section is dealing with). (Although my proposed text below does include it.) Perhaps the section should be retitled “Processing of external references to SVG documents” to be clear on that. * As mentioned before, it seems we don’t need to say anything about scripts. Having said that, here is some proposed text that takes a bit of wording from Cyril’s and Doug’s proposals, and a fair bit of my own: Processing of external references to SVG documents When an SVG user agent resolves an external reference to an SVG document, how the document is loaded and processed depends on how the document was referenced. As defined below, an externally referenced SVG document or document fragment is classified as either a primary document or a resource document, and this classification determines the document’s processing. A primary document is an SVG document that is referenced, or an SVG document fragment that is included in another document, that is to be presented in whole by the user agent. Specifically, the following are classified as primary documents: * An entire SVG document that is loaded into an SVG user agent for presentation, such as when navigating a web browser to an IRI that references an SVG document, whether by typing the IRI into the browser’s address bar, clicking on a link to that IRI, or having the Location.assign() method invoked. (In an HTML 5 user agent, this is when an SVG document is part of a top-level browsing context ([HTML5], section 4.1).) * An entire SVG document that is loaded due to it being referenced by an 'animation' element. * An entire SVG document that is loaded due to it being referenced for inclusion by a parent non-SVG document for presentation, such as using the HTML 'object' or 'iframe' elements. * An SVG document fragment that is embedded within a non-SVG document that is being presented by the user agent, such as an XHTML document that has an 'svg' element child of an HTML 'div' element. While the SVG document fragment is not a whole document in itself, it does act as a primary document for the processing purposes described below, and is distinct from any other primary document that may be embedded within the non-SVG document. A resource document is an SVG document that has been loaded because it is referenced as a resource by an SVG document fragment. Specifically, the following kinds of external references, all of which are references to elements, will cause the loaded SVG document to be classified as a resource document: * The 'xlink:href' attribute on a 'use' element * The 'xlink:href' attribute on a 'font-face-uri' element * A paint server reference in a 'fill' or 'stroke' property Each primary document maintains a dictionary that maps IRIs to resource documents. This dictionary is used whenever a resource document is to be loaded because the primary document or one of its resource documents references it. Before loading a resource document, its IRI is first looked up in the primary document’s dictionary to determine if it has already been loaded. If so, then that already-loaded document is used instead of creating a separate document instance. Thus, for each primary document, a given resource document is loaded only once. Primary documents, however, are always separate, self-contained document instances, and resource documents are not shared between primary documents. The IRI used as the key in the dictionary of resource documents must be the absolute IRI after resolving it against any applicable base IRI, and comparisons of the dictionary keys must be performed using a Simple String Comparison, as defined in section 5.3.1 of Internationalized Resource Identifiers [RFC3987]. Whether a document is a primary document or a resource document, its processing once loaded is the same: events are fired, scripts are executed, an animation timeline is created and animations are run, stylesheets are applied (if supported by the SVG user agent), and so on. Since a resource document is not just a static DOM, any changes to it (be they modifications by script or changing presentation values with animation) will be visible through all references to that resource document. Note that since IRI references to resources from different primary documents will result in logically separate resource documents being instantiated, an SVG user agent will in general not be able to conserve memory by having only one instance of the resource document in memory. In the case that many primary documents all have references to a single, large, common resource file, this will probably result in a large amount of memory consumed. If the SVG user agent is able to prove that the primary documents will behave exactly the same if a single instance is shared in memory (by using copy-on-write semantics for the resource documents, for example), then such an optimization may of course be performed. References to non-SVG resources, such as media, are not classified as primary or resource documents, and multiple references to media at a particular IRI always result in separate timelines being created. I’m not convinced by my second last paragraph there, and wouldn’t mind if it was omitted. I think also some concrete examples should be included here. And a question: should resource documents be restricted to being entire SVG documents, or can they be SVG document fragments within say an XHTML document? [blah.svg] <svg …> <use xlink:href='blah.xml#r'/> </svg> [blah.xml] <html …> … <body> <svg …> <rect id='r' width='100' height='100'/> </svg> </body> </html> -- Cameron McCormack ≝ http://mcc.id.au/
Received on Thursday, 30 October 2008 06:35:37 UTC