001 /*
002 * (c) Copyright 2010 University of Bristol
003 * All rights reserved.
004 * [See end of file]
005 */
006
007 package net.rootdev.javardfa.output;
008
009 import java.io.IOException;
010 import java.util.HashMap;
011 import java.util.Map;
012 import net.rootdev.javardfa.ParserFactory;
013 import net.rootdev.javardfa.ParserFactory.Format;
014 import net.rootdev.javardfa.StatementSink;
015 import org.xml.sax.InputSource;
016 import org.xml.sax.SAXException;
017 import org.xml.sax.XMLReader;
018
019 /**
020 *
021 * @author pldms
022 */
023 public class OGPReader implements StatementSink {
024
025 static final String NS = "http://opengraphprotocol.org/schema/";
026 static final int NSlen = NS.length();
027 private String base;
028 private final Map<String, String> content = new HashMap<String, String>();
029
030 public void start() {}
031
032 public void end() {}
033
034 public void addObject(String subject, String predicate, String object) {
035 collect(subject, predicate, object);
036 }
037
038 public void addLiteral(String subject, String predicate, String lex, String lang, String datatype) {
039 collect(subject, predicate, lex);
040 }
041
042 public void addPrefix(String prefix, String uri) {}
043
044 public void setBase(String base) {
045 this.base = base;
046 }
047
048 private void collect(String subject, String predicate, String value) {
049 if (!subject.equals(base)) return;
050 if (predicate.startsWith(NS)) content.put(predicate.substring(NSlen), value);
051 else content.put(predicate, value);
052 }
053
054 public Map<String, String> getContent() { return content; }
055
056 /**
057 * A rudimentary Open Graph Protocol parser
058 * @param url Source to parse
059 * @param format HTML or XHTML
060 * @return Map from key to value. For OGP properties the key is simple (e.g. email)
061 * @throws SAXException
062 * @throws IOException
063 */
064 public static Map<String, String> getOGP(String url, Format format) throws SAXException, IOException {
065 OGPReader reader = new OGPReader();
066 XMLReader parser = ParserFactory.createReaderForFormat(reader, format);
067 parser.parse(new InputSource(url));
068 return reader.getContent();
069 }
070
071 }
072
073 /*
074 * (c) Copyright 2010 University of Bristol
075 * All rights reserved.
076 *
077 * Redistribution and use in source and binary forms, with or without
078 * modification, are permitted provided that the following conditions
079 * are met:
080 * 1. Redistributions of source code must retain the above copyright
081 * notice, this list of conditions and the following disclaimer.
082 * 2. Redistributions in binary form must reproduce the above copyright
083 * notice, this list of conditions and the following disclaimer in the
084 * documentation and/or other materials provided with the distribution.
085 * 3. The name of the author may not be used to endorse or promote products
086 * derived from this software without specific prior written permission.
087 *
088 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
089 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
090 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
091 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
092 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
093 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
094 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
095 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
096 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
097 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
098 */