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 */