Sanjiva Weerawarana wrote:
On Thu, 2005-06-23 at 13:20 +0530, jayachandra wrote:
Resolution:
-----------------
Now this is left for the community to thoroughly discuss how we will
support full infoset. FYI, earlier before the release of M2 I worked
on this and found that making OMDocument extend OMElementImpl would
complement the lacking functionalities like child API, serialization
functionality etc. for OMDocument, without disturbing any of existing
code base.
Yeah, the above fix gives the impression that OMDocument ISA OMElement
and that might not be correct. But if we all can churn and come out
with a better design I can use that to re-implement the infoset
support, as much as I can.
This is how its done in most DOM impls too .. in fact IIRC Xerces DOM
impl doesn't even complain if you add multiple child elements to the
Document node! That's ok; that's a programmer error anyway :).
So +1 for making OmDocument extend OmElement.
-0
why to do this *if* it can be done correctly and have API safeguards
against stupid mistake (what about horrors like OMDocument added inside
another OMElement ...)?
this is really not that difficult to get right - i did it in XPP3/5 and
it worked out just fine - children management function make sure that
only allowed content (comments, PIs etc) is inserted and there are
accessors for all content (see interface below).
alek
package org.xmlpull.v1.builder;
/**
* Represents
* <a
href="http://www.w3.org/TR/xml-infoset/#infoitem.document">Document
Information Item</a>
* .
*
* @version $Revision: 1.5 $
* @author <a href="http://www.extreme.indiana.edu/~aslom/">Aleksander
Slominski</a>
*/
public interface XmlDocument extends XmlContainer, Cloneable
{
//JDK15 covariant public XmlDocument clone() throws
CloneNotSupportedException
public Object clone() throws CloneNotSupportedException;
/**
* An ordered list of child information items, in document order.
* The list contains exactly one element information item.
* The list also contains one processing instruction information item
* for each processing instruction outside the document element,
* and one comment information item for each comment outside the
document element.
* Processing instructions and comments within the DTD are excluded.
* If there is a document type declaration,
* the list also contains a document type declaration information item.
*/
public Iterable children();
public XmlElement getDocumentElement();
public XmlElement requiredElement(XmlNamespace n, String name);
public XmlElement element(XmlNamespace n, String name);
public XmlElement element(XmlNamespace n, String name, boolean create);
/**
* An unordered set of notation information items,
* one for each notation declared in the DTD.
*/
public Iterable notations();
/**
* An unordered set of unparsed entity information items,
* one for each unparsed entity declared in the DTD.
*/
public Iterable unparsedEntities();
public String getBaseUri();
public String getCharacterEncodingScheme();
public void setCharacterEncodingScheme(String characterEncoding);
public Boolean isStandalone();
public String getVersion();
public boolean isAllDeclarationsProcessed();
// manipulate children
public void setDocumentElement(XmlElement rootElement);
public void addChild(Object child);
public void insertChild(int pos, Object child);
public void removeAllChildren();
public XmlComment newComment(String content);
public XmlComment addComment(String content);
public XmlDoctype newDoctype(String systemIdentifier, String
publicIdentifier);
public XmlDoctype addDoctype(String systemIdentifier, String
publicIdentifier);
//public XmlElement newDocumentElement(String name);
public XmlElement addDocumentElement(String name);
public XmlElement addDocumentElement(XmlNamespace namespace, String
name);
public XmlProcessingInstruction newProcessingInstruction(String
target, String content);
public XmlProcessingInstruction addProcessingInstruction(String
target, String content);
// manipulate unparsed entities
//addUnparsedEntity
public void removeAllUnparsedEntities();
// manipulate notations
public XmlNotation addNotation(String name,
String systemIdentifier,
String publicIdentifier,
String declarationBaseUri);
public void removeAllNotations();
}
--
The best way to predict the future is to invent it - Alan Kay