001 /*
002 * (c) Copyright 2009 University of Bristol
003 * All rights reserved.
004 * [See end of file]
005 */
006 package net.rootdev.javardfa.jena;
007
008 import com.hp.hpl.jena.rdf.model.Literal;
009 import com.hp.hpl.jena.rdf.model.Model;
010 import com.hp.hpl.jena.rdf.model.Property;
011 import com.hp.hpl.jena.rdf.model.Resource;
012 import com.hp.hpl.jena.shared.PrefixMapping.IllegalPrefixException;
013 import java.util.HashMap;
014 import java.util.Map;
015 import net.rootdev.javardfa.StatementSink;
016 import org.slf4j.Logger;
017 import org.slf4j.LoggerFactory;
018
019 /**
020 * @author Damian Steer <pldms@mac.com>
021 */
022 public class JenaStatementSink implements StatementSink {
023
024 private static Logger log = LoggerFactory.getLogger(JenaStatementSink.class);
025 private final Model model;
026 private Map<String, Resource> bnodeLookup;
027
028 public JenaStatementSink(Model model) {
029 this.model = model;
030 }
031
032 //@Override
033 public void start() {
034 bnodeLookup = new HashMap<String, Resource>();
035 }
036
037 //@Override
038 public void end() {
039 bnodeLookup = null;
040 }
041
042 //@Override
043 public void addObject(String subject, String predicate, String object) {
044 Resource s = getResource(subject);
045 Property p = model.createProperty(predicate);
046 Resource o = getResource(object);
047 model.add(s, p, o);
048 }
049
050 //@Override
051 public void addLiteral(String subject, String predicate, String lex, String lang, String datatype) {
052 Resource s = getResource(subject);
053 Property p = model.createProperty(predicate);
054 Literal o;
055 if (lang == null && datatype == null) {
056 o = model.createLiteral(lex);
057 } else if (lang != null) {
058 o = model.createLiteral(lex, lang);
059 } else {
060 o = model.createTypedLiteral(lex, datatype);
061 }
062 model.add(s, p, o);
063 }
064
065 private Resource getResource(String res) {
066 if (res.startsWith("_:")) {
067 if (bnodeLookup.containsKey(res)) {
068 return bnodeLookup.get(res);
069 }
070 Resource bnode = model.createResource();
071 bnodeLookup.put(res, bnode);
072 return bnode;
073 } else {
074 return model.createResource(res);
075 }
076 }
077
078 public void addPrefix(String prefix, String uri) {
079 try {
080 model.setNsPrefix(prefix, uri);
081 } catch (IllegalPrefixException e) {
082 log.warn("Bad prefix, continuing.", e);
083 }
084 }
085
086 public void setBase(String base) {}
087 }
088
089 /*
090 * (c) Copyright 2009 University of Bristol
091 * All rights reserved.
092 *
093 * Redistribution and use in source and binary forms, with or without
094 * modification, are permitted provided that the following conditions
095 * are met:
096 * 1. Redistributions of source code must retain the above copyright
097 * notice, this list of conditions and the following disclaimer.
098 * 2. Redistributions in binary form must reproduce the above copyright
099 * notice, this list of conditions and the following disclaimer in the
100 * documentation and/or other materials provided with the distribution.
101 * 3. The name of the author may not be used to endorse or promote products
102 * derived from this software without specific prior written permission.
103 *
104 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
105 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
106 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
107 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
108 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
109 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
110 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
111 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
112 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
113 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
114 */