using System; using System.Data; using System.Configuration; //Ini Jena libraries using com.hp.hpl.jena.db; using com.hp.hpl.jena.rdf.model; using com.hp.hpl.jena.query; using ikvm.lang; using com.microsoft.sqlserver.jdbc; //Fin Jena libraries using System.Xml; using System.Xml.XPath; namespace wsGeoConceptsSemWebLayer { /// /// Allows the access to an RDF Persitence Model /// Relational DataBase Jena Persistence Model is used. /// public class JenaPersistenceRDB : IDisposable { #region Class variables Model modelRDF; IDBConnection connRDB; #endregion Class variables #region Private variables private bool IsDisposed = false; #endregion Private variables #region Constructor /// /// Creates a new JenaPersitenceRDF object. /// Connects to an SQL Server 2005 RDB: dbserver, db, dbuser, dbpassword /// It opens the Jena model with "modelName". If it doesn't exist, the model is created. /// /// Jena model Name /// Server url and instance /// Database name /// Datatabase user name /// Datababase user password public JenaPersistenceRDB(String modelName, String dbserver, String db, String dbuser, String dbpass) { String M_DB_URL = "jdbc:microsft:sqlserver://" + dbserver + ";databaseName=" + db; // database URL String M_DB_USER = dbuser; // database user id String M_DB_PASSWD = dbpass; // database user password String M_DB = "MsSQL"; // database engine try { M_DB_URL = "jdbc:sqlserver://" + dbserver + ";databaseName=" + db; // Following line has some problems with some versions of MS jdbc driver. //System.Activator.CreateInstance("sqldriver", "com.microsoft.sqlserver.jdbc.SQLServerDriver"); java.lang.Class.forName(typeof(com.microsoft.sqlserver.jdbc.SQLServerDriver).FullName); connRDB = new DBConnection(M_DB_URL, M_DB_USER, M_DB_PASSWD, M_DB); if (connRDB == null) { // Exception management } else { // create a model maker with the given connection parameters ModelMaker mkModel = ModelFactory.createModelRDBMaker(connRDB); if (!connRDB.containsModel(modelName)) { // create a new model modelRDF = mkModel.createModel(modelName); } else { // open a previously created model modelRDF = mkModel.openModel(modelName); } } } catch (Exception e) { throw (e); } } #endregion Constructor #region Destructor /// /// Close object's Database connection and Jena model /// public void CloseRDBConnection() { try { if (modelRDF != null && !modelRDF.isClosed()) modelRDF.close(); if (connRDB != null) connRDB.close(); } catch (Exception ex) { throw (ex); } } /// /// Close object's model /// public void CloseModel() { try { if (modelRDF != null && !modelRDF.isClosed()) modelRDF.close(); } catch (Exception ex) { throw (ex); } } /// /// Overrides standard Dispose method, to free open resources /// public void Dispose() { //Pass true in dispose method to clean managed resources too and say GC to skip finalize in next line. Dispose(true); //If dispose is called already then say GC to skip finalize on this instance. GC.SuppressFinalize(this); } /// /// Free open resources (Jena model and connection) /// /// protected virtual void Dispose(bool disposedStatus) { if (!IsDisposed) { IsDisposed = true; // Released unmanaged Resources if (disposedStatus) { CloseModel(); CloseRDBConnection(); } } } #endregion Destructor #region RDB Access Methods #endregion RDB Access Methods } }