[XML-SIG] new qp_xml.py

Laurent Szyster l.szyster@ibm.net
Tue, 09 Nov 1999 14:50:08 +0100


This is a multi-part message in MIME format.
--------------CD99275CDBC6A2EA4902452C
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Greg Stein wrote:
> 
> Suggestions/changes/etc are welcome! (Laurent... :-)

Here are some suggestions (partly implemented in the attached
myXML.tar.gz archive):

 . Split the building of the tree between a "Parser" class that
   instanciates the nodes and the "DOM" class that stores them
   (and eventually index them). This allow for more combination
   of features, hence better code re-use and extendability.

   Here the important is the definition of the interface
   between the "Parser" and the "DOM": the "Element" class
   and the "DOM.append()" method.

 . Allow for direct mapping of XML to the Python namespace, in
   such way that you could refer to the second <p> element of
   the first <chapter> in a document as

     dom.root.chapter[0].p[1]

   That's very pythonic. It is implemented in a "DOM", and
   therefore can be combined with different "Parsers".

 . Allow for direct mapping of XML Namespaces to Python classes
   and functions. Which is also quite pythonic.

   This is a feature putted in a "Parser", independently of
   the "DOM".

The attached myXML.tar.gz archive provides a first implementation
of these ideas. That source also includes some support for XPath
and XSLT (though you'll need to install kjBuckets for that). It's
allready working quite decently but I expect public review to
show many shortcomings and even bugs ;-)

You'll get a better understanding of myXML by reading the 
"paper-submission.html" document included in the archive.

Comments are warmely welcom, specially about interface.


Laurent Szyster
--------------CD99275CDBC6A2EA4902452C
Content-Type: application/x-gzip;
 name="myXML.tar.gz"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="myXML.tar.gz"

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
--------------CD99275CDBC6A2EA4902452C--