001    /*
002     * (c) Copyright 2009 University of Bristol
003     * All rights reserved.
004     * [See end of file]
005     */
006    package net.rootdev.javardfa;
007    
008    import com.hp.hpl.jena.rdf.model.Model;
009    import com.hp.hpl.jena.rdf.model.RDFErrorHandler;
010    import com.hp.hpl.jena.rdf.model.RDFReader;
011    import com.hp.hpl.jena.rdf.model.impl.RDFReaderFImpl;
012    import java.io.IOException;
013    import java.io.InputStream;
014    import java.io.Reader;
015    import org.xml.sax.InputSource;
016    import org.xml.sax.SAXException;
017    import org.xml.sax.XMLReader;
018    
019    /**
020     * @author Damian Steer <pldms@mac.com>
021     */
022    
023    public class RDFaReader implements RDFReader {
024    
025        static {
026            RDFReaderFImpl.setBaseReaderClassName("HTML", HTMLRDFaReader.class.getName());
027            RDFReaderFImpl.setBaseReaderClassName("XHTML", XHTMLRDFaReader.class.getName());
028        }
029    
030        public static class HTMLRDFaReader extends RDFaReader {
031            @Override public XMLReader getReader() {
032                return ParserFactory.createHTML5Reader();
033            }
034    
035            @Override public void initParser(Parser parser) {
036                parser.enable(Setting.ManualNamespaces);
037            }
038        }
039    
040        public static class XHTMLRDFaReader extends RDFaReader {
041            @Override public XMLReader getReader() throws SAXException {
042                return ParserFactory.createNonvalidatingReader();
043            }
044        }
045    
046        private XMLReader xmlReader;
047    
048        public void read(Model arg0, Reader arg1, String arg2) {
049            this.runParser(arg0, arg2, new InputSource(arg1));
050        }
051    
052        public void read(Model arg0, InputStream arg1, String arg2) {
053            this.runParser(arg0, arg2, new InputSource(arg1));
054        }
055    
056        public void read(Model arg0, String arg1) {
057            this.runParser(arg0, arg1, new InputSource(arg1));
058        }
059    
060        public Object setProperty(String arg0, Object arg1) {
061            throw new UnsupportedOperationException("Not supported yet.");
062        }
063    
064        public RDFErrorHandler setErrorHandler(RDFErrorHandler arg0) {
065            throw new UnsupportedOperationException("Not supported yet.");
066        }
067    
068        public void setReader(XMLReader reader) { this.xmlReader = reader; }
069        public XMLReader getReader() throws SAXException { return xmlReader; }
070        public void initParser(Parser parser) { }
071    
072        private StatementSink getSink(Model arg0) {
073            return new JenaStatementSink(arg0);
074        }
075    
076        private void runParser(Model arg0, String arg2, InputSource source) {
077            StatementSink sink = getSink(arg0);
078            Parser parser = new Parser(sink);
079            parser.setBase(arg2);
080            initParser(parser);
081            try {
082                XMLReader xreader = getReader();
083                xreader.setContentHandler(parser);
084                xreader.parse(source);
085            } catch (IOException ex) {
086                throw new RuntimeException("IO Error when parsing", ex);
087            } catch (SAXException ex) {
088                throw new RuntimeException("SAX Error when parsing", ex);
089            }
090        }
091    
092    }
093    
094    /*
095     * (c) Copyright 2009 University of Bristol
096     * All rights reserved.
097     *
098     * Redistribution and use in source and binary forms, with or without
099     * modification, are permitted provided that the following conditions
100     * are met:
101     * 1. Redistributions of source code must retain the above copyright
102     *    notice, this list of conditions and the following disclaimer.
103     * 2. Redistributions in binary form must reproduce the above copyright
104     *    notice, this list of conditions and the following disclaimer in the
105     *    documentation and/or other materials provided with the distribution.
106     * 3. The name of the author may not be used to endorse or promote products
107     *    derived from this software without specific prior written permission.
108     *
109     * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
110     * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
111     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
112     * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
113     * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
114     * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
115     * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
116     * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
117     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
118     * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
119     */