Hi Christopher,

This is indeed a bug in OWLIM-Lite - the same thing happens when OWLIM is used locally.

Strangely, calling clear() with a context seems to work correctly, it is only calling it with no parameters that causes the number returned from size() to jump up.

I have added it to our bug tracker and plan to have it fixed for the next release of owlim, ~end of june.

Thanks for reporting it.

barry

On 15/05/12 17:12, Lott, Christopher M wrote:
I am working with owlim-lite-5.0.5001 accessed as a remote HTTP repository using Sesame 
2.6.5. I noticed that invoking the clear method doesn't seem to clear things out; in fact 
on a new repository, the size *increases* after I call the clear method.  This seems to 
be a consequence of using RDFS reasoning rules, because if I use a repository with 
"empty" rule set, the size behaves the same as an in-memory or MySQL 
repository, namely that clear() returns it to zero.  Would someone please explain?

I've attached a program that demonstrates the behavior.  Also see below for the 
transcript of using the sesame console application to create an empty 
repository on which I ran the program.

---

import org.openrdf.model.Resource;
import org.openrdf.model.URI;
import org.openrdf.model.ValueFactory;
import org.openrdf.model.vocabulary.RDF;
import org.openrdf.repository.Repository;
import org.openrdf.repository.RepositoryConnection;
import org.openrdf.repository.http.HTTPRepository;
import org.openrdf.repository.sail.SailRepository;
import org.openrdf.sail.memory.MemoryStore;
import org.openrdf.sail.rdbms.mysql.MySqlStore;

/**
  * Tests Sesame repository implementation of size method. On an in-memory or a
  * MySQL repository, after calling the clear() method the size() method returns
  * zero. On a remote Owlim repository that uses rule-set "rdfs", after calling
  * clear() the size() method returns a number larger than before the clear().
  *
  * @author clott
  */
public class TestAddRemoveClear {

        /**
         * Arguments control which repository implementation is used. Invoke 
with:
         *<UL>
        *<LI>1 argument: the URI of a remote repository
         *<LI>4 arguments: the host name, database name, user name and password 
for
         * a MySQL repository
         *<LI>Other argument count: ignores arguments, uses an in-memory
         * repository.
         *</UL>
        *
         * @param args
         */
        public static void main(String[] args) {

                try {
                        // Get started
                        Repository repo = null;
                        if (args.length == 4) {
                                System.out.println("Using mysql repository on host 
" + args[0]);
                                MySqlStore sqlStore = new MySqlStore(args[1]);
                                sqlStore.setServerName(args[0]);
                                sqlStore.setPortNumber(3306);
                                sqlStore.setUser(args[2]);
                                sqlStore.setPassword(args[3]);
                                repo = new SailRepository(sqlStore);
                        } else if (args.length == 1) {
                                System.out.println("Using remote repository at 
" + args[0]);
                                repo = new HTTPRepository(args[0]);
                        } else {
                                System.out.println("Creating an in-memory Sail 
repository");
                                repo = new SailRepository(new MemoryStore());
                        }

                        // Init the repo and connect
                        System.out.println("Initializating and connecting");
                        repo.initialize();
                        RepositoryConnection con = repo.getConnection();

                        // Get the initial size
                        Long beforeSize = con.size();
                        System.out.println("Size at start is " + beforeSize);

                        // Create some resources and literals to use in 
statements
                        ValueFactory f = repo.getValueFactory();
                        String namespace = "http://example.org/ontology#";;
                        URI personClassUri = f.createURI(namespace + "Person");

                        // Add the entity
                        System.out.println("Adding entity of type Person");
                        Resource entity = f.createBNode();
                        con.add(entity, RDF.TYPE, personClassUri);

                        // Get the modified size
                        Long modSize = con.size();
                        System.out.println("Size after add is " + modSize);

                        // Remove the newly added statements
                        System.out.println("Removing the newly added entity");
                        con.remove(entity, RDF.TYPE, personClassUri);

                        long afterSize = con.size();
                        System.out.println("Size after remove is " + afterSize);

                        System.out.println("Clearing repo");
                        con.clear();

                        long clearSize = con.size();
                        System.out.println("Size after clear is " + clearSize);

                        // Drop connection and release the lock on the 
repository
                        System.out.println("Closing connection and shutting 
down");
                        con.close();
                        repo.shutDown();
                } catch (Exception ex) {
                        ex.printStackTrace();
                }
        }
}

---

$ openrdf-sesame-2.6.5/bin/console.sh
11:03:59.830 [main] DEBUG info.aduna.platform.PlatformFactory - os.name = linux
11:03:59.834 [main] DEBUG info.aduna.platform.PlatformFactory - Detected Posix 
platform
Connected to default data directory

Commands end with '.' at the end of a line
Type 'help.' for help
connect http://localhost:8080/openrdf-sesame  .
Disconnecting from default data directory
Connected to http://localhost:8080/openrdf-sesame
create owlim-lite .
Please specify values for the following variables:
Repository ID [owlim-lite-test]: lott
Repository title [OWLIM-Lite test repository]: Lott rdfs
Storage folder [storage]:
Rule-set [owl-horst-optimized]: rdfs
Base URL [http://example.org/owlim#]:
Entity index size [200000]:
No Persistence [false]:
Imported RDF files(';' delimited):
Default namespaces for imports(';' delimited):
Repository created
quit .
Disconnecting from http://localhost:8080/openrdf-sesame
Bye

_______________________________________________
Owlim-discussion mailing list
[email protected]
http://ontomail.semdata.org/cgi-bin/mailman/listinfo/owlim-discussion
_______________________________________________
Owlim-discussion mailing list
[email protected]
http://ontomail.semdata.org/cgi-bin/mailman/listinfo/owlim-discussion

Reply via email to