com.bigdata.rdf.axioms.TestAxioms Maven / Gradle / Ivy
Show all versions of bigdata-rdf-test Show documentation
/**
Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016. All rights reserved.
Contact:
SYSTAP, LLC DBA Blazegraph
2501 Calvert ST NW #106
Washington, DC 20008
[email protected]
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
* Created on Nov 6, 2007
*/
package com.bigdata.rdf.axioms;
import java.util.Iterator;
import java.util.Properties;
import org.openrdf.model.vocabulary.OWL;
import org.openrdf.model.vocabulary.RDF;
import com.bigdata.io.SerializerUtil;
import com.bigdata.rdf.model.BigdataStatement;
import com.bigdata.rdf.model.BigdataURI;
import com.bigdata.rdf.model.BigdataValue;
import com.bigdata.rdf.model.BigdataValueFactory;
import com.bigdata.rdf.spo.SPO;
import com.bigdata.rdf.store.AbstractTripleStore;
import com.bigdata.rdf.store.AbstractTripleStoreTestCase;
import com.bigdata.rdf.store.AbstractTripleStore.Options;
/**
* Test suite for the {@link Axioms}.
*
* Note: {@link BaseAxioms} required an {@link AbstractTripleStore} to convert
* the {@link BigdataStatement} objects into {@link SPO}s. This makes it
* impossible to unit test the axioms classes independent of the
* {@link AbstractTripleStore}.
*
* @author Bryan Thompson
*/
public class TestAxioms extends AbstractTripleStoreTestCase {
/**
*
*/
public TestAxioms() {
super();
}
/**
* @param name
*/
public TestAxioms(String name) {
super(name);
}
/**
* Unit test of the constructors for the axiom classes. This does not test
* serialization because that uses {@link SPO} objects which are only
* created when we write on the {@link AbstractTripleStore}.
*/
public void test_ctor_NoAxioms() {
new NoAxioms(getName());
}
/**
* Unit test of the constructors for the axiom classes. This does not test
* serialization because that uses {@link SPO} objects which are only
* created when we write on the {@link AbstractTripleStore}.
*/
public void test_ctor_RDFSAxioms() {
new RdfsAxioms(getName());
}
public void test_NoAxioms() {
Properties properties = getProperties();
// override the default axiom model.
properties.setProperty(Options.AXIOMS_CLASS, NoAxioms.class.getName());
AbstractTripleStore store = getStore(properties);
try {
// // store is empty.
// assertEquals(0, store.getStatementCount());
final BigdataValueFactory f = store.getValueFactory();
// Must be using the same namespace.
assertEquals(store.getAxioms().getNamespace(), f.getNamespace());
final BigdataURI rdfType = f.asValue(RDF.TYPE);
final BigdataURI rdfProperty = f.asValue(RDF.PROPERTY);
final BigdataURI unknownURI = f.createURI("http://www.bigdata.com/unknown");
// resolve term ids.
store.addTerms(new BigdataValue[] { rdfType, rdfProperty, unknownURI });
// final NoAxioms axioms = new NoAxioms(store);
//
// axioms.init();
final NoAxioms axioms = (NoAxioms)store.getAxioms();
final int naxioms = axioms.size();
// the model does not define any axioms.
assertEquals(0,naxioms);
// store contains the axioms.
assertEquals(naxioms, store.getStatementCount());
// point test for an axiom NOT defined by this model.
assertFalse(axioms.isAxiom(rdfType.getIV(), rdfType.getIV(),
rdfProperty.getIV()));
// point test for an axiom NOT defined by this model.
assertFalse(axioms.isAxiom(rdfType.getIV(), rdfType.getIV(),
unknownURI.getIV()));
{
// verify (de-)serialization.
final Axioms axioms2 = doRoundTripTest(axioms);
// point test for an axiom NOT defined by this model.
assertFalse(axioms2.isAxiom(rdfType.getIV(), rdfType.getIV(),
rdfProperty.getIV()));
// point test for an axiom NOT defined by this model.
assertFalse(axioms2.isAxiom(rdfType.getIV(), rdfType.getIV(),
unknownURI.getIV()));
}
if (store.isStable()) {
store = reopenStore(store);
final NoAxioms axioms2 = (NoAxioms)store.getAxioms();
assertSameAxioms(axioms, axioms2);
// point test for an axiom NOT defined by this model.
assertFalse(axioms2.isAxiom(rdfType.getIV(), rdfType.getIV(),
rdfProperty.getIV()));
// point test for an axiom NOT defined by this model.
assertFalse(axioms2.isAxiom(rdfType.getIV(), rdfType.getIV(),
unknownURI.getIV()));
}
} finally {
store.__tearDownUnitTest();
}
}
public void test_RdfsAxioms() {
Properties properties = getProperties();
// override the default axiom model.
properties.setProperty(Options.AXIOMS_CLASS, RdfsAxioms.class.getName());
AbstractTripleStore store = getStore(properties);
try {
// // store is empty.
// assertEquals(0, store.getStatementCount());
final BigdataValueFactory f = store.getValueFactory();
final BigdataURI rdfType = f.asValue(RDF.TYPE);
final BigdataURI rdfProperty = f.asValue(RDF.PROPERTY);
final BigdataURI unknownURI = f.createURI("http://www.bigdata.com/unknown");
// resolve term ids.
store.addTerms(new BigdataValue[] { rdfType, rdfProperty, unknownURI });
final RdfsAxioms axioms = (RdfsAxioms)store.getAxioms();
final int naxioms = axioms.size();
// store contains the axioms.
assertEquals(naxioms, store.getStatementCount());
// point test for an axiom.
assertTrue(axioms.isAxiom(rdfType.getIV(), rdfType.getIV(),
rdfProperty.getIV()));
// point test for NOT an axiom.
assertFalse(axioms.isAxiom(rdfType.getIV(), rdfType.getIV(),
unknownURI.getIV()));
// verify (de-)serialization.
{
final Axioms axioms2 = doRoundTripTest(axioms);
// point test for an axiom.
assertTrue(axioms2.isAxiom(rdfType.getIV(), rdfType.getIV(),
rdfProperty.getIV()));
// point test for NOT an axiom.
assertFalse(axioms2.isAxiom(rdfType.getIV(), rdfType.getIV(),
unknownURI.getIV()));
}
if (store.isStable()) {
store = reopenStore(store);
final RdfsAxioms axioms2 = (RdfsAxioms)store.getAxioms();
assertSameAxioms(axioms, axioms2);
// point test for an axiom.
assertTrue(axioms2.isAxiom(rdfType.getIV(), rdfType.getIV(),
rdfProperty.getIV()));
// point test for NOT an axiom.
assertFalse(axioms2.isAxiom(rdfType.getIV(), rdfType.getIV(),
unknownURI.getIV()));
}
} finally {
store.__tearDownUnitTest();
}
}
public void test_OwlAxioms() {
Properties properties = getProperties();
// override the default axiom model.
properties.setProperty(com.bigdata.rdf.store.AbstractTripleStore.Options.AXIOMS_CLASS, OwlAxioms.class.getName());
AbstractTripleStore store = getStore(properties);
try {
// // store is empty.
// assertEquals(0, store.getStatementCount());
final BigdataValueFactory f = store.getValueFactory();
final BigdataURI rdfType = f.asValue(RDF.TYPE);
final BigdataURI rdfProperty = f.asValue(RDF.PROPERTY);
final BigdataURI owlEquivalentClass = f.asValue(OWL.EQUIVALENTCLASS);
final BigdataURI unknownURI = f.createURI("http://www.bigdata.com/unknown");
// resolve term ids.
store.addTerms(new BigdataValue[] { rdfType, rdfProperty,
owlEquivalentClass, unknownURI });
final OwlAxioms axioms = (OwlAxioms)store.getAxioms();
final int naxioms = axioms.size();
// store contains the axioms.
assertEquals(naxioms, store.getStatementCount());
// point test for an RDFS axiom.
assertTrue(axioms.isAxiom(rdfType.getIV(), rdfType.getIV(),
rdfProperty.getIV()));
// point test for an OWL axiom.
assertTrue(axioms.isAxiom(owlEquivalentClass.getIV(), rdfType.getIV(),
rdfProperty.getIV()));
// point test for NOT an axiom.
assertFalse(axioms.isAxiom(rdfType.getIV(), rdfType.getIV(),
unknownURI.getIV()));
{
// verify (de-)serialization.
final Axioms axioms2 = doRoundTripTest(axioms);
// point test for an RDFS axiom.
assertTrue(axioms2.isAxiom(rdfType.getIV(), rdfType.getIV(),
rdfProperty.getIV()));
// point test for an OWL axiom.
assertTrue(axioms2.isAxiom(owlEquivalentClass.getIV(), rdfType.getIV(),
rdfProperty.getIV()));
// point test for NOT an axiom.
assertFalse(axioms2.isAxiom(rdfType.getIV(), rdfType.getIV(),
unknownURI.getIV()));
}
if (store.isStable()) {
store = reopenStore(store);
final OwlAxioms axioms2 = (OwlAxioms)store.getAxioms();
assertSameAxioms(axioms, axioms2);
// point test for an RDFS axiom.
assertTrue(axioms2.isAxiom(rdfType.getIV(), rdfType.getIV(),
rdfProperty.getIV()));
// point test for an OWL axiom.
assertTrue(axioms2.isAxiom(owlEquivalentClass.getIV(), rdfType.getIV(),
rdfProperty.getIV()));
// point test for NOT an axiom.
assertFalse(axioms2.isAxiom(rdfType.getIV(), rdfType.getIV(),
unknownURI.getIV()));
}
} finally {
store.__tearDownUnitTest();
}
}
/**
* Test (de-)serialization of an axioms model.
*
* @return The de-serialized axioms.
*/
protected Axioms doRoundTripTest(final Axioms expected) {
final byte[] data = SerializerUtil.serialize(expected);
final Axioms actual = (Axioms) SerializerUtil.deserialize(data);
assertSameAxioms(expected, actual);
return actual;
}
protected void assertSameAxioms(final Axioms expected, final Axioms actual) {
assertEquals("size", expected.size(), actual.size());
final Iterator itre = expected.axioms();
final Iterator itra = actual.axioms();
while (itre.hasNext()) {
assertTrue(itra.hasNext());
final SPO spoe = itre.next();
final SPO spoa = itra.next();
if(log.isInfoEnabled()) {
log.info(spoe.toString());
}
assertEquals(spoe, spoa);
}
assertFalse(itra.hasNext());
}
}