cashew-s-auto
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Cashew-s-auto] Changes to cashews/src/nongnu/cashews/rdf/XMLParser.java


From: Andrew John Hughes
Subject: [Cashew-s-auto] Changes to cashews/src/nongnu/cashews/rdf/XMLParser.java
Date: Fri, 08 Apr 2005 21:29:48 -0400

Index: cashews/src/nongnu/cashews/rdf/XMLParser.java
diff -u cashews/src/nongnu/cashews/rdf/XMLParser.java:1.6 
cashews/src/nongnu/cashews/rdf/XMLParser.java:1.7
--- cashews/src/nongnu/cashews/rdf/XMLParser.java:1.6   Tue Apr  5 16:48:53 2005
+++ cashews/src/nongnu/cashews/rdf/XMLParser.java       Sat Apr  9 01:29:47 2005
@@ -32,11 +32,12 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import nongnu.cashews.xml.XmlBaseHandler;
+
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 import org.xml.sax.XMLReader;
-import org.xml.sax.helpers.DefaultHandler;
 import org.xml.sax.helpers.XMLReaderFactory;
 
 /**
@@ -70,7 +71,14 @@
    * @serial the graph of RDF triples.
    */
   private Graph graph;
-  
+
+  /**
+   * The handler for the XML.
+   *
+   * @serial the XML handler.
+   */
+  private RDFHandler rdfHandler;
+
   /**
    * Constructs a new XML-based RDF parser, using the specified handler
    * for messages.
@@ -82,8 +90,9 @@
   public XMLParser(Handler handler)
     throws SAXException
   {
-    reader = XMLReaderFactory.createXMLReader();    
-    reader.setContentHandler(new RDFHandler(handler));
+    reader = XMLReaderFactory.createXMLReader();
+    rdfHandler = new RDFHandler(handler);
+    reader.setContentHandler(rdfHandler);
   }
 
   /**
@@ -97,9 +106,7 @@
   public Graph parse(String systemId)
     throws IOException, SAXException
   {
-    graph = new Graph();
-    reader.parse(systemId);
-    return graph;
+    return parse(new InputSource(systemId));
   }
 
   /**
@@ -114,6 +121,7 @@
     throws IOException, SAXException
   {
     graph = new Graph();
+    rdfHandler.setBaseURI(source.getSystemId());
     reader.parse(source);
     return graph;
   }
@@ -160,14 +168,14 @@
    * @author Andrew John Hughes (address@hidden)
    */
   private class RDFHandler
-    extends DefaultHandler
+    extends XmlBaseHandler
   {
 
     /**
      * A <code>Logger</code> instance to log events generated by the
      * parsing process.
      */
-    private Logger logger;
+    private Logger rdfLogger;
 
     /**
      * Flag to indicate whether we are inside an RDF document
@@ -230,9 +238,10 @@
      */
     public RDFHandler(Handler handler)
     {
-      logger = Logger.getLogger("nongnu.cashews.rdf.XMLParser");
-      logger.addHandler(handler);
-      logger.setLevel(handler.getLevel());
+      super(handler);
+      rdfLogger = Logger.getLogger("nongnu.cashews.rdf.XMLParser");
+      rdfLogger.addHandler(handler);
+      rdfLogger.setLevel(handler.getLevel());
     }
 
     /**
@@ -241,6 +250,7 @@
      */
     public void startDocument()
     {
+      super.startDocument();
       inSubject = false;
       inRDF = false;
       inPredicate = false;
@@ -263,18 +273,19 @@
                             String qName, Attributes attributes)
       throws SAXException
     {
+      super.startElement(uri, localName, qName, attributes);
       if (uri.equals(RDF_NAMESPACE))
        {
          if (localName.equals("RDF"))
            {
              /* rdf:RDF */
              inRDF = true;
-             logger.finer("Start of RDF block");
+             rdfLogger.finer("Start of RDF block");
            }
          else if (localName.equals("Description"))
            {
              /* rdf:Description */
-             logger.finer("Start of RDF description block");
+             rdfLogger.finer("Start of RDF description block");
              inRDF = true;
              if (!inSubject)
                {
@@ -289,13 +300,14 @@
                      if (value != null)
                        subject = new Blank(value);
                      else
-                       logger.warning("No subject found in RDF description.");
+                       rdfLogger.warning("No subject found in RDF " + 
+                                         "description.");
                    }
                  inSubject = true;
-                 logger.fine("Created subject: " + subject);
+                 rdfLogger.fine("Created subject: " + subject);
                }
              else
-               logger.warning("Invalid use of RDF namespace: " + uri +
+               rdfLogger.warning("Invalid use of RDF namespace: " + uri +
                               localName);
            }
        }
@@ -307,9 +319,9 @@
                {
                  /* Predicate element */
                  predicateURI = uri + localName;
-                 logger.finer("Start of predicate: " + predicateURI);
+                 rdfLogger.finer("Start of predicate: " + predicateURI);
                  predicate = parseRDFURI(predicateURI);
-                 logger.fine("Created predicate: " + predicate);
+                 rdfLogger.fine("Created predicate: " + predicate);
                  inSubject = false;
                  inPredicate = true;
                  /* Check for RDF URI object */
@@ -318,7 +330,7 @@
                  if (value != null)
                    {
                      object = parseRDFURI(value);
-                     logger.fine("Created object: " + object);
+                     rdfLogger.fine("Created object: " + object);
                    }
                  else
                    {
@@ -327,7 +339,7 @@
                      if (value != null)
                        {
                          object = new Blank(value);
-                         logger.fine("Created object: " + object);
+                         rdfLogger.fine("Created object: " + object);
                        }
                    }
                  /* Check for a type */
@@ -371,17 +383,18 @@
     public void characters(char[] ch, int start, int length)
       throws SAXException
     {
+      super.characters(ch, start, length);
       String value = new String(ch, start, length).trim();
       if (value.length() == 0)
        return;
-      logger.finer("Characters: " + value);
+      rdfLogger.finer("Characters: " + value);
       if (inPredicate)
        {
          if (type == null)
            object = new Literal(value);
          else
            object = new Literal(value, type);
-         logger.fine("Created object: " + object);
+         rdfLogger.fine("Created object: " + object);
        }
     }
 
@@ -399,16 +412,17 @@
                           String qName)
       throws SAXException
     {
+      super.endElement(uri, localName, qName);
       if (uri.equals(RDF_NAMESPACE))
        {
          if (localName.equals("RDF"))
            {
              inRDF = false;
-             logger.finer("End of RDF block");
+             rdfLogger.finer("End of RDF block");
            }
          else if (localName.equals("Description"))
            {
-             logger.finer("End of description block");
+             rdfLogger.finer("End of description block");
              inSubject = false;
            }
        }
@@ -419,9 +433,9 @@
        predicateURI = null;
        type = null;
        triple = new Triple(subject, predicate, object);
-       logger.fine("Created triple: " + triple);
+       rdfLogger.fine("Created triple: " + triple);
        graph.addTriple(triple);
-       logger.finer("End of predicate block");
+       rdfLogger.finer("End of predicate block");
       }
     }
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]