/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* This file includes contributions by:
* (c) Copyright 2003, Plugged In Software
* See end of file for BSD-style license.
*/
package org.apache.jena.rdfxml.xmlinput;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import org.apache.jena.rdfxml.xmlinput.impl.RDFXMLParser ;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
/** Another RDF Parser.
* To load an RDF file:
* <ol>
* <li>Create an ARP.</li>
* <li>Set its handlers, by calling the {@link #getHandlers}
* method, and then.</li>
* <ul>
* <li>Setting the statement handler.</li>
* <li>Optionally setting the other handlers.</li>
* </ul>
*
* </li>
* <li>Call a load method.</li>
* </ol>
* <p>
* Xerces is used for parsing the XML.
* The SAXEvents generated by Xerces are then
* analysed as RDF by ARP.
* Errors may occur
* in either the XML or the RDF part, see
* {@link ARPHandlers#setErrorHandler} for details
* of how to distinguish between them.</p>
* <p>
* For very large files, ARP does not use any additional
* memory except when either the {@link ExtendedHandler#discardNodesWithNodeID}
* returns false or when the {@link AResource#setUserData} method has been
* used. In these cases ARP needs to remember the <code>rdf:nodeID</code>
* usage through the file life time. </p>
* <p>See <a href="/documentation/io/index.html">ARP documentation</a> for more information.</p>
* Includes contributions from Simon Raboczi and Andrew Newman
*/
public class ARP implements ARPConfig
{
final private RDFXMLParser arpf;
/** Creates a new RDF Parser.
* Can parse one file at a time.
*/
public ARP() {
arpf = RDFXMLParser.create();
}
/**
* When parsing a file, this returns a Locator giving the
* position of the last XML event processed by ARP.
* This may return null or misleading results before any
* tokens have been processed.
* @return Locator
*/
public Locator getLocator() {
return arpf.getLocator();
}
/** Load RDF/XML from a Reader.
* @param in The input XML document.
* @param xmlBase The base URI for the document.
* @throws SAXException More serious error during XML or RDF processing; or thrown from the ErrorHandler.
* @throws IOException Occurring during XML processing.
*/
public void load(Reader in,String xmlBase) throws SAXException, IOException {
InputSource inputS = new InputSource(in);
inputS.setSystemId(xmlBase);
// arpf.initParse(xmlBase,"");
arpf.parse(inputS);
}
void load(InputSource is) throws SAXException, IOException {
// arpf.initParse("","");
arpf.parse(is);
}
/** Load RDF/XML from an InputStream.
* @param in The input XML document.
* @param xmlBase The base URI for the document.
* @throws SAXException More serious error during XML or RDF processing; or thrown from the ErrorHandler.
* @throws IOException Occurring during XML processing.
*/
public void load(InputStream in,String xmlBase) throws SAXException,
IOException {
//load(new InputStreamReader(in),xmlBase);
InputSource inputS = new InputSource(in);
inputS.setSystemId(xmlBase);
// arpf.initParse(xmlBase,"");
arpf.parse(inputS, xmlBase);
}
/** Load RDF/XML from an InputStream, leaving relative URIs as relative.
* @param in The input XML document.
* @throws SAXException More serious error during XML or RDF processing; or thrown from the ErrorHandler.
* @throws IOException Occurring during XML processing.
*/
public void load(InputStream in)
throws SAXException, IOException {
load(in,"");
}
/** Load RDF/XML from a Reader, leaving relative URIs as relative.
* @param in The input XML document.
* @throws SAXException More serious error during XML or RDF processing; or thrown from the ErrorHandler.
* @throws IOException Occurring during XML processing.
*/
public void load(Reader in) throws SAXException, IOException {
load(in,"");
}
/**
* The handlers used during parsing.
* The handlers can be changed by calling this method
* and then using the <code>set..Handler</code> methods
* in {@link ARPHandlers}.
* The handlers can be copied onto another ARP instance
* using the {@link #setHandlersWith} method.
* @see ARPHandlers#setStatementHandler(StatementHandler)
* @see ARPHandlers#setErrorHandler(ErrorHandler)
* @see ARPHandlers#setExtendedHandler(ExtendedHandler)
* @see ARPHandlers#setNamespaceHandler(NamespaceHandler)
* @see #setHandlersWith
* @return The handlers used during parsing.
*/
@Override
public ARPHandlers getHandlers() {
return arpf.getHandlers();
}
/**
* Copies the handlers from the argument
* to be used by this instance.
* To make further modifications it is necessary
* to call {@link #getHandlers} to retrieve this
* instance's copy of the handler information.
* @param handlers The new values to use.
*/
@Override
public void setHandlersWith(ARPHandlers handlers){
arpf.setHandlersWith(handlers);
}
/**
* The options used during parsing.
* The options can be changed by calling this method
* and then using the <code>set..</code> methods
* in {@link ARPOptions}.
* The options can be copied onto another ARP instance
* using the {@link #setOptionsWith} method.
* @see ARPOptions#setDefaultErrorMode()
* @see ARPOptions#setLaxErrorMode()
* @see ARPOptions#setStrictErrorMode()
* @see ARPOptions#setStrictErrorMode(int)
* @see ARPOptions#setEmbedding(boolean)
* @see ARPOptions#setErrorMode(int, int)
*
* @see #setOptionsWith
* @return The handlers used during parsing.
*/
@Override
public ARPOptions getOptions(){
return arpf.getOptions();
}
/**
* Copies the options from the argument
* to be used by this instance.
* To make further modifications it is necessary
* to call {@link #getOptions} to retrieve this
* instance's copy of the options.
* @param opts The new values to use.
*/
@Override
public void setOptionsWith(ARPOptions opts){
arpf.setOptionsWith(opts);
}
void setBadStatementHandler(StatementHandler sh) {
arpf.setBadStatementHandler(sh);
}
}
/*
* (c) Copyright 2003, Plugged In Software
*
* 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. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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.
*/