Fixing dependent resource delete. NIHVIVO-88

This commit is contained in:
bdc34 2010-03-22 17:09:18 +00:00
parent 513ddcdc43
commit 56ef6da161
5 changed files with 656 additions and 620 deletions

View file

@ -88,7 +88,6 @@ public class VitroVocabulary {
public static final String IMAGEFILE = vitroURI+"imageFile";
public static final String IMAGETHUMB = vitroURI+"imageThumb";
public static final String DEPENDENT_RESOURCE = vitroURI + "DependentResource";
// ================== property related =================================
public static final String PROPERTY_ENTITYSORTDIRECTION = vitroURI+"individualSortDirectionAnnot";
@ -106,8 +105,9 @@ public class VitroVocabulary {
public static final String PROPERTY_OFFERCREATENEWOPTIONANNOT = vitroURI+"offerCreateNewOptionAnnot";
public static final String PROPERTY_INPROPERTYGROUPANNOT = vitroURI+"inPropertyGroupAnnot";
public static final String PROPERTYGROUP = vitroURI + "PropertyGroup";
public static final String MASKS_PROPERTY = VitroVocabulary.vitroURI + "masksProperty";
public static final String SKIP_EDIT_FORM = VitroVocabulary.vitroURI + "skipEditForm";
public static final String MASKS_PROPERTY = vitroURI + "masksProperty";
public static final String SKIP_EDIT_FORM = vitroURI + "skipEditForm";
public static final String PROPERTY_DEPENDENCYPROPERTYANNOT = vitroURI + "dependencyPropertyAnnot";
// ================== keyword related ==================================

View file

@ -9,26 +9,49 @@ import java.util.List;
import java.util.ListIterator;
import java.util.Set;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.rdf.model.StmtIterator;
import com.hp.hpl.jena.vocabulary.RDF;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
/**
* This class handles deletion of resources based on the annotation vitro:dependentResourceAnnot.
*
* The vitro:dependentResourceAnnot
*
* For example, take a graph like:
*
* ex:bob ex:hasPositionHistory ex:positionHistory23 .
* ex:positionHistory23 ex:hasTitle "position 23 was great" .
* ex:hasPositionHistory vitro.dependentResourceAnnot "true"^^xsd:boolean .
*
* When the object property statement ex:bob ex:hasPositionHistory ex:positioinHisroty23 is
* deleted, then everything about ex:positionHistory23 should be deleted because
* ex:hasPositionHistory is a dependent resource property.
*
* @author bdc34
*
*/
public class DependentResourceDeleteJena {
public static List<Statement> getDependentResourceDeleteList ( Statement stmt, Model model){
if( model == null ) throw new IllegalArgumentException("model must not be null.");
return getDependentResourceDeleteList(stmt, model, new HashSet<String>());
return getDependentResourceDeleteList(stmt, model, new HashSet<String>(), false);
}
public static List<Statement> getDependentResourceDeleteList (RDFNode node, Model model){
if( model == null ) throw new IllegalArgumentException("model must not be null.");
return getDependentResourceDeleteList(node, model, new HashSet<String>());
public static List<Statement> getDependentResourceDeleteList(Resource deleteMe, Model sourceModel) {
List<Statement> deletes = new LinkedList<Statement>();
for( Statement stmt : getAllStatements(deleteMe, sourceModel)){
deletes.add(stmt);
deletes.addAll(getDependentResourceDeleteList(stmt, sourceModel, new HashSet<String>(), false));
}
return deletes;
}
public static Model getDependentResourceDeleteForChange( Model assertions, Model retractions, Model sourceModel){
@ -103,55 +126,29 @@ public class DependentResourceDeleteJena {
return toRemove;
}
private static List<Statement> getDependentResourceDeleteList ( Statement stmt, Model model, Set<String> visitedUris){
private static List<Statement> getDependentResourceDeleteList ( Statement stmt, Model model, Set<String> visitedUris, boolean perviousWasDependentResource ){
if( stmt == null )
return Collections.emptyList();
List<Statement> toDelete = new LinkedList<Statement>();
toDelete.add(stmt);
RDFNode obj = stmt.getObject();
if( obj.isLiteral() ){
toDelete.add(stmt);
}else if( obj.isResource() ){
Resource res = (Resource)obj.as(Resource.class);
String id = res.isAnon()?res.getId().toString():res.getURI();
toDelete.add(stmt);
if(!visitedUris.contains(id) && isStubResource(res, model) ){
visitedUris.add(id);
for( Statement stubStmt : getAllStatements(res, model)){
toDelete.addAll( getDependentResourceDeleteList(stubStmt, model,visitedUris));
}
}
if( ( obj.canAs(Resource.class) && isPredicateDependencyRelation(stmt.getPredicate(), model) )
|| ( obj.isAnon() && perviousWasDependentResource ) ){
Resource res = (Resource)obj.as(Resource.class);
String id = res.isAnon()?res.getId().toString():res.getURI();
if( !visitedUris.contains(id) ){
visitedUris.add(id);
for( Statement stubStmt : getAllStatements(res, model)){
toDelete.addAll( getDependentResourceDeleteList(stubStmt, model,visitedUris,true));
}
}
}
return toDelete;
}
private static List<Statement> getDependentResourceDeleteList (RDFNode node, Model model, Set<String> visitedUris){
if( node == null )
return Collections.emptyList();
List<Statement> toDelete = new LinkedList<Statement>();
if( node.isLiteral() ){
//Literals are ignored
}else if( node.isResource() ){
Resource res = (Resource)node.as(Resource.class);
String id = res.isAnon()?res.getId().toString():res.getURI();
if(!visitedUris.contains(id) && isStubResource(res, model) ){
visitedUris.add(id);
for( Statement stubStmt : getAllStatements(res, model)){
toDelete.addAll( getDependentResourceDeleteList(stubStmt, model,visitedUris) );
}
}
}
return toDelete;
}
private static boolean isStubResource(Resource res, Model model){
//boolean q = res.hasProperty(RDF.type, model.createProperty(VitroVocabulary.DEPENDENT_RESOURCE));
boolean q = model.contains(res, RDF.type,model.createProperty(VitroVocabulary.DEPENDENT_RESOURCE));
return q;
}
private static List<Statement> getAllStatements(Resource res, Model model){
List<Statement> deleteUs = new LinkedList<Statement>();
StmtIterator it = model.listStatements(null, null, res);
@ -172,5 +169,13 @@ public class DependentResourceDeleteJena {
return deleteUs;
}
private static boolean isPredicateDependencyRelation( Property predicate , Model model){
return model.containsLiteral(
model.getResource(predicate.getURI()),
model.createProperty(VitroVocabulary.PROPERTY_DEPENDENCYPROPERTYANNOT),
true);
}
}

View file

@ -879,4 +879,6 @@ public class IndividualJena extends IndividualImpl implements Individual {
log.error(e);
}
}
}

View file

@ -12,11 +12,26 @@ import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.rdf.model.StmtIterator;
import com.hp.hpl.jena.vocabulary.XSD;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
public class DependentResourceDeleteJenaTest {
String depRes = "<" + VitroVocabulary.DEPENDENT_RESOURCE + ">";
String isDependentRelation =
" <"+VitroVocabulary.PROPERTY_DEPENDENCYPROPERTYANNOT+"> \"true\"^^xsd:boolean .\n" ;
String nosePropIsDependentRel =
"<"+VitroVocabulary.PROPERTY_DEPENDENCYPROPERTYANNOT+"> rdf:type owl:AnnotationProperty .\n" +
" ex:hasNose " + isDependentRelation;
String prefixesN3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix xsd: <" + XSD.getURI() + "> . \n " +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n";
void printModels(Model expected, Model result){
System.out.println("Expected:");
@ -28,11 +43,7 @@ public class DependentResourceDeleteJenaTest {
@org.junit.Test
public void testStmtNormalDelete() {
String n3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
" ex:bob ex:hasNose ex:nose1 . " ;
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
@ -53,19 +64,21 @@ public class DependentResourceDeleteJenaTest {
@org.junit.Test
public void testStmtSimpleForceDelete() {
String n3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
String n3=
prefixesN3 +
nosePropIsDependentRel +
"ex:hasHair " + isDependentRelation +
" ex:bob ex:hasNose ex:nose1 . \n" +
" ex:nose1 ex:hasHair ex:hair23. \n" +
" ex:hair23 ex:hasHairCount \"23\". " ;
String expected =
prefixesN3 +
" ex:bob ex:hasNose ex:nose1 . \n" +
" ex:nose1 rdf:type " + depRes + " . \n" +
" ex:nose1 ex:hasHair ex:hair23. \n" +
" ex:hair23 rdf:type " + depRes + " . \n" +
" ex:hair23 ex:hasHairCount \"23\". " ;
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
Model expectedModel = (ModelFactory.createDefaultModel()).read(new StringReader(expected), "", "N3");
List<Statement> deletes = DependentResourceDeleteJena.getDependentResourceDeleteList(
model.createStatement(
@ -78,32 +91,21 @@ public class DependentResourceDeleteJenaTest {
resultModel.add(deletes);
//all statements should be deleted
boolean same = resultModel.isIsomorphicWith( model );
Assert.assertTrue( same);
Assert.assertTrue( resultModel.isIsomorphicWith( expectedModel ) ) ;
}
@org.junit.Test
public void testStmtNonForceDelete() {
String n3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
" ex:bob ex:hasNose ex:nose1 . \n" +
" ex:nose1 ex:hasHair ex:hair23. \n" +
" ex:hair23 rdf:type " + depRes + " . \n" +
" ex:hair23 ex:hasHairCount \"23\". " ;
String expected =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
" ex:nose1 ex:hasHair ex:hair23. \n" +
" ex:hair23 rdf:type " + depRes + " . \n" +
" ex:hair23 ex:hasHairCount \"23\". " ;
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
@ -127,26 +129,20 @@ public class DependentResourceDeleteJenaTest {
@org.junit.Test
public void testStmtForceDeleteWithLiterals() {
String n3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
"ex:hasHair " + isDependentRelation +
" ex:bob ex:a \"Bob\". \n" +
" ex:bob ex:hasNose ex:nose1 . \n" +
" ex:nose1 rdf:type " + depRes + " . \n" +
" ex:nose1 ex:a \"this is a literal\". \n" +
" ex:nose1 ex:b \"2343\" . \n" +
" ex:nose1 ex:hasHair ex:hair23. \n" +
" ex:hair23 rdf:type " + depRes + " . \n" +
" ex:hair23 ex:hasHairCount \"23\". " ;
String expected =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
"ex:hasHair " + isDependentRelation +
" ex:bob ex:a \"Bob\". \n" ;
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
@ -166,31 +162,58 @@ public class DependentResourceDeleteJenaTest {
Assert.assertTrue( same );
}
@org.junit.Test
public void testStmtForceDeleteWithSimpleCycles() {
String n3 =
prefixesN3 +
nosePropIsDependentRel +
"ex:hasHair " + isDependentRelation +
" ex:bob ex:a \"Bob\". \n" +
" ex:bob ex:hasNose ex:nose1 . \n" +
" ex:nose1 ex:c ex:bob ." ;
String expected =
prefixesN3 +
nosePropIsDependentRel +
"ex:hasHair " + isDependentRelation +
" ex:bob ex:a \"Bob\"." ;
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
List<Statement> deletes = DependentResourceDeleteJena.getDependentResourceDeleteList(
model.createStatement(
model.createResource("http://example.com/bob"),
model.createProperty("http://example.com/hasNose"),
model.createResource("http://example.com/nose1")),
model);
model.remove(deletes);
Model expectedModel = (ModelFactory.createDefaultModel()).read(new StringReader(expected), "", "N3");
boolean same = expectedModel.isIsomorphicWith( model );
if( ! same ) printModels( expectedModel, model);
Assert.assertTrue( same );
}
@org.junit.Test
public void testStmtForceDeleteWithCycles() {
String n3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
"ex:hasHair " + isDependentRelation +
" ex:bob ex:a \"Bob\". \n" +
" ex:bob ex:hasNose ex:nose1 . \n" +
" ex:nose1 rdf:type " + depRes + " . \n" +
" ex:nose1 ex:a \"this is a literal\". \n" +
" ex:nose1 ex:b \"2343\" . \n" +
" ex:nose1 ex:c ex:bob . \n" +
" ex:nose1 ex:hasHair ex:hair23. \n" +
" ex:hair23 rdf:type " + depRes + " . \n" +
" ex:hair23 ex:c ex:bob . \n" +
" ex:hair23 ex:hasHairCount \"23\". " ;
String expected =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
"ex:hasHair " + isDependentRelation +
" ex:bob ex:a \"Bob\". \n" ;
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
@ -213,25 +236,18 @@ public class DependentResourceDeleteJenaTest {
@org.junit.Test
public void testStmtForceDeleteWithCycles2() {
String n3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
" ex:bob ex:a \"Bob\". \n" +
" ex:bob ex:hasNose ex:nose1 . \n" +
" ex:nose1 rdf:type " + depRes + " . \n" +
" ex:nose1 ex:a \"this is a literal\". \n" +
" ex:nose1 ex:b \"2343\" . \n" +
" ex:nose1 ex:c ex:nose1 . \n" +
" ex:nose1 ex:c ex:bob . \n" ;
String expected =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
" ex:bob ex:a \"Bob\". \n" ;
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
@ -254,24 +270,17 @@ public class DependentResourceDeleteJenaTest {
@org.junit.Test
public void testStmtForceDeleteWithLinks() {
String n3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
" ex:bob ex:a \"Bob\". \n" +
" ex:bob ex:hasNose ex:nose1 . \n" +
" ex:nose1 rdf:type " + depRes + " . \n" +
" ex:nose1 ex:c ex:glasses65 . \n" +
" ex:glasses65 ex:c ex:nose1 . \n" +
" ex:glasses65 ex:a \"glasses 65\" ." ;
String expected =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
" ex:bob ex:a \"Bob\". \n" +
" ex:glasses65 ex:a \"glasses 65\" ." ;
@ -295,24 +304,17 @@ public class DependentResourceDeleteJenaTest {
@org.junit.Test
public void testStmtForceDeleteWithBNodes() {
String n3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
" ex:bob ex:a \"Bob\". \n" +
" ex:bob ex:hasNose [ \n" +
" rdf:type " + depRes + " ; \n" +
" ex:a \"this is a bnode\"; \n" +
" ex:c ex:glasses65 ] . \n" +
" ex:glasses65 ex:a \"glasses 65\" ." ;
String expected =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
" ex:bob ex:a \"Bob\". \n" +
" ex:glasses65 ex:a \"glasses 65\" ." ;
@ -336,27 +338,20 @@ public class DependentResourceDeleteJenaTest {
@org.junit.Test
public void testStmtForceDeleteWithNestedBNodes() {
String n3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
" ex:bob ex:a \"Bob\". \n" +
" ex:bob ex:hasNose [ \n" +
" rdf:type " + depRes + " ; \n" +
" ex:a \"this is a bnode\"; \n" +
" ex:c ex:glasses65 ; \n" +
" ex:c [ rdf:type " + depRes + " ;" +
" ex:c [ " +
" ex:a \"this is a nested bnode\" ] " +
"] . \n" +
" ex:glasses65 ex:a \"glasses 65\" ." ;
String expected =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
" ex:bob ex:a \"Bob\". \n" +
" ex:glasses65 ex:a \"glasses 65\" ." ;
@ -377,47 +372,51 @@ public class DependentResourceDeleteJenaTest {
Assert.assertTrue( same );
}
@org.junit.Test
public void testResNormalDelete() {
String n3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
" ex:bob ex:hasNose ex:nose1 . " ;
String expected =
prefixesN3 +
nosePropIsDependentRel ;
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
Model expectedModel = (ModelFactory.createDefaultModel()).read(new StringReader(expected), "", "N3");
List<Statement> deletes = DependentResourceDeleteJena.getDependentResourceDeleteList(
model.createResource("http://example.com/nose1"),model);
Assert.assertTrue( deletes != null && deletes.size() ==0 );
model.createResource("http://example.com/nose1"),model);
Model resultModel = model.remove(deletes);
//all statements should be deleted
boolean same = resultModel.isIsomorphicWith( expectedModel );
if( ! same ) printModels( expectedModel, model);
Assert.assertTrue( same);
}
@org.junit.Test
public void testResSimpleForceDelete() {
String n3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
" ex:bob ex:hasNose ex:nose1 . \n" +
" ex:nose1 rdf:type " + depRes + " . \n" +
" ex:nose1 ex:hasHair ex:hair23. \n" +
" ex:hair23 rdf:type " + depRes + " . \n" +
" ex:hair23 ex:hasHairCount \"23\". " ;
String expected =
prefixesN3 +
nosePropIsDependentRel +
" ex:hair23 ex:hasHairCount \"23\". " ;
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
Model expectedModel = (ModelFactory.createDefaultModel()).read(new StringReader(expected), "", "N3");
List<Statement> deletes = DependentResourceDeleteJena.getDependentResourceDeleteList(
model.createResource("http://example.com/nose1"),model);
Model resultModel = ModelFactory.createDefaultModel();
resultModel.add(deletes);
Model resultModel = model.remove(deletes);
//all statements should be deleted
boolean same = resultModel.isIsomorphicWith( model );
boolean same = resultModel.isIsomorphicWith( expectedModel );
if( ! same ) printModels( expectedModel, model);
Assert.assertTrue( same);
}
@ -425,45 +424,68 @@ public class DependentResourceDeleteJenaTest {
@org.junit.Test
public void testResNonForceDelete() {
String n3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
" ex:bob ex:hasNose ex:nose1 . \n" +
" ex:nose1 ex:hasHair ex:hair23. \n" +
" ex:hair23 rdf:type " + depRes + " . \n" +
" ex:hair23 ex:hasHairCount \"23\". " ;
String expected =
prefixesN3 +
" ex:hair23 ex:hasHairCount \"23\". " ;
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
Model expectedModel = (ModelFactory.createDefaultModel()).read(new StringReader(expected), "", "N3");
List<Statement> deletes = DependentResourceDeleteJena.getDependentResourceDeleteList(
model.createResource("http://example.com/nose1"),model);
Assert.assertTrue( deletes != null && deletes.size() == 0);
model.createResource("http://example.com/nose1"),model);
Model resultModel = model.remove(deletes);
//all statements should be deleted
boolean same = resultModel.isIsomorphicWith( expectedModel );
if( ! same ) printModels( expectedModel, model);
Assert.assertTrue( same);
}
@org.junit.Test
public void testResNonForceDelete2() {
String n3 =
prefixesN3 +
nosePropIsDependentRel +
" ex:bob ex:hasNose ex:nose1 . \n" +
" ex:nose1 ex:hasHair ex:hair23. \n" +
" ex:hair23 ex:hasHairCount \"23\". " ;
String expected =
prefixesN3 +
nosePropIsDependentRel +
" ex:hair23 ex:hasHairCount \"23\". " ;
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
Model expectedModel = (ModelFactory.createDefaultModel()).read(new StringReader(expected), "", "N3");
List<Statement> deletes = DependentResourceDeleteJena.getDependentResourceDeleteList(
model.createResource("http://example.com/nose1"),model);
Model resultModel = model.remove(deletes);
//all statements should be deleted
boolean same = resultModel.isIsomorphicWith( expectedModel );
if( ! same ) printModels( expectedModel, model);
Assert.assertTrue( same);
}
@org.junit.Test
public void testResForceDeleteWithLiterals() {
String n3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
" ex:hasHair " + isDependentRelation +
" ex:bob ex:a \"Bob\". \n" +
" ex:bob ex:hasNose ex:nose1 . \n" +
" ex:nose1 rdf:type " + depRes + " . \n" +
" ex:nose1 ex:a \"this is a literal\". \n" +
" ex:nose1 ex:b \"2343\" . \n" +
" ex:nose1 ex:hasHair ex:hair23. \n" +
" ex:hair23 rdf:type " + depRes + " . \n" +
" ex:hair23 ex:hasHairCount \"23\". " ;
String expected =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
" ex:hasHair " + isDependentRelation +
" ex:bob ex:a \"Bob\". \n" ;
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
@ -481,28 +503,22 @@ public class DependentResourceDeleteJenaTest {
@org.junit.Test
public void testResForceDeleteWithCycles() {
String n3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
"ex:hasHair " + isDependentRelation +
" ex:bob ex:a \"Bob\". \n" +
" ex:bob ex:hasNose ex:nose1 . \n" +
" ex:nose1 rdf:type " + depRes + " . \n" +
" ex:nose1 ex:a \"this is a literal\". \n" +
" ex:nose1 ex:b \"2343\" . \n" +
" ex:nose1 ex:c ex:bob . \n" +
" ex:nose1 ex:hasHair ex:hair23. \n" +
" ex:hair23 rdf:type " + depRes + " . \n" +
" ex:hair23 ex:c ex:bob . \n" +
" ex:hair23 ex:hasHairCount \"23\". " ;
String expected =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
"ex:hasHair " + isDependentRelation +
" ex:bob ex:a \"Bob\". \n" ;
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
@ -520,30 +536,22 @@ public class DependentResourceDeleteJenaTest {
@org.junit.Test
public void testResForceDeleteWithCycles2() {
String n3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
" ex:bob ex:a \"Bob\". \n" +
" ex:bob ex:hasNose ex:nose1 . \n" +
" ex:nose1 rdf:type " + depRes + " . \n" +
" ex:nose1 ex:a \"this is a literal\". \n" +
" ex:nose1 ex:b \"2343\" . \n" +
" ex:nose1 ex:c ex:nose1 . \n" +
" ex:nose1 ex:c ex:bob . \n" ;
String expected =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
" ex:bob ex:a \"Bob\". \n" ;
prefixesN3 +
nosePropIsDependentRel ;
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
List<Statement> deletes = DependentResourceDeleteJena.getDependentResourceDeleteList(
model.createResource("http://example.com/nose1"),model);
model.createResource("http://example.com/bob"),model);
model.remove(deletes);
Model expectedModel = (ModelFactory.createDefaultModel()).read(new StringReader(expected), "", "N3");
@ -555,24 +563,17 @@ public class DependentResourceDeleteJenaTest {
@org.junit.Test
public void testResForceDeleteWithLinks() {
String n3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
" ex:bob ex:a \"Bob\". \n" +
" ex:bob ex:hasNose ex:nose1 . \n" +
" ex:nose1 rdf:type " + depRes + " . \n" +
" ex:nose1 ex:c ex:glasses65 . \n" +
" ex:glasses65 ex:c ex:nose1 . \n" +
" ex:glasses65 ex:a \"glasses 65\" ." ;
String expected =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
" ex:bob ex:a \"Bob\". \n" +
" ex:glasses65 ex:a \"glasses 65\" ." ;
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
@ -587,117 +588,97 @@ public class DependentResourceDeleteJenaTest {
Assert.assertTrue( same );
}
@org.junit.Test
public void testResForceDeleteWithBNodes() {
String n3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
" ex:bob ex:a \"Bob\". \n" +
" ex:bob ex:hasNose [ \n" +
" rdf:type " + depRes + " ; \n" +
" ex:a \"this is a bnode\"; \n" +
" ex:c ex:glasses65 ] . \n" +
" ex:glasses65 ex:a \"glasses 65\" ." ;
// @org.junit.Test
// public void testResForceDeleteWithBNodes() {
// String n3 =
// prefixesN3 +
// nosePropIsDependentRel +
// " ex:bob ex:a \"Bob\". \n" +
// " ex:bob ex:hasNose [ \n" +
// " ex:a \"this is a bnode\"; \n" +
// " ex:c ex:glasses65 ] . \n" +
// " ex:glasses65 ex:a \"glasses 65\" ." ;
//
// String expected =
// prefixesN3 +
// nosePropIsDependentRel +
// " ex:bob ex:a \"Bob\". \n" +
// " ex:glasses65 ex:a \"glasses 65\" ." ;
// Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
//
// StmtIterator stmtIt = model.listStatements(
// model.createResource("http://example.com/bob"),
// model.createProperty("http://example.com/hasNose"),
// (RDFNode)null);
//
// RDFNode bnode = stmtIt.nextStatement().getObject();
//
// List<Statement> deletes =
// DependentResourceDeleteJena.getDependentResourceDeleteList(bnode,model);
// model.remove(deletes);
//
// Model expectedModel = (ModelFactory.createDefaultModel()).read(new StringReader(expected), "", "N3");
// boolean same = expectedModel.isIsomorphicWith( model );
// if( ! same ) printModels( expectedModel, model);
// Assert.assertTrue( same );
// }
String expected =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
" ex:bob ex:a \"Bob\". \n" +
" ex:glasses65 ex:a \"glasses 65\" ." ;
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
StmtIterator stmtIt = model.listStatements(
model.createResource("http://example.com/bob"),
model.createProperty("http://example.com/hasNose"),
(RDFNode)null);
RDFNode bnode = stmtIt.nextStatement().getObject();
List<Statement> deletes =
DependentResourceDeleteJena.getDependentResourceDeleteList(bnode,model);
model.remove(deletes);
Model expectedModel = (ModelFactory.createDefaultModel()).read(new StringReader(expected), "", "N3");
boolean same = expectedModel.isIsomorphicWith( model );
if( ! same ) printModels( expectedModel, model);
Assert.assertTrue( same );
}
@org.junit.Test
public void testResForceDeleteWithNestedBNodes() {
String n3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
" ex:bob ex:a \"Bob\". \n" +
" ex:bob ex:hasNose [ \n" +
" rdf:type " + depRes + " ; \n" +
" ex:a \"this is a bnode\"; \n" +
" ex:c ex:glasses65 ; \n" +
" ex:c [ rdf:type " + depRes + " ;" +
" ex:a \"this is a nested bnode\" ] " +
"] . \n" +
" ex:glasses65 ex:a \"glasses 65\" ." ;
String expected =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
" ex:bob ex:a \"Bob\". \n" +
" ex:glasses65 ex:a \"glasses 65\" ." ;
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
StmtIterator stmtIt = model.listStatements(
model.createResource("http://example.com/bob"),
model.createProperty("http://example.com/hasNose"),
(RDFNode)null);
RDFNode bnode = stmtIt.nextStatement().getObject();
List<Statement> deletes =
DependentResourceDeleteJena.getDependentResourceDeleteList(bnode,model);
model.remove(deletes);
Model expectedModel = (ModelFactory.createDefaultModel()).read(new StringReader(expected), "", "N3");
boolean same = expectedModel.isIsomorphicWith( model );
if( ! same ) printModels( expectedModel, model);
Assert.assertTrue( same );
}
// @org.junit.Test
// public void testResForceDeleteWithNestedBNodes() {
// String n3 =
// prefixesN3 +
// nosePropIsDependentRel +
// " ex:bob ex:a \"Bob\". \n" +
// " ex:bob ex:hasNose [ \n" +
// " ex:a \"this is a bnode\"; \n" +
// " ex:c ex:glasses65 ; \n" +
// " ex:c [ " +
// " ex:a \"this is a nested bnode\" ] " +
// "] . \n" +
// " ex:glasses65 ex:a \"glasses 65\" ." ;
//
// String expected =
// prefixesN3 +
// nosePropIsDependentRel +
// " ex:bob ex:a \"Bob\". \n" +
// " ex:glasses65 ex:a \"glasses 65\" ." ;
//
// Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
//
// StmtIterator stmtIt = model.listStatements(
// model.createResource("http://example.com/bob"),
// model.createProperty("http://example.com/hasNose"),
// (RDFNode)null);
// RDFNode bnode = stmtIt.nextStatement().getObject();
//
// List<Statement> deletes =
// DependentResourceDeleteJena.getDependentResourceDeleteList(bnode,model);
// model.remove(deletes);
//
// Model expectedModel = (ModelFactory.createDefaultModel()).read(new StringReader(expected), "", "N3");
// boolean same = expectedModel.isIsomorphicWith( model );
// if( ! same ) printModels( expectedModel, model);
// Assert.assertTrue( same );
// }
@org.junit.Test
public void testDeleteForChange() {
String source =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
"ex:hasHair " + isDependentRelation +
" ex:bob ex:a \"Bob\". \n" +
" ex:bob ex:hasNose ex:nose1 . \n" +
" ex:nose1 rdf:type " + depRes + " . \n" +
" ex:nose1 ex:a \"this is a literal\". \n" +
" ex:nose1 ex:b \"2343\" . \n" +
" ex:nose1 ex:hasHair ex:hair23. \n" +
" ex:hair23 rdf:type " + depRes + " . \n" +
" ex:hair23 ex:hasHairCount \"23\". " ;
String expected =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
"ex:hasHair " + isDependentRelation +
" ex:bob ex:a \"Bob\". \n" ;
String retractions =
@ -722,35 +703,25 @@ public class DependentResourceDeleteJenaTest {
@org.junit.Test
public void testDeleteForChangeWithReplace() {
String source =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
" ex:bob ex:a \"Bob\". \n" +
" ex:jim ex:a \"Jim\". \n" +
" ex:bob ex:hasNose ex:nose1 . \n" +
" ex:nose1 rdf:type " + depRes + " . \n" +
" ex:nose1 ex:a \"this is a literal\". \n" +
" ex:nose1 ex:b \"2343\" . \n" +
" ex:nose1 ex:hasHair ex:hair23. \n" +
" ex:hair23 rdf:type " + depRes + " . \n" +
" ex:hair23 ex:hasHairCount \"23\". " ;
String expected =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
nosePropIsDependentRel +
" ex:jim ex:a \"Jim\". \n" +
" ex:bob ex:a \"Bob\". \n" +
" ex:jim ex:hasNose ex:nose1 . \n" +
" ex:nose1 rdf:type " + depRes + " . \n" +
" ex:nose1 ex:a \"this is a literal\". \n" +
" ex:nose1 ex:b \"2343\" . \n" +
" ex:nose1 ex:hasHair ex:hair23. \n" +
" ex:hair23 rdf:type " + depRes + " . \n" +
" ex:hair23 ex:hasHairCount \"23\". " ;
String additions =
@ -777,48 +748,51 @@ public class DependentResourceDeleteJenaTest {
Assert.assertTrue( same );
}
@org.junit.Ignore @org.junit.Test
@org.junit.Test
public void testDeleteWithNonZeroInDegree() {
/*
This tests deleteing a position context node from the orginization side.
Currently the required behaivor is that the position context node not be
deleted when the object property statement is deleted from the org side.
This tests deleting a position context node from the organization side.
Currently the required behavior is that the position context node not be
deleted when the object property statement is deleted from the organization side.
*/
String source =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
" ex:personHasPosition " + isDependentRelation +
" ex:bob ex:a \"Bob\". \n" +
" ex:orgP ex:a \"orgP\". \n" +
" ex:bob ex:hasPosition ex:position1 . \n" +
" ex:orgP ex:hasPosition ex:position1 . \n" +
" ex:position1 rdf:type " + depRes + " . \n" +
" ex:bob ex:personHasPosition ex:position1 . \n" +
" ex:orgP ex:positionInOrganization ex:position1 . \n" +
" ex:position1 ex:a \"This is Position1\". \n" +
" ex:position1 ex:b \"2343\" . ";
String expected =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix ex: <http://example.com/> . \n" +
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n"+
prefixesN3 +
" ex:personHasPosition " + isDependentRelation +
" ex:bob ex:a \"Bob\". \n" +
" ex:orgP ex:a \"orgP\". \n" +
" ex:bob ex:hasPosition ex:position1 . \n" +
" ex:position1 rdf:type " + depRes + " . \n" +
" ex:bob ex:personHasPosition ex:position1 . \n" +
" ex:position1 ex:a \"This is Position1\". \n" +
" ex:position1 ex:hasOrgName \"org xyz\" . \n" +
" ex:position1 ex:b \"2343\" . ";
// prefixesN3 +
// " ex:bob ex:a \"Bob\". \n" +
// " ex:orgP ex:a \"orgP\". \n" +
// " ex:bob ex:hasPosition ex:position1 . \n" +
// " ex:position1 ex:a \"This is Position1\". \n" +
// " ex:position1 ex:hasOrgName \"org xyz\" . \n" +
// " ex:position1 ex:b \"2343\" . ";
String additions =
"@prefix ex: <http://example.com/> . \n" +
"@prefix xsd: <" + XSD.getURI() + "> . \n " +
" ex:position1 ex:hasOrgName \"org xyz\" . ";
String retractions =
"@prefix ex: <http://example.com/> . \n" +
" ex:orgP ex:hasPosition ex:position1 . ";
"@prefix xsd: <" + XSD.getURI() + "> . \n " +
" ex:orgP ex:positionInOrganization ex:position1 . ";
Model sourceModel = (ModelFactory.createDefaultModel()).read(new StringReader(source), "", "N3");
Model additionsModel = (ModelFactory.createDefaultModel()).read(new StringReader(additions), "", "N3");
@ -836,4 +810,50 @@ public class DependentResourceDeleteJenaTest {
Assert.assertTrue( same );
}
@org.junit.Test
public void testDeleteWithNonZeroInDegree2() {
/*
This tests deleting a position context node from the organization side.
Currently the required behavior is that the position context node not be
deleted when the object property statement is deleted from the organization side.
*/
String source =
prefixesN3 +
" ex:personHasPosition " + isDependentRelation +
" ex:bob ex:a \"Bob\". \n" +
" ex:orgP ex:a \"orgP\". \n" +
" ex:bob ex:personHasPosition ex:position1 . \n" +
" ex:orgP ex:positionInOrganization ex:position1 . \n" +
" ex:position1 ex:a \"This is Position1\". \n" +
" ex:position1 ex:b \"2343\" . ";
String expected =
prefixesN3 +
" ex:personHasPosition " + isDependentRelation +
" ex:bob ex:a \"Bob\". \n" +
" ex:orgP ex:a \"orgP\". \n" +
" ex:bob ex:personHasPosition ex:position1 . \n" +
" ex:position1 ex:a \"This is Position1\". \n" +
" ex:position1 ex:b \"2343\" . ";
String retractions =
"@prefix ex: <http://example.com/> . \n" +
"@prefix xsd: <" + XSD.getURI() + "> . \n " +
" ex:orgP ex:positionInOrganization ex:position1 . ";
Model sourceModel = (ModelFactory.createDefaultModel()).read(new StringReader(source), "", "N3");
Model additionsModel = ModelFactory.createDefaultModel(); //no additions
Model retractionsModel = (ModelFactory.createDefaultModel()).read(new StringReader(retractions), "", "N3");
Model depDeletes =
DependentResourceDeleteJena.getDependentResourceDeleteForChange(additionsModel, retractionsModel, sourceModel);
sourceModel.remove(depDeletes);
sourceModel.remove(retractionsModel);
sourceModel.add(additionsModel);
Model expectedModel = (ModelFactory.createDefaultModel()).read(new StringReader(expected), "", "N3");
boolean same = expectedModel.isIsomorphicWith( sourceModel );
if( ! same ) printModels( expectedModel, sourceModel);
Assert.assertTrue( same );
}
}

View file

@ -13,7 +13,10 @@ import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.StmtIterator;
import com.hp.hpl.jena.vocabulary.OWL;
import com.hp.hpl.jena.vocabulary.RDF;
import com.hp.hpl.jena.vocabulary.RDFS;
import com.hp.hpl.jena.vocabulary.XSD;
import edu.cornell.mannlib.vitro.webapp.beans.DataProperty;
import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement;
@ -29,140 +32,103 @@ import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
public class JenaBaseDaoTest {
String isDependentRelation =
" <"+VitroVocabulary.PROPERTY_DEPENDENCYPROPERTYANNOT+"> \"true\"^^xsd:boolean .\n" ;
String nosePropIsDependentRel =
"<"+VitroVocabulary.PROPERTY_DEPENDENCYPROPERTYANNOT+"> rdf:type owl:AnnotationProperty .\n" +
" ex:hasNose " + isDependentRelation;
String prefixesN3 =
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
"@prefix xsd: <" + XSD.getURI() + "> . \n " +
"@prefix rdf: <" + RDF.getURI() + "> . \n"+
"@prefix rdfs: <" + RDFS.getURI() + "> . \n"+
"@prefix owl: <" + OWL.getURI() + "> . \n" +
"@prefix ex: <http://example.com/> . \n" ;
@Test
public void smartRemoveTestForIndivdiualDelete(){
OntModel model = ModelFactory.createOntologyModel();
WebappDaoFactoryJena wdfj = new WebappDaoFactoryJena( model );
String n3 = prefixesN3 +
"ex:prop1 rdf:type owl:ObjectProperty ." +
"ex:prop1 rdfs:label \"Prop 1 Dependent Relation\" ." +
"ex:prop1 " + isDependentRelation;
/* Need to have the DEPENDENT_RESOURCE class in the model */
VClass cls = new VClass();
cls.setURI(VitroVocabulary.DEPENDENT_RESOURCE);
try {
wdfj.getVClassDao().insertNewVClass(cls);
} catch (InsertException e1) {
Assert.fail("could not create class for dependentResourc");
}
Model readInModel = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
OntModel ontModel = ModelFactory.createOntologyModel();
ontModel.add(readInModel);
WebappDaoFactoryJena wdfj = new WebappDaoFactoryJena( ontModel);
/* Need to have an Object Property */
ObjectProperty op = new ObjectProperty();
op.setURI("http://example.com/prop1");
try {
wdfj.getObjectPropertyDao().insertObjectProperty(op);
} catch (InsertException e1) {
Assert.fail("Could not create object property.");
}
ObjectProperty prop1 = wdfj.getObjectPropertyDao().getObjectPropertyByURI("http://example.com/prop1");
Assert.assertNotNull(prop1);
Individual ind = new IndividualImpl();
ind.setURI("http://example.com/bob");
ind.setName("Smith, Bob");
Individual ind = new IndividualImpl();
ind.setURI("http://example.com/bob");
ind.setName("Smith, Bob");
try {
wdfj.getIndividualDao().insertNewIndividual(ind);
} catch (InsertException e) {
Assert.fail("Could not create new Individual Smith, Bob");
}
Individual indxyz = new IndividualImpl();
indxyz.setURI("http://example.com/depResXYZ");
indxyz.setName("depResXYZ");
indxyz.setVClassURI(VitroVocabulary.DEPENDENT_RESOURCE);
try {
Individual indxyz = new IndividualImpl();
indxyz.setURI("http://example.com/depResXYZ");
indxyz.setName("depResXYZ");
wdfj.getIndividualDao().insertNewIndividual(indxyz);
} catch (InsertException e) {
Assert.fail("Could not create new Individual depResXYZ");
}
StmtIterator it = model.listStatements(model.createResource("http://example.com/depResXYZ"),
RDF.type, model.createResource(VitroVocabulary.DEPENDENT_RESOURCE));
Assert.assertTrue("depResXYZ did not get rdf:type vitro:dependentResource" ,
it != null && it.nextStatement() != null);
Individual indAbc = new IndividualImpl();
indAbc.setURI("http://example.com/depResNested");
indAbc.setName("depResNested");
indAbc.setVClassURI(VitroVocabulary.DEPENDENT_RESOURCE);
try {
Individual indAbc = new IndividualImpl();
indAbc.setURI("http://example.com/depResNested");
indAbc.setName("depResNested");
wdfj.getIndividualDao().insertNewIndividual(indAbc);
} catch (InsertException e) {
Assert.fail("Could not create new Individual depResNested");
ObjectPropertyStatement ops = new ObjectPropertyStatementImpl();
ops.setSubjectURI("http://example.com/bob");
ops.setPropertyURI("http://example.com/prop1");
ops.setObjectURI("http://example.com/depResXYZ");
wdfj.getObjectPropertyStatementDao().insertNewObjectPropertyStatement(ops);
ops = new ObjectPropertyStatementImpl();
ops.setSubjectURI("http://example.com/depResXYZ");
ops.setPropertyURI("http://example.com/prop1");
ops.setObjectURI("http://example.com/depResNested");
wdfj.getObjectPropertyStatementDao().insertNewObjectPropertyStatement(ops);
wdfj.getIndividualDao().deleteIndividual("http://example.com/depResXYZ");
String expected =
"@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . "+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> ."+
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> ."+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . "+
"<http://example.com/bob> a owl:Thing ; " +
" rdfs:label \"Smith, Bob\"@en-US . "+
"<http://example.com/prop1> " +
" a owl:ObjectProperty ; " +
" rdfs:label \"Prop 1 Dependent Relation\" ; " +
" <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#dependencyPropertyAnnot> \"true\"^^xsd:boolean ." ;
Model expectedModel = (ModelFactory.createOntologyModel()).read(new StringReader(expected), "", "N3");
//modtime times make it difficult to compare graphs
wipeOutModTime(expectedModel);
wipeOutModTime(ontModel);
Assert.assertTrue( ontModel.isIsomorphicWith(expectedModel) );
} catch (InsertException e) {
Assert.fail(e.getMessage());
}
it = model.listStatements(model.createResource("http://example.com/depResNested"),
RDF.type, model.createResource(VitroVocabulary.DEPENDENT_RESOURCE));
Assert.assertTrue("depResNested did not get rdf:type vitro:dependentResource" ,
it != null && it.nextStatement() != null);
ObjectPropertyStatement ops = new ObjectPropertyStatementImpl();
ops.setSubjectURI("http://example.com/bob");
ops.setPropertyURI("http://example.com/prop1");
ops.setObjectURI("http://example.com/depResXYZ");
wdfj.getObjectPropertyStatementDao().insertNewObjectPropertyStatement(ops);
ops = new ObjectPropertyStatementImpl();
ops.setSubjectURI("http://example.com/depResXYZ");
ops.setPropertyURI("http://example.com/prop1");
ops.setObjectURI("http://example.com/depResNested");
wdfj.getObjectPropertyStatementDao().insertNewObjectPropertyStatement(ops);
String expected = "<rdf:RDF\n"+
" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n"+
" xmlns:j.0=\"http://vitro.mannlib.cornell.edu/ns/vitro/0.7#\"\n"+
" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\"\n"+
" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\"\n"+
" xmlns:owl=\"http://www.w3.org/2002/07/owl#\"\n"+
" xmlns:j.1=\"http://example.com/\" > \n"+
" <rdf:Description rdf:about=\"http://example.com/bob\">\n"+
" <j.0:modTime rdf:datatype=\"http://www.w3.org/2001/XMLSchema#dateTime\">2010-01-25T15:27:54</j.0:modTime>\n"+
" <rdfs:label xml:lang=\"en-US\">Smith, Bob</rdfs:label>\n"+
" <rdf:type rdf:resource=\"http://www.w3.org/2002/07/owl#Thing\"/>\n"+
" </rdf:Description>\n"+
" <rdf:Description rdf:about=\"http://vitro.mannlib.cornell.edu/ns/vitro/0.7#DependentResource\">\n"+
" <j.0:displayRankAnnot rdf:datatype=\"http://www.w3.org/2001/XMLSchema#int\">-1</j.0:displayRankAnnot>\n"+
" <j.0:displayLimitAnnot rdf:datatype=\"http://www.w3.org/2001/XMLSchema#int\">-1</j.0:displayLimitAnnot>\n"+
" <rdf:type rdf:resource=\"http://www.w3.org/2002/07/owl#Class\"/>\n"+
" </rdf:Description>\n"+
" <rdf:Description rdf:about=\"http://example.com/prop1\">\n"+
" <j.0:selectFromExistingAnnot rdf:datatype=\"http://www.w3.org/2001/XMLSchema#boolean\">true</j.0:selectFromExistingAnnot>\n"+
" <j.0:displayLimitAnnot rdf:datatype=\"http://www.w3.org/2001/XMLSchema#int\">5</j.0:displayLimitAnnot>\n"+
" <rdf:type rdf:resource=\"http://www.w3.org/2002/07/owl#ObjectProperty\"/>\n"+
" </rdf:Description>\n"+
"</rdf:RDF>";
wdfj.getIndividualDao().deleteIndividual("http://example.com/depResXYZ");
Model expectedModel = (ModelFactory.createOntologyModel()).read(new StringReader(expected), "", "RDF/XML");
//modtime times make it difficult to compare graphs
wipeOutModTime(expectedModel);
wipeOutModTime(model);
Assert.assertTrue( model.isIsomorphicWith(expectedModel));
}
@Test
public void smartRemoveTestForObjPropStmtDelete(){
String n3 = prefixesN3 +
"ex:prop1 rdf:type owl:ObjectProperty ." +
"ex:prop1 rdfs:label \"Prop 1 Dependent Relation\" ." +
"ex:prop1 " + isDependentRelation;
Model readInModel = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
OntModel model = ModelFactory.createOntologyModel();
WebappDaoFactoryJena wdfj = new WebappDaoFactoryJena( model );
/* Need to have the DEPENDENT_RESOURCE class in the model */
VClass cls = new VClass();
cls.setURI(VitroVocabulary.DEPENDENT_RESOURCE);
try {
wdfj.getVClassDao().insertNewVClass(cls);
} catch (InsertException e1) {
Assert.fail("could not create class for dependentResourc");
}
/* Need to have an Object Property */
ObjectProperty op = new ObjectProperty();
op.setURI("http://example.com/prop1");
try {
wdfj.getObjectPropertyDao().insertObjectProperty(op);
} catch (InsertException e1) {
Assert.fail("Could not create object property.");
}
model.add(readInModel);
WebappDaoFactoryJena wdfj = new WebappDaoFactoryJena( model);
Individual ind = new IndividualImpl();
ind.setURI("http://example.com/bob");
@ -176,31 +142,20 @@ public class JenaBaseDaoTest {
Individual indxyz = new IndividualImpl();
indxyz.setURI("http://example.com/depResXYZ");
indxyz.setName("depResXYZ");
indxyz.setVClassURI(VitroVocabulary.DEPENDENT_RESOURCE);
try {
wdfj.getIndividualDao().insertNewIndividual(indxyz);
} catch (InsertException e) {
Assert.fail("Could not create new Individual depResXYZ");
}
StmtIterator it = model.listStatements(model.createResource("http://example.com/depResXYZ"),
RDF.type, model.createResource(VitroVocabulary.DEPENDENT_RESOURCE));
Assert.assertTrue("depResXYZ did not get rdf:type vitro:dependentResource" ,
it != null && it.nextStatement() != null);
Individual indAbc = new IndividualImpl();
indAbc.setURI("http://example.com/depResNested");
indAbc.setName("depResNested");
indAbc.setVClassURI(VitroVocabulary.DEPENDENT_RESOURCE);
try {
wdfj.getIndividualDao().insertNewIndividual(indAbc);
} catch (InsertException e) {
Assert.fail("Could not create new Individual depResNested");
}
it = model.listStatements(model.createResource("http://example.com/depResNested"),
RDF.type, model.createResource(VitroVocabulary.DEPENDENT_RESOURCE));
Assert.assertTrue("depResNested did not get rdf:type vitro:dependentResource" ,
it != null && it.nextStatement() != null);
ObjectPropertyStatement ops = new ObjectPropertyStatementImpl();
ops.setSubjectURI("http://example.com/bob");
@ -214,38 +169,25 @@ public class JenaBaseDaoTest {
ops.setObjectURI("http://example.com/depResNested");
wdfj.getObjectPropertyStatementDao().insertNewObjectPropertyStatement(ops);
String expected = "<rdf:RDF\n"+
" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n"+
" xmlns:j.0=\"http://vitro.mannlib.cornell.edu/ns/vitro/0.7#\"\n"+
" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\"\n"+
" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\"\n"+
" xmlns:owl=\"http://www.w3.org/2002/07/owl#\"\n"+
" xmlns:j.1=\"http://example.com/\" > \n"+
" <rdf:Description rdf:about=\"http://example.com/bob\">\n"+
" <j.0:modTime rdf:datatype=\"http://www.w3.org/2001/XMLSchema#dateTime\">2010-01-25T15:27:54</j.0:modTime>\n"+
" <rdfs:label xml:lang=\"en-US\">Smith, Bob</rdfs:label>\n"+
" <rdf:type rdf:resource=\"http://www.w3.org/2002/07/owl#Thing\"/>\n"+
" </rdf:Description>\n"+
" <rdf:Description rdf:about=\"http://vitro.mannlib.cornell.edu/ns/vitro/0.7#DependentResource\">\n"+
" <j.0:displayRankAnnot rdf:datatype=\"http://www.w3.org/2001/XMLSchema#int\">-1</j.0:displayRankAnnot>\n"+
" <j.0:displayLimitAnnot rdf:datatype=\"http://www.w3.org/2001/XMLSchema#int\">-1</j.0:displayLimitAnnot>\n"+
" <rdf:type rdf:resource=\"http://www.w3.org/2002/07/owl#Class\"/>\n"+
" </rdf:Description>\n"+
" <rdf:Description rdf:about=\"http://example.com/prop1\">\n"+
" <j.0:selectFromExistingAnnot rdf:datatype=\"http://www.w3.org/2001/XMLSchema#boolean\">true</j.0:selectFromExistingAnnot>\n"+
" <j.0:displayLimitAnnot rdf:datatype=\"http://www.w3.org/2001/XMLSchema#int\">5</j.0:displayLimitAnnot>\n"+
" <rdf:type rdf:resource=\"http://www.w3.org/2002/07/owl#ObjectProperty\"/>\n"+
" </rdf:Description>\n"+
"</rdf:RDF>";
ops = new ObjectPropertyStatementImpl();
ops.setSubjectURI("http://example.com/bob");
ops.setPropertyURI("http://example.com/prop1");
ops.setObjectURI("http://example.com/depResXYZ");
wdfj.getObjectPropertyStatementDao().deleteObjectPropertyStatement(ops);
Model expectedModel = (ModelFactory.createOntologyModel()).read(new StringReader(expected), "", "RDF/XML");
String expected =
"@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . "+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> ."+
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> ."+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . "+
"<http://example.com/bob> a owl:Thing ; " +
" rdfs:label \"Smith, Bob\"@en-US . "+
"<http://example.com/prop1> " +
" a owl:ObjectProperty ; " +
" rdfs:label \"Prop 1 Dependent Relation\" ; " +
" <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#dependencyPropertyAnnot> \"true\"^^xsd:boolean ." ;
Model expectedModel = (ModelFactory.createOntologyModel()).read(new StringReader(expected), "", "N3");
//modtime times make it difficult to compare graphs
wipeOutModTime(expectedModel);
@ -254,107 +196,174 @@ public class JenaBaseDaoTest {
Assert.assertTrue( model.isIsomorphicWith(expectedModel));
}
@Test
public void smartRemoveTestForObjPropDelete(){
String n3 = prefixesN3 +
"ex:prop1 rdf:type owl:ObjectProperty ." +
"ex:prop1 rdfs:label \"Prop 1 Dependent Relation\" ." +
"ex:prop1 " + isDependentRelation;
OntModel model = ModelFactory.createOntologyModel();
WebappDaoFactoryJena wdfj = new WebappDaoFactoryJena( model );
Model readInModel = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
OntModel ontModel = ModelFactory.createOntologyModel();
ontModel.add(readInModel);
WebappDaoFactoryJena wdfj = new WebappDaoFactoryJena( ontModel);
/* Need to have the DEPENDENT_RESOURCE class in the model */
VClass cls = new VClass();
cls.setURI(VitroVocabulary.DEPENDENT_RESOURCE);
try {
wdfj.getVClassDao().insertNewVClass(cls);
} catch (InsertException e1) {
Assert.fail("could not create class for dependentResourc");
}
ObjectProperty prop1 = wdfj.getObjectPropertyDao().getObjectPropertyByURI("http://example.com/prop1");
Assert.assertNotNull(prop1);
/* Need to have an Object Property */
ObjectProperty op = new ObjectProperty();
op.setURI("http://example.com/prop1");
try {
wdfj.getObjectPropertyDao().insertObjectProperty(op);
} catch (InsertException e1) {
Assert.fail("Could not create object property.");
}
Individual ind = new IndividualImpl();
ind.setURI("http://example.com/bob");
ind.setName("Smith, Bob");
Individual ind = new IndividualImpl();
ind.setURI("http://example.com/bob");
ind.setName("Smith, Bob");
try {
wdfj.getIndividualDao().insertNewIndividual(ind);
} catch (InsertException e) {
Assert.fail("Could not create new Individual Smith, Bob");
}
Individual indxyz = new IndividualImpl();
indxyz.setURI("http://example.com/depResXYZ");
indxyz.setName("depResXYZ");
indxyz.setVClassURI(VitroVocabulary.DEPENDENT_RESOURCE);
try {
Individual indxyz = new IndividualImpl();
indxyz.setURI("http://example.com/depResXYZ");
indxyz.setName("depResXYZ");
wdfj.getIndividualDao().insertNewIndividual(indxyz);
} catch (InsertException e) {
Assert.fail("Could not create new Individual depResXYZ");
}
StmtIterator it = model.listStatements(model.createResource("http://example.com/depResXYZ"),
RDF.type, model.createResource(VitroVocabulary.DEPENDENT_RESOURCE));
Assert.assertTrue("depResXYZ did not get rdf:type vitro:dependentResource" ,
it != null && it.nextStatement() != null);
Individual indAbc = new IndividualImpl();
indAbc.setURI("http://example.com/depResNested");
indAbc.setName("depResNested");
indAbc.setVClassURI(VitroVocabulary.DEPENDENT_RESOURCE);
try {
Individual indAbc = new IndividualImpl();
indAbc.setURI("http://example.com/depResNested");
indAbc.setName("depResNested");
wdfj.getIndividualDao().insertNewIndividual(indAbc);
} catch (InsertException e) {
Assert.fail("Could not create new Individual depResNested");
ObjectPropertyStatement ops = new ObjectPropertyStatementImpl();
ops.setSubjectURI("http://example.com/bob");
ops.setPropertyURI("http://example.com/prop1");
ops.setObjectURI("http://example.com/depResXYZ");
wdfj.getObjectPropertyStatementDao().insertNewObjectPropertyStatement(ops);
ops = new ObjectPropertyStatementImpl();
ops.setSubjectURI("http://example.com/depResXYZ");
ops.setPropertyURI("http://example.com/prop1");
ops.setObjectURI("http://example.com/depResNested");
wdfj.getObjectPropertyStatementDao().insertNewObjectPropertyStatement(ops);
wdfj.getObjectPropertyDao().deleteObjectProperty(prop1);
String expected =
"@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . "+
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> ."+
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> ."+
"@prefix owl: <http://www.w3.org/2002/07/owl#> . "+
"<http://example.com/bob> a owl:Thing ; " +
" rdfs:label \"Smith, Bob\"@en-US . " ;
Model expectedModel = (ModelFactory.createOntologyModel()).read(new StringReader(expected), "", "N3");
//modtime times make it difficult to compare graphs
wipeOutModTime(expectedModel);
wipeOutModTime(ontModel);
Assert.assertTrue( ontModel.isIsomorphicWith(expectedModel) );
} catch (InsertException e) {
Assert.fail(e.getMessage());
}
it = model.listStatements(model.createResource("http://example.com/depResNested"),
RDF.type, model.createResource(VitroVocabulary.DEPENDENT_RESOURCE));
Assert.assertTrue("depResNested did not get rdf:type vitro:dependentResource" ,
it != null && it.nextStatement() != null);
ObjectPropertyStatement ops = new ObjectPropertyStatementImpl();
ops.setSubjectURI("http://example.com/bob");
ops.setPropertyURI("http://example.com/prop1");
ops.setObjectURI("http://example.com/depResXYZ");
wdfj.getObjectPropertyStatementDao().insertNewObjectPropertyStatement(ops);
ops = new ObjectPropertyStatementImpl();
ops.setSubjectURI("http://example.com/depResXYZ");
ops.setPropertyURI("http://example.com/prop1");
ops.setObjectURI("http://example.com/depResNested");
wdfj.getObjectPropertyStatementDao().insertNewObjectPropertyStatement(ops);
String expected = "<rdf:RDF\n"+
" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n"+
" xmlns:j.0=\"http://vitro.mannlib.cornell.edu/ns/vitro/0.7#\"\n"+
" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\"\n"+
" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\"\n"+
" xmlns:owl=\"http://www.w3.org/2002/07/owl#\"\n"+
" xmlns:j.1=\"http://example.com/\" > \n"+
" <rdf:Description rdf:about=\"http://example.com/bob\">\n"+
" <rdfs:label xml:lang=\"en-US\">Smith, Bob</rdfs:label>\n"+
" <rdf:type rdf:resource=\"http://www.w3.org/2002/07/owl#Thing\"/>\n"+
" </rdf:Description>\n"+
" <rdf:Description rdf:about=\"http://vitro.mannlib.cornell.edu/ns/vitro/0.7#DependentResource\">\n"+
" <j.0:displayRankAnnot rdf:datatype=\"http://www.w3.org/2001/XMLSchema#int\">-1</j.0:displayRankAnnot>\n"+
" <j.0:displayLimitAnnot rdf:datatype=\"http://www.w3.org/2001/XMLSchema#int\">-1</j.0:displayLimitAnnot>\n"+
" <rdf:type rdf:resource=\"http://www.w3.org/2002/07/owl#Class\"/>\n"+
" </rdf:Description>\n"+
"</rdf:RDF>";
wdfj.getObjectPropertyDao().deleteObjectProperty(op);
Model expectedModel = (ModelFactory.createOntologyModel()).read(new StringReader(expected), "", "RDF/XML");
//modtime times make it difficult to compare graphs
wipeOutModTime(expectedModel);
wipeOutModTime(model);
Assert.assertTrue( model.isIsomorphicWith(expectedModel));
}
// @Test
// public void smartRemoveTestForObjPropDelete(){
//
// OntModel model = ModelFactory.createOntologyModel();
// WebappDaoFactoryJena wdfj = new WebappDaoFactoryJena( model );
//
// /* Need to have the DEPENDENT_RESOURCE class in the model */
// VClass cls = new VClass();
// //cls.setURI(VitroVocabulary.DEPENDENT_RESOURCE);
// try {
// wdfj.getVClassDao().insertNewVClass(cls);
// } catch (InsertException e1) {
// Assert.fail("could not create class for dependentResourc");
// }
//
// /* Need to have an Object Property */
// ObjectProperty op = new ObjectProperty();
// op.setURI("http://example.com/prop1");
// try {
// wdfj.getObjectPropertyDao().insertObjectProperty(op);
// } catch (InsertException e1) {
// Assert.fail("Could not create object property.");
// }
//
// Individual ind = new IndividualImpl();
// ind.setURI("http://example.com/bob");
// ind.setName("Smith, Bob");
// try {
// wdfj.getIndividualDao().insertNewIndividual(ind);
// } catch (InsertException e) {
// Assert.fail("Could not create new Individual Smith, Bob");
// }
//
// Individual indxyz = new IndividualImpl();
// indxyz.setURI("http://example.com/depResXYZ");
// indxyz.setName("depResXYZ");
// //indxyz.setVClassURI(VitroVocabulary.DEPENDENT_RESOURCE);
// try {
// wdfj.getIndividualDao().insertNewIndividual(indxyz);
// } catch (InsertException e) {
// Assert.fail("Could not create new Individual depResXYZ");
// }
//// StmtIterator it = model.listStatements(model.createResource("http://example.com/depResXYZ"),
//// RDF.type, model.createResource(VitroVocabulary.DEPENDENT_RESOURCE));
//// Assert.assertTrue("depResXYZ did not get rdf:type vitro:dependentResource" ,
//// it != null && it.nextStatement() != null);
//
// Individual indAbc = new IndividualImpl();
// indAbc.setURI("http://example.com/depResNested");
// indAbc.setName("depResNested");
//// indAbc.setVClassURI(VitroVocabulary.DEPENDENT_RESOURCE);
// try {
// wdfj.getIndividualDao().insertNewIndividual(indAbc);
// } catch (InsertException e) {
// Assert.fail("Could not create new Individual depResNested");
// }
//// it = model.listStatements(model.createResource("http://example.com/depResNested"),
//// RDF.type, model.createResource(VitroVocabulary.DEPENDENT_RESOURCE));
//// Assert.assertTrue("depResNested did not get rdf:type vitro:dependentResource" ,
//// it != null && it.nextStatement() != null);
//
//
// ObjectPropertyStatement ops = new ObjectPropertyStatementImpl();
// ops.setSubjectURI("http://example.com/bob");
// ops.setPropertyURI("http://example.com/prop1");
// ops.setObjectURI("http://example.com/depResXYZ");
// wdfj.getObjectPropertyStatementDao().insertNewObjectPropertyStatement(ops);
//
// ops = new ObjectPropertyStatementImpl();
// ops.setSubjectURI("http://example.com/depResXYZ");
// ops.setPropertyURI("http://example.com/prop1");
// ops.setObjectURI("http://example.com/depResNested");
// wdfj.getObjectPropertyStatementDao().insertNewObjectPropertyStatement(ops);
//
// String expected = "<rdf:RDF\n"+
// " xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n"+
// " xmlns:j.0=\"http://vitro.mannlib.cornell.edu/ns/vitro/0.7#\"\n"+
// " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\"\n"+
// " xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\"\n"+
// " xmlns:owl=\"http://www.w3.org/2002/07/owl#\"\n"+
// " xmlns:j.1=\"http://example.com/\" > \n"+
// " <rdf:Description rdf:about=\"http://example.com/bob\">\n"+
// " <rdfs:label xml:lang=\"en-US\">Smith, Bob</rdfs:label>\n"+
// " <rdf:type rdf:resource=\"http://www.w3.org/2002/07/owl#Thing\"/>\n"+
// " </rdf:Description>\n"+
// " <rdf:Description rdf:about=\"http://vitro.mannlib.cornell.edu/ns/vitro/0.7#DependentResource\">\n"+
// " <j.0:displayRankAnnot rdf:datatype=\"http://www.w3.org/2001/XMLSchema#int\">-1</j.0:displayRankAnnot>\n"+
// " <j.0:displayLimitAnnot rdf:datatype=\"http://www.w3.org/2001/XMLSchema#int\">-1</j.0:displayLimitAnnot>\n"+
// " <rdf:type rdf:resource=\"http://www.w3.org/2002/07/owl#Class\"/>\n"+
// " </rdf:Description>\n"+
// "</rdf:RDF>";
//
// wdfj.getObjectPropertyDao().deleteObjectProperty(op);
//
// Model expectedModel = (ModelFactory.createOntologyModel()).read(new StringReader(expected), "", "RDF/XML");
//
// //modtime times make it difficult to compare graphs
// wipeOutModTime(expectedModel);
// wipeOutModTime(model);
// Assert.assertTrue( model.isIsomorphicWith(expectedModel));
// }
void printModels(Model expected, Model result){
System.out.println("Expected:");
expected.write(System.out);