Scott Tavares wrote:
> 
> Dude, this is something i've already been working on... been using DOM with
> XML schema and Xerces 1.0.1 and getting ready to commit it by the end of
> this weekend. Don't really know what we do from here but i will take a close
> look at this and if it is beater than what i have i will step aside but i
> will let you know... what does every one else think?

Actually, I think SAX is the better way to go, although I also think we
should have both a SAX and DOM impl.  As a general rule, DOM is slower,
heavier, and not as complete as SAX.  In addition, since we have no
intention of running this thing through an XSLT processor, I see no
reason to use DOM for this.  However, we are going to be building an
in-memory representation anyway, so having a DOM alternative isn't bad;
I just don't think that the tree structure that DOM provides is that
representation.

If you mentioned you were going to use DOM, I missed it and apologize,
as I would have given my opinion earlier.  For small, sequential
processing SAX provides a great model.  Since you are mapping to an
object and don't need to store the document in tree form for random
access, I think SAX is the way to go.

> 
> -scott-
> 
> p.s. if you are new to the project, thank you for your work and welcome to
> Turbine, but the next time please check if anyone is working on the same
> thing you want to so there is no duplication of work.  once again thanks.

Yea, this is a good point; luckily you weren't both working on competing
SAX implementations, so at least both efforts are useful.  In the
future, we do need to be careful, as it is frustrating, I know ;-)

-Brett

> 
> ----- Original Message -----
> From: Christopher Elkins <[EMAIL PROTECTED]>
> To: Turbine <[EMAIL PROTECTED]>
> Sent: Friday, January 21, 2000 3:34 PM
> Subject: OPaL ClassMap loader
> 
> > Hi, all. Because my current project went on a temporary hiatus, I've
> finally
> > had some time to start working with OPaL. Here's my first cut at a
> ClassMap
> > loader based on Scott's draft XML schema. This code is rough and
> undocumented,
> > and it's hard-coded to use Xerces. It compiles successfully using JDK 1.2,
> but
> > I don't know if it successfully compiles under JDK 1.1 or if it even works
> yet!
> > However, it's a start. Also, this is the first time I've done _any_ SAX
> > programming, so be gentle. ;)
> >
> > --
> > Christopher Elkins
> >
> >
> > ---
> > ClassMapLoader.java
> > ===================================================================
> > package org.apache.turbine.opl.mapping;
> > /*
> >  * Copyright (c) 1997-1999 The Java Apache Project.  All rights reserved.
> >  *
> >  * Redistribution and use in source and binary forms, with or without
> >  * modification, are permitted provided that the following conditions
> >  * are met:
> >  *
> >  * 1. Redistributions of source code must retain the above copyright
> >  *    notice, this list of conditions and the following disclaimer.
> >  *
> >  * 2. Redistributions in binary form must reproduce the above copyright
> >  *    notice, this list of conditions and the following disclaimer in
> >  *    the documentation and/or other materials provided with the
> >  *    distribution.
> >  *
> >  * 3. All advertising materials mentioning features or use of this
> >  *    software must display the following acknowledgment:
> >  *    "This product includes software developed by the Java Apache
> >  *    Project for use in the Apache JServ servlet engine project
> >  *    <http://java.apache.org/>."
> >  *
> >  * 4. The names "Apache JServ", "Apache JServ Servlet Engine", "Turbine",
> >  *    "Apache Turbine", "Turbine Project", "Apache Turbine Project" and
> >  *    "Java Apache Project" must not be used to endorse or promote
> products
> >  *    derived from this software without prior written permission.
> >  *
> >  * 5. Products derived from this software may not be called "Apache JServ"
> >  *    nor may "Apache" nor "Apache JServ" appear in their names without
> >  *    prior written permission of the Java Apache Project.
> >  *
> >  * 6. Redistributions of any form whatsoever must retain the following
> >  *    acknowledgment:
> >  *    "This product includes software developed by the Java Apache
> >  *    Project for use in the Apache JServ servlet engine project
> >  *    <http://java.apache.org/>."
> >  *
> >  * THIS SOFTWARE IS PROVIDED BY THE JAVA APACHE PROJECT "AS IS" AND ANY
> >  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> >  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> >  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE JAVA APACHE PROJECT OR
> >  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> >  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
> >  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
> >  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> >  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
> >  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
> >  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
> >  * OF THE POSSIBILITY OF SUCH DAMAGE.
> >  *
> >  * This software consists of voluntary contributions made by many
> >  * individuals on behalf of the Java Apache Group. For more information
> >  * on the Java Apache Project and the Apache JServ Servlet Engine project,
> >  * please see <http://java.apache.org/>.
> >  *
> >  */
> >
> > import java.io.*;
> > import java.util.*;
> > import org.xml.sax.*;
> > import org.xml.sax.helpers.*;
> >
> > /**
> >  * This class implements the SAX handler for class map documents.
> >  *
> >  * @author Christopher Elkins
> >  */
> > public class ClassMapLoader extends HandlerBase {
> >     private static final String ELEMENT_CLASSMAPS = "ClassMaps";
> >     private static final String ELEMENT_CLASSMAP = "ClassMap";
> >     private static final String ELEMENT_ATTRIBUTEMAP = "AttributeMap";
> >     private static final String ELEMENT_COLUMNMAP = "ColumnMap";
> >     private static final String ELEMENT_TABLEMAP = "TableMap";
> >     private static final String ATTRIBUTE_NAME = "Name";
> >     private static final String ATTRIBUTE_PROXY = "Proxy";
> >     private static final String ATTRIBUTE_PKEY = "PKey";
> >
> >     private ClassMap currentClassMap;
> >     private AttributeMap currentAttributeMap;
> >     private ColumnMap currentColumnMap;
> >     private TableMap currentTableMap;
> >     private Vector classMaps;
> >
> >     public ClassMapLoader() {
> > currentClassMap = null;
> > currentAttributeMap = null;
> > currentColumnMap = null;
> > currentTableMap = null;
> > classMaps = new Vector();
> >     }
> >
> >     public Vector load(InputStream source) throws Exception {
> > Parser parser =
> >     ParserFactory.makeParser("org.apache.xerces.parsers.SAXParser");
> > parser.setDocumentHandler(this);
> > parser.parse(new InputSource(source));
> > return classMaps;
> >     }
> >
> >     public void startElement(String name, AttributeList atts)
> > throws SAXException
> >     {
> > if (name.equals(ELEMENT_CLASSMAP)) {
> >     ClassMap classMap = new ClassMap(atts.getValue(ATTRIBUTE_NAME));
> >     currentClassMap = classMap;
> > } else if (name.equals(ELEMENT_ATTRIBUTEMAP)) {
> >     AttributeMap attributeMap =
> > new AttributeMap(atts.getValue(ATTRIBUTE_NAME));
> >     ColumnMap columnMap = new ColumnMap();
> >     attributeMap.setColumnMap(columnMap);
> >
> >     Boolean isPrimaryKey =
> > Boolean.valueOf(atts.getValue(ATTRIBUTE_PKEY));
> >     columnMap.setIsKeyColumn(isPrimaryKey.booleanValue());
> >     // FIXME: not currently defined in XML schema
> >     file://columnMap.setType();
> >
> >     currentAttributeMap = attributeMap;
> >     currentColumnMap = columnMap;
> > } else if (name.equals(ELEMENT_COLUMNMAP)) {
> >     currentColumnMap.setName(atts.getValue(ATTRIBUTE_NAME));
> > } else if (name.equals(ELEMENT_TABLEMAP)) {
> >     TableMap tableMap = new TableMap(atts.getValue(ATTRIBUTE_NAME));
> >     currentTableMap = tableMap;
> > }
> >     }
> >
> >     public void endElement(String name) throws SAXException {
> > if (name.equals(ELEMENT_CLASSMAP)) {
> >     classMaps.addElement(currentClassMap);
> >     currentClassMap = null;
> > } else if (name.equals(ELEMENT_ATTRIBUTEMAP)) {
> >     currentClassMap.addAttributeMap(currentAttributeMap);
> >     currentAttributeMap = null;
> > } else if (name.equals(ELEMENT_COLUMNMAP)) {
> >     currentColumnMap = null;
> > } else if (name.equals(ELEMENT_TABLEMAP)) {
> >     currentColumnMap.setTableMap(currentTableMap);
> >     currentTableMap = null;
> > }
> >     }
> > }
> >
> > ---
> > Index: PersistenceBroker.java
> > ===================================================================
> > RCS file:
> /products/cvs/turbine/turbine/src/java/org/apache/turbine/opl/database/Persi
> stenceBroker.java,v
> > retrieving revision 1.24
> > diff -c -r1.24 PersistenceBroker.java
> > *** PersistenceBroker.java 2000/01/15 00:00:54 1.24
> > --- PersistenceBroker.java 2000/01/21 20:13:04
> > ***************
> > *** 56,61 ****
> > --- 56,62 ----
> >    */
> >
> >   // JDK Classe
> > + import java.io.*;
> >   import java.sql.*;
> >   import java.util.*;
> >
> > ***************
> > *** 332,338 ****
> >
> >       public int retrieveClassMaps()
> >       {
> > !         return 0;
> >       }
> >
> >       // FIXME! Maybe this should be private.  It's public to facilitate
> > --- 333,353 ----
> >
> >       public int retrieveClassMaps()
> >       {
> > ! try {
> > !     ClassMapLoader classMapLoader = new ClassMapLoader();
> > !
> > !     // FIXME: Need to read the XML mapping document here
> > !     InputStream is = null;
> > !     Vector classMaps = classMapLoader.load(is);
> > !
> > !     Enumeration e = classMaps.elements();
> > !     while (e.hasMoreElements()) {
> > ! addClassMap((ClassMap)e.nextElement());
> > !     }
> > !     return 1;
> > ! } catch (Exception e) {
> > !     return 0;
> > ! }
> >       }
> >
> >       // FIXME! Maybe this should be private.  It's public to facilitate
> >
> >
> > ------------------------------------------------------------
> > To subscribe:        [EMAIL PROTECTED]
> > To unsubscribe:      [EMAIL PROTECTED]
> > Problems?:           [EMAIL PROTECTED]
> >
> 
> ------------------------------------------------------------
> To subscribe:        [EMAIL PROTECTED]
> To unsubscribe:      [EMAIL PROTECTED]
> Problems?:           [EMAIL PROTECTED]


------------------------------------------------------------
To subscribe:        [EMAIL PROTECTED]
To unsubscribe:      [EMAIL PROTECTED]
Problems?:           [EMAIL PROTECTED]

Reply via email to