- From: Fred L. Drake, Jr. <fdrake@acm.org>
- Date: Wed, 13 Jun 2001 14:38:32 -0400 (EDT)
- To: www-dom@w3.org
(Since this list has been quiet lately...) These are my comments on the "Abstract Schemas" portion of the June 7, 2001 ASLS working draft. The Load and Save section is not addressed in this message. Section 1.1, para. 1: The features AS-EDIT and AS-DOC are hinted at, but a different view on these features would be useful as well: there are methods that let you *query* the schema as well as those that let you modify the schema, and these should be a separate feature. I think the set of features can be more usefully described as: AS-QUERY: Abstract Schema objects with query interfaces. AS-EDIT: Abstract Schema objects with mutators. AS-DOC: Document nodes with schema query interfaces. Since an implementor may reasonably implement the Load/Save features without implementing any of the AS-* features, I will also suggest that the error-handling support added in this draft be separated into a separate feature: ERROR-HANDLER: Document.setErrorHandler() & related support interfaces (DOMLocator, DOMErrorHandler). Section 1.1.2, use case ASU2: The last sentence notes that the external subset of a DTD incorporates both an internal and external subset. This doesn't sound right to me; is the language confused, or is this referring to the ability to compose the external subset using parameter entity references within the external subset? If the later, I'd say that the language is still badly confused. Section 1.2, ASModel.publicId and ASModel.systemId: Were these intended to be readonly attributes? It is not clear that these should be read/write attributes; would it make more sense to pass the information to DOMImplementationAS.createAS() and DOMImplementationAS.createExternalAS(). This would be similar to what is currently done with Document and DocumentType nodes. Section 1.2, ASModel.insertBefore(): "inserted in the back of" seems unclear; perhaps "appended to" would read better. Also note the typo in "maintaoned". Section 1.2, ASAttributeDeclaration.ownerElement: The name of this attribute is misleading; it implies either a "one->one" or "one->at most one" relationship, which is not correct if attribute declarations can be shared by multiple elements. For instance: <!ATTLIST (a|b) attr CDATA #IMPLIED> Could be implemented in two different ways -- using one ASAttributeDeclaration with an ownerElement that points to both the a and b elements, or two distinct ASAttributeDeclaration nodes which each have only one of a or b in their ownerElement list. Since a list is being used, I think the former is implied. The intention needs to be clarified in one way or the other. Section 1.2, ASEntityDeclaration, editor's note: Will parameter entities be supported by a future specification? Section 1.3, Document.setErrorHandler(): The Document interface does not have a base class, but it appears to be an extension of the Document interface from the Core feature. The presence of both Document and DocumentAS in this section makes this less than clear, although what "makes sense" seems obvious. Note also my comments about separating the error handler support into a separate feature from the AS-* features, since an implementor can reasonably want to implement Load/Save without implementing the AS-* features. As to the method itself, there needs to be some rationale as to why a method was used instead of an attribute, or change it to an attribute. No explanation is given regarding why retrieval of the error handler is not supported, but it would be very useful for some operations (such as adding a logging layer around another error handler). Section 1.3, DocumentAS: This interface used to support the association of multiple AS objects with a document is very baroque; is there a good reason for doing this? Most applications should need only one AS for the lifetime of a document. Supporting this feature will complicate basic implementations without clear benefit. For applications which do require such support, an extension to the ASModel interface can be used which allows selection of one AS from a set. All of the methods from DocumentAS could be moved to such an "ASMultiModel" interface without any functional sacrifice, and allowing implementations not interested in the multi-model support to be more flexible in their implementations of many of the facilities offered by the AS-DOC feature. Section 1.3, DocumentAS.activateAS(): Regardless of where this method is defined, the last sentence of the description is an excellent example of why ASAttributeDeclaration.ownerElement is poorly named. Section 1.4, NodeAS.can*(), CharacterDataAS.can*(): These methods are listed as being able to raise DOMException, but no explanation is made as to when they should. Given that a return of "false" should be sufficient, allowing the exception doesn't seem to make sense. If the use of exceptions is considered appropriate, detailed explanations of which exception codes are used when need to be given. Section 1.4, NodeAS.canAppendChild(): The return value description should reference Node.appendChild(), not Node.AppendChild(). Section 1.4, NodeAS.canInsertBefore(): The return value description should reference Node.insertBefore(), not Node.InsertBefore(). Section 1.4, NodeAS.canRemoveChild(): The return value description should reference Node.removeChild(), not Node.RemoveChild(). Section 1.4, NodeAS.canReplaceChild(): The return value description should reference Node.replaceChild(), not Node.ReplaceChild(). Section 1.4, Node.isValid(): There's an extra space before the period at the end of the description of the "deep" parameter. Section 1.4, ElementAS.get*(), ElementAS.contentType(): It seems that these five methods shuld be replacable by readonly attributes. That would make the API more similar to the existing Element interface. The new names could simply be elementDeclaration, childElementNames, parentElementNames, attributeNames, and contentType. This reserves implementation complexity and possibly runtime costs to those implementations which support multiple models (which have to pay that price anyway). Section 1.4, ElementAS.contentType(): Constants need to be defined for the return values. Section 1.4, CharacterDataAS.can*(): The explanations of the return values are bogus and need to be written seriously. See also the comments on NodeAS.can*(). Section 1.4, CharacterDataAS.isWhitespaceOnly(): This method doesn't make any sense in the AS draft. This should either be in the Core feature or omitted entirely. This is more a string operation which should be specified by the language binding for the DOMString type. If it must be defined in the DOM, it should be a readonly attribute in the Level 3 Core CharacterData interface. Section 1.4, DocumentTypeAS: There is no isNotationDefined() method, but it appears there should be, if only for completeness. Section 1.4, DocumentTypeAS.isAttributeDefinedNS(): The description of the "localName" parameter is awkward. Perhaps it should read "localName with namespace" or just "localName of the attribute". Section 1.4, AttributeAS.getNotation(): Why is an exception allowed from this method when there is no exception for AttributeAS.getAttributeDeclaration()? A null return should be sufficient. Section 1.5: The Document interface from section 1.3 should be moved to this section. Section 1.5, DOMLocator: The get*() methods of this interface should all be made readonly attributes for consistency with the use of attributes in existing DOM recommendations. Note also that these represent the only use of "ID" for "identifier"; "Id" is used elsewhere and should be used here as well for consistency. Section 1.5, DOMLocator.getNode(): "NODE" should not be spelled with all caps in the return value description. Section 1.9, last para.: This paragraph makes a little bit of sense only once the reader thinks about contents of comments and CDATA marked sections. These specific cases (and any others I've neglected) should be mentioned here to avoid reader confusion. The tree itself is well-formed with the DOM, it's only things like comment contents that can cause a user to be surprised in the end. -Fred -- Fred L. Drake, Jr. <fdrake at acm.org> PythonLabs at Digital Creations
Received on Wednesday, 13 June 2001 14:40:04 UTC