<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%> <%-- Custom form for adding an educational attainment to an individual Classes: core:EducationalTraining - primary new individual being created foaf:Person - existing individual foaf:Organization - new or existing individual core:AcademicDegree - existing individual Data properties of EducationalTraining: core:majorField core:departmentOrSchool core:supplementalInformation Object properties (domain : range) core:educationalTraining (Person : EducationalTraining) - inverse of core:educationalTrainingOf core:educationalTrainingOf (EducationalTraining : Person) - inverse of core:educationalTraining core:degreeEarned (EducationalTraining : AcademicDegree) - inverse of core:degreeOutcomeOf core:degreeOutcomeOf (AcademicDegree : EducationalTraining) - inverse of core:degreeEarned core:organizationGrantingDegree (EducationalTraining : Organization) - no inverse Future version -------------- Classes: core:DateTimeValue core:DateTimeValuePrecision Object properties: core:dateTimeValue (EducationalTraining : DateTimeValue) core:dateTimePrecision (DateTimeValue : DateTimeValuePrecision) --%> <%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ page import="java.util.Arrays" %> <%@ page import="com.hp.hpl.jena.rdf.model.Literal"%> <%@ page import="com.hp.hpl.jena.rdf.model.Model"%> <%@ page import="com.hp.hpl.jena.vocabulary.XSD" %> <%@ page import="edu.cornell.mannlib.vitro.webapp.beans.Individual"%> <%@ page import="edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary"%> <%@ page import="edu.cornell.mannlib.vitro.webapp.edit.n3editing.EditConfiguration"%> <%@ page import="edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory"%> <%@ page import="edu.cornell.mannlib.vitro.webapp.controller.VitroRequest"%> <%@ page import="edu.cornell.mannlib.vitro.webapp.web.MiscWebUtils"%> <%@page import="edu.cornell.mannlib.vitro.webapp.edit.n3editing.PersonHasPositionValidator"%> <%@ page import="org.apache.commons.logging.Log" %> <%@ page import="org.apache.commons.logging.LogFactory" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%> <%@ taglib prefix="v" uri="http://vitro.mannlib.cornell.edu/vitro/tags" %> <%! public static Log log = LogFactory.getLog("edu.cornell.mannlib.vitro.webapp.jsp.edit.forms.personHasEducationalBackground.jsp"); %> <% VitroRequest vreq = new VitroRequest(request); WebappDaoFactory wdf = vreq.getWebappDaoFactory(); vreq.setAttribute("defaultNamespace", ""); //empty string triggers default new URI behavior request.setAttribute("stringDatatypeUriJson", MiscWebUtils.escape(XSD.xstring.toString())); request.setAttribute("gYearDatatypeUriJson", MiscWebUtils.escape(XSD.gYear.toString())); %> <%-- Data properties --%> <%-- Then enter a SPARQL query for each field, by convention concatenating the field id with "Existing" to convey that the expression is used to retrieve any existing value for the field in an existing individual. Each of these must then be referenced in the sparqlForExistingLiterals section of the JSON block below and in the literalsOnForm --%> SELECT ?majorFieldExisting WHERE { ?edTrainingUri <${majorFieldPred}> ?majorFieldExisting } <%-- Pair the "existing" query with the skeleton of what will be asserted for a new statement involving this field. The actual assertion inserted in the model will be created via string substitution into the ? variables. NOTE the pattern of punctuation (a period after the prefix URI and after the ?field) --%> ?edTrainingUri <${majorFieldPred}> ?majorField . <%-- For new datetime handling in ontology - v1.2 SELECT ?existingYear WHERE { ?edTrainingUri <${hasDateTimeValue}> ?existingYear } @prefix core: <${vivoCore}> . ?dateTime a core:DateTimeValue ; core:dateTime ?year ; core:dateTimeValuePrecision core:YearPrecision . ?edTrainingUri core:dateTimeValue ?dateTime . --%> SELECT ?existingYear WHERE { ?edTrainingUri <${yearPred}> ?existingYear } ?edTrainingUri <${yearPred}> ?year . SELECT ?existingDept WHERE { ?edTrainingUri <${deptPred}> ?existingDept } ?edTrainingUri <${deptPred}> ?dept . SELECT ?existingInfo WHERE { ?edTrainingUri <${infoPred}> ?existingInfo } ?edTrainingUri <${infoPred}> ?info . <%-- Object properties --%> <%-- Note there is really no difference in how things are set up for an object property except below in the n3ForEdit section, in whether the ..Existing variable goes in SparqlForExistingLiterals or in the SparqlForExistingUris, as well as perhaps in how the options are prepared --%> SELECT ?existingDegreeUri WHERE { ?edTrainingUri <${degreeEarned}> ?existingDegreeUri } ?edTrainingUri <${degreeEarned}> ?degreeUri . ?degreeUri <${degreeOutcomeOf}> ?edTrainingUri . <%-- This property has no inverse --%> SELECT ?existingOrgUri WHERE { ?edTrainingUri <${orgGrantingDegree}> ?existingOrgUri } ?edTrainingUri <${orgGrantingDegree}> ?organizationUri . ?newOrg <${label}> ?newOrgName . <%-- Break up the new org type and subclass assertions, so that if there is no subclass, the org type still gets asserted. --%> ?newOrg a ?newOrgType . @prefix core: <${vivoCore}> . ?person core:educationalTraining ?edTrainingUri . ?edTrainingUri core:educationalTrainingOf ?person ; a core:EducationalTraining . ?newOrg <${label}> ?newOrgName ; a ?newOrgType . ?edTrainingUri <${orgGrantingDegree}> ?newOrg . ${orgClass} ${degreeClass} { "formUrl" : "${formUrl}", "editKey" : "${editKey}", "urlPatternToReturnTo" : "/entity", "subject" : ["person", "${subjectUriJson}" ], "predicate" : ["predicate", "${predicateUriJson}" ], "object" : ["edTrainingUri", "${objectUriJson}", "URI" ], "n3required" : [ "${n3ForStmtToPerson}", "${majorFieldAssertion}" ], "n3optional" : [ "${organizationUriAssertion}", "${n3ForNewOrg}", "${newOrgNameAssertion}", "${newOrgTypeAssertion}", "${degreeAssertion}", "${deptAssertion}", "${infoAssertion}", "${yearAssertion}" ], "newResources" : { "edTrainingUri" : "${defaultNamespace}", "newOrg" : "${defaultNamespace}" }, "urisInScope" : { }, "literalsInScope": { }, "urisOnForm" : [ "organizationUri", "newOrgType", "degreeUri" ], "literalsOnForm" : [ "majorField", "year", "dept", "info", "newOrgName"], "filesOnForm" : [ ], "sparqlForLiterals" : { }, "sparqlForUris" : { }, "sparqlForExistingLiterals" : { "majorField" : "${majorFieldExisting}", "year" : "${yearExisting}", "dept" : "${deptExisting}", "info" : "${infoExisting}" }, "sparqlForExistingUris" : { "organizationUri" : "${organizationUriExisting}", "degreeUri" : "${degreeExisting}" }, "fields" : { "degreeUri" : { "newResource" : "false", "validators" : [ ], "optionsType" : "INDIVIDUALS_VIA_VCLASS", "literalOptions" : [ "Select one" ], "predicateUri" : "", "objectClassUri" : "${degreeClassUriJson}", "rangeDatatypeUri" : "", "rangeLang" : "", "assertions" : [ "${degreeAssertion}" ] }, "majorField" : { "newResource" : "false", "validators" : [ "nonempty", "datatype:${stringDatatypeUriJson}" ], "optionsType" : "UNDEFINED", "literalOptions" : [ ], "predicateUri" : "", "objectClassUri" : "", "rangeDatatypeUri" : "${stringDatatypeUriJson}", "rangeLang" : "", "assertions" : [ "${majorFieldAssertion}" ] }, "year" : { "newResource" : "false", "validators" : [ "datatype:${gYearDatatypeUriJson}" ], "optionsType" : "UNDEFINED", "literalOptions" : [ ], "predicateUri" : "", "objectClassUri" : "", "rangeDatatypeUri" : "${gYearDatatypeUriJson}", "rangeLang" : "", "assertions" : ["${yearAssertion}"] }, "organizationUri" : { "newResource" : "false", "validators" : [ ], "optionsType" : "INDIVIDUALS_VIA_VCLASS", "literalOptions" : [ "Select one" ], "predicateUri" : "", "objectClassUri" : "${orgClassUriJson}", "rangeDatatypeUri" : "", "rangeLang" : "", "assertions" : [ "${organizationUriAssertion}" ] }, "newOrgName" : { "newResource" : "false", "validators" : [ ], "optionsType" : "UNDEFINED", "literalOptions" : [ ], "predicateUri" : "", "objectClassUri" : "", "rangeDatatypeUri" : "${stringDatatypeUriJson}", "rangeLang" : "", "assertions" : [ "${n3ForNewOrg}" ] }, "newOrgType" : { "newResource" : "false", "validators" : [ ], "optionsType" : "CHILD_VCLASSES", "literalOptions" : [ "Select one" ], "predicateUri" : "", "objectClassUri" : "${orgClassUriJson}", "rangeDatatypeUri" : "", "rangeLang" : "", "assertions" : [ "${newOrgTypeAssertion}" ] }, "dept" : { "newResource" : "false", "validators" : [ "datatype:${stringDatatypeUriJson}" ], "optionsType" : "UNDEFINED", "literalOptions" : [ ], "predicateUri" : "", "objectClassUri" : "", "rangeDatatypeUri" : "${stringDatatypeUriJson}", "rangeLang" : "", "assertions" : ["${deptAssertion}"] }, "info" : { "newResource" : "false", "validators" : [ "datatype:${stringDatatypeUriJson}" ], "optionsType" : "UNDEFINED", "literalOptions" : [ ], "predicateUri" : "", "objectClassUri" : "", "rangeDatatypeUri" : "${stringDatatypeUriJson}", "rangeLang" : "", "assertions" : ["${infoAssertion}"] } } } <% log.debug(request.getAttribute("editjson")); EditConfiguration editConfig = EditConfiguration.getConfigFromSession(session,request); if (editConfig == null) { editConfig = new EditConfiguration((String) request.getAttribute("editjson")); EditConfiguration.putConfigInSession(editConfig,session); } editConfig.addValidator(new PersonHasPositionValidator()); Model model = (Model) application.getAttribute("jenaOntModel"); String objectUri = (String) request.getAttribute("objectUri"); if (objectUri != null) { // editing existing editConfig.prepareForObjPropUpdate(model); } else { // adding new editConfig.prepareForNonUpdate(model); } String subjectName = ((Individual) request.getAttribute("subject")).getName(); %> <% if (objectUri != null) { // editing existing entry %> <%-- NB This will be the button text when Javascript is disabled. --%> <% } else { // adding new entry %> <%-- NB This will be the button text when Javascript is disabled. --%> <% } List customJs = new ArrayList(Arrays.asList("/js/utils.js", "/js/customFormUtils.js", "/edit/forms/js/customForm.js" //, "/edit/forms/js/customFormOneStep.js" )); request.setAttribute("customJs", customJs); List customCss = new ArrayList(Arrays.asList("/edit/forms/css/customForm.css", "/edit/forms/css/personHasEducationalTraining.css" )); request.setAttribute("customCss", customCss); %>

${title}

" >

or
Add a New Organization

e.g., Postdoctoral training or Transferred

* required fields