001: /*****************************************************************************
002: * Source code information
003: * -----------------------
004: * Original author Ian Dickinson, HP Labs Bristol
005: * Author email ian.dickinson@hp.com
006: * Package Jena 2
007: * Web http://sourceforge.net/projects/jena/
008: * Created 25-Jul-2003
009: * Filename $RCSfile: PersistentOntology.java,v $
010: * Revision $Revision: 1.1 $
011: * Release status $State: Exp $
012: *
013: * Last modified on $Date: 2005/10/06 17:49:07 $
014: * by $Author: andy_seaborne $
015: *
016: * (c) Copyright 2002, 2003, 2004, 2005 Hewlett-Packard Development Company, LP
017: * (see footer for full conditions)
018: *****************************************************************************/package jena.examples.ontology.persistentOntology;
019:
020: // Imports
021: ///////////////
022: import java.util.*;
023:
024: import com.hp.hpl.jena.db.*;
025: import com.hp.hpl.jena.ontology.*;
026: import com.hp.hpl.jena.rdf.model.*;
027:
028: /**
029: * <p>
030: * Simple example of using the persistent db layer with ontology models. Assumes
031: * that a PostgreSQL database called 'jenatest' has been set up, for a user named ijd.
032: * </p>
033: *
034: * @author Ian Dickinson, HP Labs
035: * (<a href="mailto:Ian.Dickinson@hp.com" >email</a>)
036: * @version CVS $Id: PersistentOntology.java,v 1.1 2005/10/06 17:49:07 andy_seaborne Exp $
037: */
038: public class PersistentOntology {
039: // Constants
040: //////////////////////////////////
041:
042: // Static variables
043: //////////////////////////////////
044:
045: // Instance variables
046: //////////////////////////////////
047:
048: // Constructors
049: //////////////////////////////////
050:
051: // External signature methods
052: //////////////////////////////////
053:
054: public void loadDB(ModelMaker maker, String source) {
055: // use the model maker to get the base model as a persistent model
056: // strict=false, so we get an existing model by that name if it exists
057: // or create a new one
058: Model base = maker.createModel(source, false);
059:
060: // now we plug that base model into an ontology model that also uses
061: // the given model maker to create storage for imported models
062: OntModel m = ModelFactory.createOntologyModel(
063: getModelSpec(maker), base);
064:
065: // now load the source document, which will also load any imports
066: m.read(source);
067: }
068:
069: public void listClasses(ModelMaker maker, String modelID) {
070: // use the model maker to get the base model as a persistent model
071: // strict=false, so we get an existing model by that name if it exists
072: // or create a new one
073: Model base = maker.createModel(modelID, false);
074:
075: // create an ontology model using the persistent model as base
076: OntModel m = ModelFactory.createOntologyModel(
077: getModelSpec(maker), base);
078:
079: for (Iterator i = m.listClasses(); i.hasNext();) {
080: OntClass c = (OntClass) i.next();
081: System.out.println("Class " + c.getURI());
082: }
083: }
084:
085: public ModelMaker getRDBMaker(String dbURL, String dbUser,
086: String dbPw, String dbType, boolean cleanDB) {
087: try {
088: // Create database connection
089: IDBConnection conn = new DBConnection(dbURL, dbUser, dbPw,
090: dbType);
091:
092: // do we need to clean the database?
093: if (cleanDB) {
094: conn.cleanDB();
095: }
096:
097: // Create a model maker object
098: return ModelFactory.createModelRDBMaker(conn);
099: } catch (Exception e) {
100: e.printStackTrace();
101: System.exit(1);
102: }
103:
104: return null;
105: }
106:
107: public OntModelSpec getModelSpec(ModelMaker maker) {
108: // create a spec for the new ont model that will use no inference over models
109: // made by the given maker (which is where we get the persistent models from)
110: OntModelSpec spec = new OntModelSpec(OntModelSpec.OWL_MEM);
111: spec.setImportModelMaker(maker);
112:
113: return spec;
114: }
115:
116: // Internal implementation methods
117: //////////////////////////////////
118:
119: //==============================================================================
120: // Inner class definitions
121: //==============================================================================
122:
123: }
124:
125: /*
126: (c) Copyright 2002, 2003, 2004, 2005 Hewlett-Packard Development Company, LP
127: All rights reserved.
128:
129: Redistribution and use in source and binary forms, with or without
130: modification, are permitted provided that the following conditions
131: are met:
132:
133: 1. Redistributions of source code must retain the above copyright
134: notice, this list of conditions and the following disclaimer.
135:
136: 2. Redistributions in binary form must reproduce the above copyright
137: notice, this list of conditions and the following disclaimer in the
138: documentation and/or other materials provided with the distribution.
139:
140: 3. The name of the author may not be used to endorse or promote products
141: derived from this software without specific prior written permission.
142:
143: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
144: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
145: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
146: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
147: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
148: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
149: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
150: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
151: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
152: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
153: */
|