From 1c4d73da07b8728c044c437fb8cc1571d5cab5e2 Mon Sep 17 00:00:00 2001 From: hjkhjk54 Date: Tue, 16 Aug 2011 21:02:45 +0000 Subject: [PATCH] Updates for including termType as information to be displayed in custom list view as well as editing page (and added in the N3). --- .../listViewConfig-terminologyAnnotation.xml | 6 +- productMods/edit/forms/js/addTerminology.js | 2 +- .../edit/forms/terminologyAnnotation.jsp | 26 ++++-- .../propStatement-terminologyAnnotation.ftl | 2 +- .../servlet/ProcessTerminologyController.java | 83 ++++++++++++------- 5 files changed, 78 insertions(+), 41 deletions(-) diff --git a/productMods/config/listViewConfig-terminologyAnnotation.xml b/productMods/config/listViewConfig-terminologyAnnotation.xml index f447c925..67a32514 100644 --- a/productMods/config/listViewConfig-terminologyAnnotation.xml +++ b/productMods/config/listViewConfig-terminologyAnnotation.xml @@ -9,11 +9,12 @@ PREFIX core: <http://vivoweb.org/ontology/core#> PREFIX afn: <http://jena.hpl.hp.com/ARQ/function#> - SELECT ?terminologyContextNode ?referencedTerm ?entryTerm ?termLabel WHERE { + SELECT ?terminologyContextNode ?referencedTerm ?entryTerm ?termLabel ?termType WHERE { ?subject ?property ?terminologyContextNode . ?terminologyContextNode core:referencedTerm ?referencedTerm . ?terminologyContextNode core:entryTerm ?entryTerm . ?terminologyContextNode core:termLabel ?termLabel . + ?terminologyContextNode core:termType ?termType . } ORDER BY ?termLabel @@ -27,13 +28,14 @@ ?terminologyContextNode core:referencedTerm ?referencedTerm . ?terminologyContextNode core:entryTerm ?entryTerm . ?terminologyContextNode core:termLabel ?termLabel . + ?terminologyContextNode core:termType ?termType . } WHERE { ?subject ?property ?terminologyContextNode . ?terminologyContextNode core:referencedTerm ?referencedTerm . ?terminologyContextNode core:entryTerm ?entryTerm . ?terminologyContextNode core:termLabel ?termLabel . - + ?terminologyContextNode core:termType ?termType . } diff --git a/productMods/edit/forms/js/addTerminology.js b/productMods/edit/forms/js/addTerminology.js index e9a20255..7f09fbc7 100644 --- a/productMods/edit/forms/js/addTerminology.js +++ b/productMods/edit/forms/js/addTerminology.js @@ -189,7 +189,7 @@ var addTerminologyForm = { "
" + "" + "" + - label + "( " + type + ")" + + label + " (" + type + ")" + "" + definition + "" + "
" + ""; diff --git a/productMods/edit/forms/terminologyAnnotation.jsp b/productMods/edit/forms/terminologyAnnotation.jsp index 2b53885d..57146759 100644 --- a/productMods/edit/forms/terminologyAnnotation.jsp +++ b/productMods/edit/forms/terminologyAnnotation.jsp @@ -58,6 +58,7 @@ SPARQL queries for existing values. --%> ?terminologyContextNode core:referencedTerm ?referencedTerm . ?terminologyContextNode core:entryTerm ?entryTerm . ?terminologyContextNode core:termLabel ?termLabel . + ?terminologyContextNode core:termType ?termType . @@ -82,7 +83,7 @@ SPARQL queries for existing values. --%> "urisInScope" : { }, "literalsInScope": { }, "urisOnForm" : [ "referencedTerm" ], - "literalsOnForm" : [ "entryTerm", "termLabel" ], + "literalsOnForm" : [ "entryTerm", "termLabel", "termType" ], "filesOnForm" : [ ], "sparqlForLiterals" : { }, "sparqlForUris" : { }, @@ -107,7 +108,7 @@ SPARQL queries for existing values. --%> "literalOptions" : [ ], "predicateUri" : "", "objectClassUri" : "", - "rangeDatatypeUri" : "", + "rangeDatatypeUri" : "${stringDatatypeUriJson}", "rangeLang" : "", "assertions" : [ "${n3ForTerminology}" ] }, @@ -118,7 +119,18 @@ SPARQL queries for existing values. --%> "literalOptions" : [ ], "predicateUri" : "", "objectClassUri" : "", - "rangeDatatypeUri" : "", + "rangeDatatypeUri" : "${stringDatatypeUriJson}", + "rangeLang" : "", + "assertions" : [ "${n3ForTerminology}" ] + } + ,"termType" : { + "newResource" : "false", + "validators" : [ "nonempty" ], + "optionsType" : "UNDEFINED", + "literalOptions" : [ ], + "predicateUri" : "", + "objectClassUri" : "", + "rangeDatatypeUri" : "${stringDatatypeUriJson}", "rangeLang" : "", "assertions" : [ "${n3ForTerminology}" ] } @@ -201,14 +213,16 @@ SPARQL queries for existing values. --%> <% String termLabelUri = vivoCore + "termLabel"; + String termTypeUri = vivoCore + "termType"; for ( Individual termNode : terminologyAnnotationNodes ) { request.setAttribute("termNodeUri", termNode.getURI()); //Get label and type only as mirroring authorship where labels but no links for individuals incoldued DataPropertyStatement termLabelStatement = termNode.getDataPropertyStatement(termLabelUri); String termLabel = termLabelStatement.getData(); request.setAttribute("termLabel", termLabel); - //Possible to get referenced term using object property statement? - + DataPropertyStatement termTypeStatement = termNode.getDataPropertyStatement(termTypeUri); + String termType = termTypeStatement.getData(); + request.setAttribute("termType", termType); %>
  • <%-- span.author will be used in the next phase, when we display a message that the author has been @@ -218,7 +232,7 @@ SPARQL queries for existing values. --%> for the case when it's followed by an em tag - we want the width to apply to the whole thing. --%> - ${termLabel} + ${termLabel} (${termType}) Remove diff --git a/productMods/templates/freemarker/body/partials/individual/propStatement-terminologyAnnotation.ftl b/productMods/templates/freemarker/body/partials/individual/propStatement-terminologyAnnotation.ftl index 65002b9b..7e3c35b2 100644 --- a/productMods/templates/freemarker/body/partials/individual/propStatement-terminologyAnnotation.ftl +++ b/productMods/templates/freemarker/body/partials/individual/propStatement-terminologyAnnotation.ftl @@ -14,5 +14,5 @@ <#-- Use a macro to keep variable assignments local; otherwise the values carry over to the next statement --> <#macro showTerm statement> - ${statement.termLabel} + ${statement.termLabel} (${statement.termType}) \ No newline at end of file diff --git a/src/edu/cornell/mannlib/vitro/webapp/servlet/ProcessTerminologyController.java b/src/edu/cornell/mannlib/vitro/webapp/servlet/ProcessTerminologyController.java index a59985e7..bd0a545f 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/servlet/ProcessTerminologyController.java +++ b/src/edu/cornell/mannlib/vitro/webapp/servlet/ProcessTerminologyController.java @@ -25,12 +25,19 @@ import freemarker.ext.beans.BeansWrapper; import freemarker.template.DefaultObjectWrapper; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.Field; import javax.servlet.RequestDispatcher; +import com.hp.hpl.jena.vocabulary.XSD; public class ProcessTerminologyController extends VitroHttpServlet { private static final long serialVersionUID = 1L; private static final Log log = LogFactory.getLog(ProcessTerminologyController.class); private static final String submissionUrl = "/edit/processRdfForm2.jsp"; - + //Field names/variables names for n3 - these will have numbers added as suffix if more than one term + private static String referencedBase = "referencedTerm"; + private static String entryBase = "entryTerm"; + private static String labelBase = "termLabel"; + private static String typeBase = "termType"; + //String datatype + private static String xsdStringType = XSD.xstring.toString(); @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); @@ -101,19 +108,19 @@ public class ProcessTerminologyController extends VitroHttpServlet { String[] termsArray = termParam.split(","); String[] termLabels = labelParam.split(","); String[] termTypes = typeParam.split(","); - String entryTerm = vreq.getParameter("entryTerm"); + int numberParameters = termsArray.length; int index; - String referencedBase = "referencedTerm"; - String labelBase = "termLabel"; - String termBase = "termType"; + //Should already include entry term so no need to include here + //If that changes, then add entry term here + //String entryTerm = vreq.getParameter("entryTerm"); //newUrl += "&entryTerm=" + URLEncoder.encode(entryTerm); - //Add entry + //Process values and generate url matching field name to value for(index = 1; index <= numberParameters; index++) { String referencedInputName = referencedBase + index; String termLabelInputName = labelBase + index; - String termTypeInputName =termBase + index; + String termTypeInputName =typeBase + index; //array is set to start at 0, not 1 String referencedTerm = termsArray[index - 1]; String termLabel = termLabels[index - 1]; @@ -141,7 +148,7 @@ public class ProcessTerminologyController extends VitroHttpServlet { } /* - * "referencedTerm" : { + * "referencedTerm" : { "newResource" : "false", "validators" : [ "nonempty" ], "optionsType" : "UNDEFINED", //UNSURE WHAT TO KEEP HERE @@ -159,7 +166,7 @@ public class ProcessTerminologyController extends VitroHttpServlet { "literalOptions" : [ ], "predicateUri" : "", "objectClassUri" : "", - "rangeDatatypeUri" : "", + "rangeDatatypeUri" : "${stringDatatypeUriJson}", "rangeLang" : "", "assertions" : [ "${n3ForTerminology}" ] }, @@ -170,7 +177,18 @@ public class ProcessTerminologyController extends VitroHttpServlet { "literalOptions" : [ ], "predicateUri" : "", "objectClassUri" : "", - "rangeDatatypeUri" : "", + "rangeDatatypeUri" : "${stringDatatypeUriJson}", + "rangeLang" : "", + "assertions" : [ "${n3ForTerminology}" ] + } + ,"termType" : { + "newResource" : "false", + "validators" : [ "nonempty" ], + "optionsType" : "UNDEFINED", + "literalOptions" : [ ], + "predicateUri" : "", + "objectClassUri" : "", + "rangeDatatypeUri" : "${stringDatatypeUriJson}", "rangeLang" : "", "assertions" : [ "${n3ForTerminology}" ] } @@ -179,23 +197,20 @@ public class ProcessTerminologyController extends VitroHttpServlet { private void addFields(EditConfiguration editConfig, VitroRequest vreq, int numberTerms) { Map fieldMap = new HashMap(); int index; - String referencedBase = "referencedTerm"; - String entryBase = "entryTerm"; - String labelBase = "termLabel"; //Entry only needs to be added once - fieldMap.put(entryBase, generateField(editConfig)); + fieldMap.put(entryBase, generateField(editConfig, xsdStringType)); //First one already included so add new ones here for(index = 1; index <= numberTerms; index++) { int suffix = index; String referencedTerm = referencedBase + suffix; String label = labelBase + suffix; - //need to add termType + String type = typeBase + suffix; //Generate Field for each - fieldMap.put(referencedTerm, generateField(editConfig)); - fieldMap.put(label, generateField(editConfig)); - //termType would also go in here + fieldMap.put(referencedTerm, generateField(editConfig, null)); + fieldMap.put(label, generateField(editConfig, xsdStringType)); + fieldMap.put(type, generateField(editConfig, xsdStringType)); } editConfig.setFields(fieldMap); } @@ -210,7 +225,7 @@ public class ProcessTerminologyController extends VitroHttpServlet { "rangeDatatypeUri" : "", "rangeLang" : "", "assertions" : [ "${n3ForTerminology}" ]*/ - private Field generateField(EditConfiguration editConfig) { + private Field generateField(EditConfiguration editConfig, String dataType) { List n3Required = editConfig.getN3Required(); Field field = new Field(); field.setNewResource(false); @@ -221,8 +236,13 @@ public class ProcessTerminologyController extends VitroHttpServlet { field.setLiteralOptions(new ArrayList>()); field.setPredicateUri(""); field.setObjectClassUri(""); - field.setRangeDatatypeUri(""); - field.setRangeLang(""); + if(dataType == null || dataType.isEmpty()) { + field.setRangeLang(""); + field.setRangeDatatypeUri(""); + } else { + field.setRangeDatatypeUri(dataType); + } + field.setAssertions(n3Required); return field; } @@ -238,9 +258,6 @@ public class ProcessTerminologyController extends VitroHttpServlet { List literalsOnForm = new ArrayList(); int index; - String referencedBase = "referencedTerm"; - String entryBase = "entryTerm"; - String labelBase = "termLabel"; //entry term needs to be added only once literalsOnForm.add(entryBase); @@ -249,8 +266,10 @@ public class ProcessTerminologyController extends VitroHttpServlet { int suffix = index; String referencedTerm = referencedBase + suffix; String label = labelBase + suffix; + String type = typeBase + suffix; urisOnForm.add(referencedTerm); literalsOnForm.add(label); + literalsOnForm.add(type); } editConfig.setUrisOnform(urisOnForm); editConfig.setLiteralsOnForm(literalsOnForm); @@ -268,21 +287,23 @@ public class ProcessTerminologyController extends VitroHttpServlet { List n3Required = new ArrayList(); int index; String nodeBase = "?terminologyContextNode"; - String referencedBase = "?referencedTerm"; - //there's only one entry term in this case - String entryBase = "?entryTerm"; - String labelBase = "?termLabel"; + String entryVar = "?" + entryBase; + String referencedVar = "?" + referencedBase; + String labelVar = "?" + labelBase; + String typeVar = "?" + typeBase; String prefixStr = "@prefix core: ."; //First one already included so add new ones here for(index = 1; index <= numberTerms; index++) { int suffix = index; String node = nodeBase + suffix; - String referencedTerm = referencedBase + suffix; - String label = labelBase + suffix; + String referencedTerm = referencedVar + suffix; + String label = labelVar + suffix; + String type = typeVar + suffix; String n3String = prefixStr; n3String += "?subject ?predicate " + node + " . " + - node + " core:entryTerm " + entryBase + " . " + + node + " core:entryTerm " + entryVar + " . " + node + " core:termLabel " + label + " . " + + node + " core:termType " + type + " . " + node + " core:referencedTerm " + referencedTerm + " . "; n3Required.add(n3String); }