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 @@ -  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 {