diff --git a/productMods/edit/forms/js/addConcept.js b/productMods/edit/forms/js/addConcept.js
index 12361cb4..f182c696 100644
--- a/productMods/edit/forms/js/addConcept.js
+++ b/productMods/edit/forms/js/addConcept.js
@@ -279,12 +279,13 @@ var addConceptForm = {
if ($(link)[0] === $('.remove:last')[0]) {
removeLast = true;
}
-
+ //Using primitive rdf edit which expects an n3 string for deletion
$.ajax({
url: $(link).attr('href'),
type: 'POST',
data: {
- deletion: $(link).parents('.existingConcept').data('conceptNodeUri')
+ additions: '',
+ retractions: addConceptForm.generateDeletionN3($(link).parents('.existingConcept').data('conceptNodeUri'))
},
dataType: 'json',
context: link, // context for callback
@@ -309,6 +310,14 @@ var addConceptForm = {
}
}
});
+ },
+ generateDeletionN3: function(conceptNodeUri) {
+ var n3String = "<" + addConceptForm.subjectUri + "> <" + addConceptForm.predicateUri + "> <" + conceptNodeUri + "> .";
+ //add inverse string to also be removed
+ if(addConceptForm.inversePredicateUri.length > 0) {
+ n3String += "<" + conceptNodeUri + "> <" + addConceptForm.inversePredicateUri + "> <" + addConceptForm.subjectUri + "> .";
+ }
+ return n3String;
}
};
diff --git a/productMods/templates/freemarker/edit/forms/addAssociatedConcept.ftl b/productMods/templates/freemarker/edit/forms/addAssociatedConcept.ftl
index 24b9e765..91d0ff18 100644
--- a/productMods/templates/freemarker/edit/forms/addAssociatedConcept.ftl
+++ b/productMods/templates/freemarker/edit/forms/addAssociatedConcept.ftl
@@ -4,6 +4,7 @@
<#assign existingConcepts = editConfiguration.pageData.existingConcepts/>
<#assign userDefinedConceptUrl = editConfiguration.pageData.userDefinedConceptUrl/>
<#assign sources = editConfiguration.pageData.searchServices/>
+<#assign inversePredicate = editConfiguration.pageData.inversePredicate />
<#--If edit submission exists, then retrieve validation errors if they exist-->
<#if editSubmission?has_content && editSubmission.submissionExists = true && editSubmission.validationErrors?has_content>
@@ -52,7 +53,7 @@
#if>
- Remove
+ Remove
@@ -121,7 +122,10 @@
diff --git a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddAssociatedConceptGenerator.java b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddAssociatedConceptGenerator.java
index ecb2cde0..4d802d86 100644
--- a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddAssociatedConceptGenerator.java
+++ b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddAssociatedConceptGenerator.java
@@ -163,11 +163,17 @@ public class AddAssociatedConceptGenerator extends VivoBaseGenerator implements
//Since the concept node from an external vocabulary may already be in the system
//The label and is defined by may already be defined and don't require re-saving
private List generateN3Required(VitroRequest vreq) {
- return list(
+ List n3Required = list(
getPrefixesString() + "\n" +
"?subject ?predicate ?conceptNode .\n" +
"?conceptNode <" + RDF.type.getURI() + "> ."
);
+ List inversePredicate = getInversePredicate(vreq);
+ //Adding inverse predicate if it exists
+ if(inversePredicate.size() > 0) {
+ n3Required.add("?conceptNode <" + inversePredicate.get(0) + "> ?subject .");
+ }
+ return n3Required;
}
//Don't think there's any n3 optional here
@@ -316,7 +322,12 @@ public class AddAssociatedConceptGenerator extends VivoBaseGenerator implements
formSpecificData.put("userDefinedConceptUrl", getUserDefinedConceptUrl(vreq));
//Add URIs and labels for different services
formSpecificData.put("searchServices", ConceptSearchServiceUtils.getVocabSources());
-
+ List inversePredicate = getInversePredicate(vreq);
+ if(inversePredicate.size() > 0) {
+ formSpecificData.put("inversePredicate", inversePredicate.get(0));
+ } else {
+ formSpecificData.put("inversePredicate", "");
+ }
editConfiguration.setFormSpecificData(formSpecificData);
}
diff --git a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddGrantRoleToPersonGenerator.java b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddGrantRoleToPersonGenerator.java
index 4166bbf6..98cab059 100644
--- a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddGrantRoleToPersonGenerator.java
+++ b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddGrantRoleToPersonGenerator.java
@@ -196,7 +196,7 @@ public class AddGrantRoleToPersonGenerator implements EditConfigurationGenerator
editString += "?role a <" + getRoleType(vreq) + "> .";
editString += "?role <" + getRoleToGrantPredicate(vreq) + "> ?grant .";
editString += "?grant a core:Grant ;" +
- "core:relatedRole ?role .";
+ "<" + getGrantToRolePredicate(vreq) + "> ?role .";
return editString;
}
@@ -650,7 +650,7 @@ public class AddGrantRoleToPersonGenerator implements EditConfigurationGenerator
}
private Object getHasCoPrincipalInvestigatorURI() {
- return getVivoOntologyCoreNamespace() + "hasPrincipalInvestigatorRole";
+ return getVivoOntologyCoreNamespace() + "hasCo-PrincipalInvestigatorRole";
}
@@ -660,7 +660,7 @@ public class AddGrantRoleToPersonGenerator implements EditConfigurationGenerator
}
private Object getHasPrincipalInvestigatorURI() {
- return getVivoOntologyCoreNamespace() + "hasCo-PrincipalInvestigatorRole";
+ return getVivoOntologyCoreNamespace() + "hasPrincipalInvestigatorRole";
}
diff --git a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddUserDefinedConceptGenerator.java b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddUserDefinedConceptGenerator.java
index de7b8164..25a7e4dd 100644
--- a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddUserDefinedConceptGenerator.java
+++ b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddUserDefinedConceptGenerator.java
@@ -163,18 +163,25 @@ public class AddUserDefinedConceptGenerator extends VivoBaseGenerator implement
//Here, the node is typed as a skos concept
private List generateN3Required(VitroRequest vreq) {
- return list(
+ List n3Required = list(
getPrefixesString() + "\n" +
"?subject ?predicate ?conceptNode .\n"
);
+ List inversePredicate = getInversePredicate(vreq);
+ //Adding inverse predicate if it exists
+ if(inversePredicate.size() > 0) {
+ n3Required.add("?conceptNode <" + inversePredicate.get(0) + "> ?subject .");
+ }
+ return n3Required;
}
//Optional b/c user may select an existing SKOS concept
private List generateN3Optional() {
return list(
- "?conceptNode <" + VitroVocabulary.RDF_TYPE + "> <" + SKOSConceptType + "> .\n" +
- "?conceptNode <" + label + "> ?conceptLabel ."
- );
+ "?conceptNode <" + VitroVocabulary.RDF_TYPE + "> <" + SKOSConceptType + "> .\n" +
+ "?conceptNode <" + label + "> ?conceptLabel ."
+ );
+
}
diff --git a/src/org/vivoweb/webapp/util/ModelUtils.java b/src/org/vivoweb/webapp/util/ModelUtils.java
index c42c9a68..ab3f9aff 100644
--- a/src/org/vivoweb/webapp/util/ModelUtils.java
+++ b/src/org/vivoweb/webapp/util/ModelUtils.java
@@ -23,7 +23,7 @@ public class ModelUtils {
private static final String processPropertyURI = "http://vivoweb.org/ontology/core#roleRealizedIn";
private static final String processPropertyInverseURI = "http://vivoweb.org/ontology/core#realizedRole";
private static final String nonProcessPropertyURI = "http://vivoweb.org/ontology/core#roleContributesTo";
- private static final String nonProcessPropertyInverseURI = "http://vivoweb.org/ontology/core#ContributingRole";
+ private static final String nonProcessPropertyInverseURI = "http://vivoweb.org/ontology/core#contributingRole";
private static Set processClass = new HashSet();
static {