- From: Steve Withall <steve@withallyourequire.com>
- Date: Wed, 09 Dec 2009 12:16:54 +1100
- To: www-svg@w3.org
- Message-Id: <200912090118.nB91I6vr010954@mail16.tpgi.com.au>
Doug, Here is some feedback on your Parameters specification "SVG Parameters 1.0, Part 2: Language" (undated, but last modified 10th June 2009). I am not commenting on Part 1, because I believe that Part 2 gives me the opportunity to make every point of substance I have. I've divided my comments into two parts for readability, plus a third proposing a different way of declaring parameters. Steve. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A. Comments on Part 2, "Use Cases and Requirements" section =========================================================== A1. Requirements and use cases ought to precede everything else - and be written before you consider what might be the best solution to them :) - so I find it strange that they are deferred to the second document. A2. "Usage Scenarios": This list of usages is helpful, but since they're examples they are merely anecdotal. They don't constitute a statement of the goals for parameters, which is lacking. The closest you come is saying in the Abstract of Part 1 that they're for "re-using a resource several times with specified variations", but this is vague and open to many interpretations. In recent emails, Doug, you have stated that you want to keep the Parameters specification simple. But without clearly defining what parameters are for, one cannot make an objective judgment of whether what's currently specified is adequate, nor whether suggestions for extra sophistication are good value or not. BTW, when you say enhancements could be added in future, what do you mean? SVG 3.0 in 2017? :^) You ought to do you utmost to get it right first time. In any case, the ability to add more sophistication in future without major disruption would be a useful requirement to add. A3. "Usage Scenarios": Simplicity in the Parameters specifications is one thing; simplicity in the documents that use parameters is something else. How many parameters might document authors end up using in a single document? All your examples are simple (which is fine), but it's not hard to envisage parameters numbering in the dozens. A single flat list is less than ideal when it grows longer than, say, eight or ten. A4. "Adapt text to use": This is potentially very useful, but might quickly become unwieldy if you have more than one or two text parameters (especially when passing via a URL, or for long pieces of text). Some authors might be tempted to use this to achieve multi-lingual text, which is probably not a good idea. A5. "Usage Scenarios": The previous point leads me to suggest that you investigate possible usage scenarios in more detail: if (sorry, when!) you give document authors this parameters facility, what uses might they put it to that you haven't thought of? You wouldn't want any nasty surprises. Perhaps you could invite suggestions. Some usages could be horrible bastardizations. Some might be worth considering in their own right, to allow them to be achieved in a cleaner and easier way. When investigating in more detail, you ought to create examples that are as complex as authors might create in real life. (A 12-month bar chart with 6 parameters per month?) The existing examples are so simple that they don't tell you much about usage in practice. How do parameters scale up? Just how long might long URLs become? (Longer than you anticipate, I anticipate.) A6. "Special Considerations for SVG Parameters", "Implementation commitments": For all you say about keep Parameters simple, I believe that implementing them as specified is likely to involve considerable effort - because of the sheer number of attributes that must support the "param(...) ..." syntax. (Would the major implementers care to consider this and give us their verdicts?) A7. Following on from A6, I suggest that the Working Group ponder whether any other forthcoming SVG enhancements have a similarly wide impact upon existing attributes en masse, so that implementers can make all these changes in one go. I have in mind the potential for the layout specification to introduce expressions. (I live in hope!) A8. "Special Considerations for SVG Parameters", "Ease of authoring": The first consideration is to make it easy for authors to know what parameters are available to them when they re-use a particular SVG document. I have more to say on this below, because it is a consideration I believe is not satisfied at present. A9. "Requirements", point 1.1: Remove the "(but not limited to)" clause. It renders this requirement open-ended, which is unacceptable. Adding a new means of passing parameters constitutes an extra requirement. (Each existing means ought to be regarded as a distinct requirement too.) A10. "Requirements", points 2 and 3: Yes, you need to say more about scripting and animation! Nasty complications might lurk in both places, and you need to flush them out as soon as you can. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ B. Comments on Part 2, "Definitions and Basic Data Types", "Syntax" section =========================================================================== B1. I find that this document lacks structure. There are two distinct parts to Parameters: usage (the documents that refer) and declaration (the documents that are referred to). I think everything would be clearer if you had two clear top level sections accordingly. The "Syntax" section launches into the declaration aspects without introducing that that's what it's doing. (Actually, if you do choose to restructure Part 2, you could also consider merging Parts 1 and 2 into a single document. Two documents are not warranted for reasons of size, and a single document would allow you to avoid the repetition that is necessarily present now.) B2. Further to B1, the subject of parameters would be easier to write about if we had clear terms for the 'usage' documents and for the 'declaring' documents. (I'm finding it hard to decide how to refer to them in this email. For want of something better, I call them the 'usage document' and 'declaring document' respectively.) B3. "The 'param' Attribute", fourth paragraph: In order to stress how pervasive this change is, you ought to highlight as boldly as you can the statement that the "param attribute value must be available as a value on any SVG attribute". Further, I would change 'any' to 'every', and add "on every SVG element". The implications of this are considerable: potentially large development effort by implementers (and perhaps even more for authoring tool developers), extra tests for every attribute in every SVG element, and ... what else? (My proposed alternative, described below, avoids all of these changes.) B4. "The 'param' Attribute": Any changes you make to attribute values ought also to apply to property values too, for consistency. Am I correct in believing that to date the values allowed in all property values are identical to the values allowed in the equivalent attributes? If so, this commonality should be maintained. B5. "The 'param' Attribute", fifth paragraph: You are correct that this section needs a lot of work. This section deals only with the local syntax for declaring a single parameter, which is relatively straightforward. A separate topic, which deserves a new section in its own right, is interactions between multiple parameter declarations. Topics that need addressing include: (a) Multiple parameters with the same name. This is useful and is presumably acceptable, to allow one parameter to affect multiple parts of the re-used document at once. For example a 'color' parameter could set the color of several sub-elements. (b) Inconsistencies between parameters with the same name. For example, if parameter name 'p1' is a color attribute in one place and a co-ordinate in another, then ... well ... something's gonna break. A declaring document is in a position to detect such inconsistencies - but only by navigating the whole document tree to find all parameter declarations. B6. "The 'param' Attribute", fifth paragraph: Point B5 (b) leads to the subject of error handling, which I think your specification ought to address explicitly. The validity of a parameter value written in a 'usage' document can only be determined by reference to its declaration in a separate document. This could lead to errors that aren't easy to explain to the user (especially since they may otherwise have no cause to look into the declaring document; indeed, one of the benefits of parameters is that they don't need to). This is an area where implementers need to take extra care with their error messages. Perhaps the Parameters specification could lay down some guidelines. B7. "The 'param' Attribute", fifth paragraph: Further to B6, one source of errors in parameters is in data typing: an attribute might expect a color, but be given a length. Such errors are usually straightforward to deal with, but the fact that the value is supplied by one document and validated with reference to another introduces an extra level of complexity. B8. Another situation to consider is an SVG document both declaring and using parameters. That is, a declaring document could refer to other documents that use parameters. This would appear to cause no problems if each usage is treated as self-contained. But might document authors want the parameter mechanism to percolate down the chain of referenced documents? For instance, if document A uses a parameter 'p1' in document B, and document B uses a parameter 'p1' in document C, should the same value of p1 passed from A to B also be passed to C? (I hope you can follow that.) Your 12-month bar chart example in Part 1 might benefit from a two-level declaration of this kind (especially if you wished to make it more complex): one document for the bar chart and a separate one for a column. B9. The 'parameters' property: Good luck to anyone who attempts to animate a list of parameters! I suspect that specifiers of standards have a tendency to throw in any feature which is easy for them to write. Making a property inheritable and animatable is for you a matter of a few keystrokes. Ditto your policy of making every new attribute a property (which I dislike, find ridiculous for some attributes, and regard as not in the spirit of the original SVG standard). Do you adequately consider the implications each time you slip in (or copy in) such innocuous words? Conscientious as you are, you're not superhuman, so I imagine you can't. If in doubt, leave it out! Deliver on your promise to keep parameters simple! :) And one more suggestion which I'll put here to save me creating a whole new section for it: B10. You use parameters to reference a whole SVG document. There's no reason why you couldn't reference a single element. This would allow multiple related 'referencable' elements to be placed in one document, which would give authors more flexibility, reduce the number of documents, potentially reduce the number of resources that need to be loaded, and allow these elements to share the same <defs> element (thus avoiding repetition). To do this would complicate the URL format to include the ID of the element to reference - but that's not a big deal. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Proposal for an alternative to "param(...) ..." attribute values ================================================================ Rationale: The problem of discovering what parameters can be passed to a particular declaring document led me to consider the analogy with programming languages. Functions in high level programming languages typically (always?) declare all their parameters at the beginning, which makes it clear what parameters to pass. A programming language that let you declare parameters anywhere in the body of a function's code would be considered very strange. Isn't that what the Parameters specification does? (Another analogy is to the animation of attribute values: SVG sensibly has separate animation elements, rather than attempting to pack the definition of an animation into an attribute's value - which is effectively what "param(...)" does for parameters.) An alternative is to declare all an SVG document's parameters in one place, as near the beginning of the document as possible - perhaps in the <defs> element. The declaration of a parameter needs a name plus references to one or more attributes that its value can be passed to. (An attribute value is not needed, because each attribute's normal value plays this role.) The equivalent of the SVG document in the "Passing Values to SVG Files" section in your specification Part 1 might be something like: <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 110 40" width="100%" height="100%"> <defs> <paramDefs> <paramDef name="color" elementId="button_rect" attribute="fill"/> <paramDef name="outline" elementId="button_rect" attribute="stroke"> <paramDef elementId="button_label" attribute="fill"/> </paramDef> <paramDef name="label" elementId="button_label"/> </paramDefs> <defs> <title>Reusable Button</title> <desc>Takes parameters from parent document's embedding element.</desc> <g> <rect id="button_rect" x="5" y="5" width="100" height="30" rx="15" ry="15" fill="blue" stroke="navy" /> <text id="button_label" x="55" y="30" text-anchor="middle" font-size="25" fill="black" font-family="Verdana"> button </text> </g> </svg> Miscellaneous points and extra suggestions: C1. I have modified the example to apply the 'outline' value to the fill of the <text> element too, to demonstrate using a parameter in more than one place. (And I lazily used the same <paramDef> element name for the child element, which is probably inadvisable, but I couldn't think of a good alternative quickly.) C2. This example references elements by ID, but XPath could be offered as an alternative. C3. The last <paramDef> element refers to the content of the <text> element. This is (supposedly) implied by the absence of an 'attribute' attribute, but it could be done in a more explicit way. C4. Elements defining parameters could be further nested, to group related parameters. This could be convenient where many parameters are declared. This would result in hierarchical names, for which a dot notation might be suitable (eg. "may.percent" and "may.color", in your bar chart example). C5. The passing on of parameters to other documents with parameters (as per point B8 above) would probably demand its own extra constructs. C6. To support the referencing of a single element (as per point B10, above), any SVG element could be allowed to contain a <paramDefs> element. C7. Parameters could be used for more than just passing values directly to attributes and properties. Two possibilities: (a) Conditional logic. For example, a parameter definition could say that if parameter "side" equals "left" then change an attribute in one element, else change an attribute in another. (b) As the basis for calculations, which could be useful for laying out elements. For instance, in your 12-month bar chart example in Part 1, you could have a "column-width" parameter that is used to calculate the position of each column. (In the preamble to that example you admit that parameters as specified have limitations; enhanced <paramDef> elements could overcome some of these limitations.) There are likely to be other interesting possibilities - which can be added relatively easily because they are merely additions within the <paramDefs>. The "param(...) ..." construct slams the door shut against such possibilities. This approach offers several advantages: Ad1. The new parameter-related elements are the *only* changes. No attributes or properties in existing elements need be changed. There is no need for the "param(...) ..." construct, nor the "content-value" attribute. Ad2. All the parameters are declared in one place, at the top of the document. So it's easy to see what they all are. Ad3. The parameter-related elements provide a place to *document* the parameters (which the existing specification does not provide). Ad4. Checking parameters for consistency involves checking just the content of the <paramDefs> element and the elements its descendents refer to, rather than the whole document tree. Ad5. Future enhancements have a good chance of being localized to the parameter-related elements, rather than potentially involving further rounds of changes to all attributes in all elements.
Received on Wednesday, 9 December 2009 01:18:47 UTC