001: package org.ontoware.semversion;
002:
003: import static org.junit.Assert.assertEquals;
004: import static org.junit.Assert.assertNotNull;
005: import static org.junit.Assert.assertTrue;
006:
007: import java.io.File;
008:
009: import org.junit.Before;
010: import org.junit.Test;
011: import org.ontoware.rdf2go.model.Diff;
012: import org.ontoware.rdf2go.model.Model;
013: import org.ontoware.rdf2go.model.Statement;
014: import org.ontoware.rdf2go.model.impl.StatementImpl;
015: import org.ontoware.rdf2go.model.node.BlankNode;
016: import org.ontoware.rdf2go.model.node.URI;
017: import org.ontoware.rdf2go.model.node.impl.URIImpl;
018: import org.ontoware.rdf2go.vocabulary.RDFS;
019: import org.ontoware.semversion.impl.SyntacticDiffEngine;
020: import org.ontoware.semversion.impl.TripleStore;
021:
022: @SuppressWarnings("unused")
023: public class DiffTest {
024:
025: private SemVersion semVersion;
026:
027: URI a = new URIImpl("test://a");
028:
029: URI b = new URIImpl("test://b");
030:
031: URI c = new URIImpl("test://c");
032:
033: URI d = new URIImpl("test://d");
034:
035: @Before
036: public void setUp() throws Exception {
037: semVersion = new SemVersion();
038: semVersion.startup(new File("./target/test/DiffTest"));
039: semVersion.deleteStore();
040: semVersion.createUser("Sebastian", "secret");
041: semVersion.createUser("admin", "admin");
042: }
043:
044: @Test
045: public void testSyntacticDiff() throws Exception {
046: Session session = semVersion.login("Sebastian", "secret");
047: VersionedModel vm = session
048: .createVersionedModel("GeneOntology");
049: Model modelA = session.getModel();
050: modelA.addStatement(a, b, c);
051: Model modelB = session.getModel();
052: modelB.addStatement(b, c, d);
053:
054: Diff synDiff = SyntacticDiffEngine.getSyntacticDiff(modelA,
055: modelB);
056:
057: assertNotNull(synDiff.getAdded().iterator());
058: assertTrue(synDiff.getAdded().iterator().hasNext());
059: Statement added = synDiff.getAdded().iterator().next();
060: Statement removed = synDiff.getRemoved().iterator().next();
061: Statement expedtRemoved = new StatementImpl(modelA
062: .getContextURI(), a, b, c);
063:
064: assertEquals(removed.getSubject(), expedtRemoved.getSubject());
065: assertEquals(removed.getPredicate(), expedtRemoved
066: .getPredicate());
067: assertEquals(removed.getObject(), expedtRemoved.getObject());
068:
069: session.close();
070:
071: }
072:
073: @Test
074: public void testSemanticDiff() throws Exception {
075: Session session = semVersion.login("Sebastian", "secret");
076: VersionedModel vm = session
077: .createVersionedModel("GeneOntology");
078:
079: // ///////////////////
080: // A subclass B
081: // B subclass C
082: Model modelA = session.getModel();
083: modelA.addStatement(a, RDFS.subClassOf, b);
084: modelA.addStatement(b, RDFS.subClassOf, c);
085: // ///////////////////
086: // A subclass B
087: // B subclass C
088: // A subclass C
089: Model modelB = session.getModel();
090: modelB.addStatement(a, RDFS.subClassOf, b);
091: modelB.addStatement(b, RDFS.subClassOf, c);
092: modelB.addStatement(a, RDFS.subClassOf, c);
093:
094: // just for fun
095: Diff synDiff = SyntacticDiffEngine.getSyntacticDiff(modelA,
096: modelB);
097: synDiff.dump();
098:
099: // sem diff
100: Diff semDiff = SemanticDiffEngine.getSemanticDiff_RDFS(modelA,
101: modelB);
102: semDiff.dump();
103:
104: session.close();
105:
106: }
107:
108: @Test
109: public void testBlankNodeEnrichment() throws Exception {
110: Session session = semVersion.login("Sebastian", "secret");
111: VersionedModel vm = session
112: .createVersionedModel("GeneOntology");
113:
114: // ///////////////////
115: // A subclass B
116: // B subclass C
117: Model modelA = session.getModel();
118: BlankNode b1 = modelA.createBlankNode();
119: BlankNode b2 = modelA.createBlankNode();
120:
121: modelA.addStatement(a, RDFS.subClassOf, b1);
122: modelA.addStatement(b1, RDFS.subClassOf, c);
123: session.close();
124:
125: System.out.println("plain");
126: modelA.dump();
127:
128: TripleStore.bnodeEnrichment(modelA);
129:
130: System.out.println("enriched");
131: modelA.dump();
132:
133: // /////////////////////////
134:
135: }
136: }
|